Аппаратное обеспечение IBM PC




Определение типа компьютера и версии BIOS - часть 4


printf("\n*BIOSTEST* Информация о BIOS, " "© Фролов А., 1991");

// Конструируем указатель на дату изготовления // BIOS. Эта дата записана в ПЗУ по адресу F000h:FFF5h.

biosinf_ptr = FP_MAKE(0xf000, 0xfff5);

// Выводим дату на экран

printf("\n\nДата изготовления BIOS: "); for(i=0; i<8; i++) putch(*((char far *)biosinf_ptr + i));

// Вызываем функцию C0h для получения адреса // таблицы конфигурации компьютера.

rg.h.ah = 0xc0; int86x(0x15, &rg, &rg, &srg);

// Если данная функция не поддерживается BIOS, // читаем код модели компьютера из ПЗУ // по адресу F000h:FFFEh.

if(rg.x.cflag == 1) { printf("\nФункция C0h прерывания INT 15h " "данной версией BIOS не поддерживается\n");

// Конструируем указатель на код модели

biosinf_ptr = FP_MAKE(0xf000, 0xfffe);

// Выводим код модели компьютера на экран

printf("\nКод модели: %02.2X", (unsigned char)(*(char far *)biosinf_ptr));

exit(-1); }

// Конструируем укзатель на таблицу конфигурации

biosinf_ptr = FP_MAKE(srg.es, rg.x.bx);

// Выводим на экран содержимое таблицы

printf("\nАдрес таблицы конфигурации: %Fp" "\nРазмер таблицы в байтах: %d" "\nКод модели: %02.2X" "\nДополнительный код модели: %d" "\nВерсия BIOS: %d" "\nКонфигурация оборудования: %02.2X", biosinf_ptr, biosinf_ptr->size, biosinf_ptr->model, biosinf_ptr->submodel, biosinf_ptr->version, biosinf_ptr->hardcfg);

// Определяем конфигурацию компьютера

printf("\n\nКонфигурация оборудования компьютера" "\n------------------------------------");

// Запоминаем байт конфигурации

i = biosinf_ptr->hardcfg;

// Расшифровываем байт конфигурации

if(i & 0x80) printf("\nКанал 3 контроллера DMA используется" " дисковой BIOS");

if(i & 0x40) printf("\nУстановлен второй контроллер" " прерываний 8259");

if(i & 0x20) printf("\nУстановлены часы реального времени");




Содержание  Назад  Вперед