Определение типа компьютера и версии 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Установлены часы реального времени");