Определение типа компьютера и версии BIOS
Добавлено: Пт янв 03, 2025 10:46 pm
Hello, world!
Есть два способа определить модель компьютера и получить информацию о конфигурации - прочитать эту информацию из ПЗУ BIOS или вызвать одну из функций прерывания 15h, возвращающую адрес таблицы конфигурации (в статье я буду использовать именно её).
В ПЗУ BIOS по адресу F000h:FFFEh записан байт, значение которого можно использовать для конфигурации типа компьютера:
FF оригинальный IBM PC;
FE XT, Portable PC;
FD PCjr;
FC AT;
FB XT с памятью 640 К на материнской плате;
FA PS/2 модель 25 или 30;
F9 Convertible PC;
F8 PS/2 модели 55SX, 70, 80;
9A Compaq XT, Compaq Plus;
30 Sperry PC;
2D Compaq PC, Compaq Deskpro
Более подробную информацию можно получить, использовав функцию C0h прерывания 15h:
На входе: AH = C0h
На выходе: ES:BX = адрес таблицы конфигурации,
таблица находится в ПЗУ BIOS;
CF = 0 при успешном вызове прерывания;
CF = 1 если данная версия BIOS не поддерживает функцию C0h.
После выполнения прерывания в регистрах ES:BX будет записан адрес области памяти конфигурации компьютера (аппаратно записано в ПЗУ BIOS). Приведу структуру этой области памяти:
(+0) dw размер таблицы в байтах
(+2) db код модели
(+3) db дополнительный код модели
(+4) db версия BIOS revision: 0 для первой реализации; 2 для второй и т.д.
(+5) db байт конфигурации оборудования:
(+8) dw зарезервировано и равно 0
В следующей таблице приведены коды моделей, версии BIOS, дополнительные коды моделей для некоторых компьютеров:
FFh * * 04/24/81 оригинальная версия
IBM PC
FFh * * 10/19/81 IBM PC, в этой версии
BIOS исправлены некоторые ошибки
FFh * * 10/27/82 IBM PC, используется
накопитель на магнитном диске
(НМД), оперативная память 640 К,
поддерживается адаптер дисплея EGA
FEh * * 08/16/82 IBM PC XT
FEh * * 11/08/82 IBM PC XT, Portable
FDh * * 06/01/83 PCjr
FCh * * 01/10/84 IBM AT, модели 068,
099, частота тактового генератора
6 MHz, емкость НМД - 20MB
FCh 00h 01h 06/10/85 IBM AT, модель 239,
частота тактового генератора
6 MHz, емкость НМД - 30MB
FCh 01h 00h 11/15/85 IBM AT, модели 319,
339, частота тактового генератора
8 MHz, используются расширенная
клавиатура, BIOS может работать с
накопителями на гибких магнитных
дисках формата 3,5 дюйма
FCh 01h - Compaq 286/386
FCh 02h 00h 04/21/86 IBM PC XT-286
FCh 04h 00h 02/13/87 PS/2 модель 50
FCh 04h 03h 04/18/88 PS/2 модель 50Z
FCh 05h 00h 02/13/87 PS/2 модель 60
FCh 06h - 7552 "Gearbox"
FCh 09h 02h 06/28/89 PS/2 модель 30-286
FCh 81h 00h 01/15/88 Phoenix 386 BIOS,
версия 1.10
FBh 00h 01h 01/10/86 IBM PC XT, расширенная
клавиатура, BIOS может работать с
накопителями на гибких магнитных
дисках формата 3,5 дюйма
FBh 00h 02h 05/09/86 IBM PC XT
FAh 00h 00h 09/02/86 PS/2 модель 30
FAh 00h 01h 12/12/86 PS/2 модель 30
FAh 01h 00h - PS/2 модель 25
F9h 00h 00h 09/13/85 PC Convertible
F8h 00h 00h 03/30/87 PS/2 модель 80 16MHz
F8h 01h 00h 10/07/87 PS/2 модель 80 20MHz
F8h 04h 02h 04/11/88 PS/2 модель 70
F8h 04h 03h 03/17/89 PS/2 модель 70
F8h 09h - - PS/2 модель 70
F8h 09h 02h 04/11/88 PS/2 модель 70
F8h 09h 03h 03/17/89 PS/2 модель 70
F8h 0Ch 00h 11/02/88 PS/2 модель 55SX
F8h 1Bh 00h 10/02/89 PS/2 модель 70-486
9Ah * * - Compaq XT или
Compaq Plus
30h - - - Sperry PC
2Dh * * - Compaq PC или
Compaq Deskpro
Замечу, что функция C0h прерывания 15h поддерживается не всеми версиями BIOS, а лишь теми, что были выпущены после 10 января 1986 года.
Приведу текст программы, которая выводит на экран конфигурацию компьютера, используя данные полученные из ПЗУ BIOS с помощью функции C0h прерывания 15h:
Результат работы программы:
Программа была запущена в виртуальной ОС MS DOS 6.22 под управлением VMWare.
Использована версия компилятора MASM 6.11 в контексте операционной системы MS DOS 6.22!
Спасибо за внимание!
С уважением, push0ret!
Есть два способа определить модель компьютера и получить информацию о конфигурации - прочитать эту информацию из ПЗУ BIOS или вызвать одну из функций прерывания 15h, возвращающую адрес таблицы конфигурации (в статье я буду использовать именно её).
В ПЗУ BIOS по адресу F000h:FFFEh записан байт, значение которого можно использовать для конфигурации типа компьютера:
FF оригинальный IBM PC;
FE XT, Portable PC;
FD PCjr;
FC AT;
FB XT с памятью 640 К на материнской плате;
FA PS/2 модель 25 или 30;
F9 Convertible PC;
F8 PS/2 модели 55SX, 70, 80;
9A Compaq XT, Compaq Plus;
30 Sperry PC;
2D Compaq PC, Compaq Deskpro
Более подробную информацию можно получить, использовав функцию C0h прерывания 15h:
На входе: AH = C0h
На выходе: ES:BX = адрес таблицы конфигурации,
таблица находится в ПЗУ BIOS;
CF = 0 при успешном вызове прерывания;
CF = 1 если данная версия BIOS не поддерживает функцию C0h.
После выполнения прерывания в регистрах ES:BX будет записан адрес области памяти конфигурации компьютера (аппаратно записано в ПЗУ BIOS). Приведу структуру этой области памяти:
(+0) dw размер таблицы в байтах
(+2) db код модели
(+3) db дополнительный код модели
(+4) db версия BIOS revision: 0 для первой реализации; 2 для второй и т.д.
(+5) db байт конфигурации оборудования:
- бит 7 = канал 3 контроллера прямого доступа к памяти используется дисковой системой базового ввода-вывода (дисковой BIOS)
бит 6 = установлен второй контроллер прерываний 8259
бит 5 = установлены часы реального времени
бит 4 = каждый раз после вызова прерывания от клавиатуры INT 9h вызывается функция 4Fh прерывания INT 15h
бит 3 = BIOS поддерживает ожидание внешнего события
бит 2 = используется расширенная область данных BIOS
бит 1 = если этот бит установлен в 1, то используется шина Micro Channel, в противном случае - ISA
бит 0 зарезервирован
(+8) dw зарезервировано и равно 0
В следующей таблице приведены коды моделей, версии BIOS, дополнительные коды моделей для некоторых компьютеров:
FFh * * 04/24/81 оригинальная версия
IBM PC
FFh * * 10/19/81 IBM PC, в этой версии
BIOS исправлены некоторые ошибки
FFh * * 10/27/82 IBM PC, используется
накопитель на магнитном диске
(НМД), оперативная память 640 К,
поддерживается адаптер дисплея EGA
FEh * * 08/16/82 IBM PC XT
FEh * * 11/08/82 IBM PC XT, Portable
FDh * * 06/01/83 PCjr
FCh * * 01/10/84 IBM AT, модели 068,
099, частота тактового генератора
6 MHz, емкость НМД - 20MB
FCh 00h 01h 06/10/85 IBM AT, модель 239,
частота тактового генератора
6 MHz, емкость НМД - 30MB
FCh 01h 00h 11/15/85 IBM AT, модели 319,
339, частота тактового генератора
8 MHz, используются расширенная
клавиатура, BIOS может работать с
накопителями на гибких магнитных
дисках формата 3,5 дюйма
FCh 01h - Compaq 286/386
FCh 02h 00h 04/21/86 IBM PC XT-286
FCh 04h 00h 02/13/87 PS/2 модель 50
FCh 04h 03h 04/18/88 PS/2 модель 50Z
FCh 05h 00h 02/13/87 PS/2 модель 60
FCh 06h - 7552 "Gearbox"
FCh 09h 02h 06/28/89 PS/2 модель 30-286
FCh 81h 00h 01/15/88 Phoenix 386 BIOS,
версия 1.10
FBh 00h 01h 01/10/86 IBM PC XT, расширенная
клавиатура, BIOS может работать с
накопителями на гибких магнитных
дисках формата 3,5 дюйма
FBh 00h 02h 05/09/86 IBM PC XT
FAh 00h 00h 09/02/86 PS/2 модель 30
FAh 00h 01h 12/12/86 PS/2 модель 30
FAh 01h 00h - PS/2 модель 25
F9h 00h 00h 09/13/85 PC Convertible
F8h 00h 00h 03/30/87 PS/2 модель 80 16MHz
F8h 01h 00h 10/07/87 PS/2 модель 80 20MHz
F8h 04h 02h 04/11/88 PS/2 модель 70
F8h 04h 03h 03/17/89 PS/2 модель 70
F8h 09h - - PS/2 модель 70
F8h 09h 02h 04/11/88 PS/2 модель 70
F8h 09h 03h 03/17/89 PS/2 модель 70
F8h 0Ch 00h 11/02/88 PS/2 модель 55SX
F8h 1Bh 00h 10/02/89 PS/2 модель 70-486
9Ah * * - Compaq XT или
Compaq Plus
30h - - - Sperry PC
2Dh * * - Compaq PC или
Compaq Deskpro
Замечу, что функция C0h прерывания 15h поддерживается не всеми версиями BIOS, а лишь теми, что были выпущены после 10 января 1986 года.
Приведу текст программы, которая выводит на экран конфигурацию компьютера, используя данные полученные из ПЗУ BIOS с помощью функции C0h прерывания 15h:
Код: Выделить всё
.286
.model tiny
code segment
org 100h
start:
mov ah, 0C0h
int 15h
mov cx, word ptr es:[bx]
mov ax, es
push ds
pop es
mov ds, ax
mov di, offset bios.size_table
mov si, bx
rep movsb
push es
pop ds
;write model code
mov al, bios.model_code
mov di, offset model+14
call hex_ascii
mov model, 1d
;write additional code of model
mov al, bios.add_code
mov di, offset ex_code+12
call hex_ascii
mov ex_code, 1d
;write version of modification BIOS
mov al, bios.bios_ver
mov di, offset bios_v+16
call hex_ascii
mov bios_v, 1d
;Configuration byte
mov al, bios.hrdwr_cfg
;test system bus
test al, 2d
jnz mcc
mov bus2, 1d
jmp bios_a
;used microchannel
mcc:
mov bus1, 1d
bios_a:
test al, 4d
jz bios_b
mov bios1, 1d
bios_b:
test al, 8d
jz ints
mov bios2, 1d
ints:
test al, 16d
jz r_t_c
mov _int9, 1d
r_t_c:
test al, 32d
jz ctrl_ints
mov rtc, 1d
ctrl_ints:
test al, 64d
jz ch_dma
mov ctrl_int, 1d
ch_dma:
test al, 128d
jz dsp_out
mov dma, 1d
dsp_out:
mov bx, offset model
lp:
cmp byte ptr[bx], 0FFh
jz exit
call display
add bx, 53d
jmp lp
exit:
mov ax, 4c00h
int 21h
display proc uses bx
mov si, bx
cmp byte ptr[si], 1d
jz displ
jmp exitp
displ:
inc bx
mov dx, bx
mov ah, 9d
int 21h
exitp:
ret
display endp
hex_ascii proc uses di cx bx
mov cx, 2d
trans:
mov bl, al
and bl, 0Fh
cmp bl, 9d
ja letter
add bl, 30h
mov byte ptr[di], bl
dec di
shr al, 4d
loop trans
jmp exp
letter:
add bl, 37h
mov byte ptr[di], bl
dec di
shr al, 4d
loop trans
exp:
ret
hex_ascii endp
biosinfo struc
size_table dw ?
model_code db ?
add_code db ?
bios_ver db ?
hrdwr_cfg db ?
reserved dd ?
biosinfo ends
model db 0,'Model code:', 9d, 2d dup(0), 0Ah, 0Dh, 24h, 35d dup(0)
ex_code db 0,'Add code:', 9d, 2d dup(0), 0Ah, 0Dh, 24h, 37d dup(0)
bios_v db 0,'Bios version:', 9d, 2d dup(0), 0Ah, 0Dh, 24h, 33d dup(0)
bus1 db 0,'Used MicroChannel', 0Ah, 0Dh, 24h, 32d dup(0)
bus2 db 0,'Used ISA', 0Ah, 0Dh, 24h, 41d dup(0)
bios1 db 0,'Used extended memory area', 0Ah, 0Dh, 24h, 24d dup(0)
bios2 db 0,'BIOS have a function of waiting external event', 0Ah, 0Dh, 24h, 3d dup(0)
_int9 db 0,'After calling INT 9h, called function 4Fh int 15h', 0Ah, 0Dh, 24h
rtc db 0,'Real time clock installed', 0Ah, 0Dh, 24h, 24d dup(0)
ctrl_int db 0,'Second 8259 interrupt controller installed', 0Ah, 0Dh, 24h, 7d dup(0)
dma db 0,'DMA channel 3 used by BIOS to work with disk', 0Ah, 0Dh, 24h, 5d dup(0)
eos db 0FFh
bios biosinfo <>
code ends
end start
Программа была запущена в виртуальной ОС MS DOS 6.22 под управлением VMWare.
Использована версия компилятора MASM 6.11 в контексте операционной системы MS DOS 6.22!
Спасибо за внимание!
С уважением, push0ret!