Программа HDWCFG
Программа HDWCFG определяет конфигурацию аппаратных средств компьютера, пользуясь для этого описанными выше функциями BIOS. Полученная конфигурация отображается на консоли, как это показано ниже:
HDWCFG (C)A. Frolov, 1997
Configuration word: C823
HDD present
NPU present
RAM banks: 0
Video Mode: 2
Nubber of FDD: 1
Nubber of COM ports: 2
Number of LPT ports: 3
RAM istalled: 640 Kbytes
Extended RAM istalled: 0
Исходный текст программы HDWCFG представлен в листинге 1.1.
Листинг 1.1. Файл hdwcfg\hdwcfg.c
// =====================================================
// Получение информации о конфигурации компьютера
// при помощи BIOS
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =====================================================
#include <stdio.h>
#include <conio.h>
#include <memory.h>
#include <dos.h>
// Битовые поля слова конфигурации
typedef struct _HDWCFG
{
unsigned HddPresent: 1; // 0
unsigned NpuPresent: 1; // 1
unsigned AmountOfRAM: 2; // 2-3
unsigned VideoMode: 2; // 4-5
unsigned NumberOfFdd: 2; // 6-7
unsigned DmaPresent: 1; // 8
unsigned NumberOfCom: 3; // 9-11
unsigned GamePresent: 1; // 12
unsigned JrComPresent: 1; // 13
unsigned NumberOfLpt: 2; // 14-15
} HDWCFG;
int main(void)
{
union REGS rg;
HDWCFG HdwCfg;
unsigned uword;
printf("\nHDWCFG (C)A. Frolov, 1997");
// Вызываем прерывание INT 11h для получения
// слова конфигурации компьютера
rg.h.ah = 0x0;
int86(0x11, &rg, &rg);
// Получаем слово конфигурации и сохраняем
// его в структуре HdwCfg
uword = (unsigned int)rg.x.ax;
memcpy(&HdwCfg, &uword, 2);
// Выводим на экран конфигурацию компьютера
printf("\n\nConfiguration word: %04.4X", HdwCfg);
if(HdwCfg.HddPresent)
printf("\nHDD present");
if(HdwCfg.NpuPresent)
printf("\nNPU present");
printf("\nRAM banks: %d", HdwCfg.AmountOfRAM);
printf("\nVideo Mode: %d", HdwCfg.VideoMode);
printf("\nNubber of FDD: %d", HdwCfg.NumberOfFdd + 1);
if(HdwCfg.DmaPresent)
printf("\nDMA present");
printf("\nNubber of COM ports: %d", HdwCfg.NumberOfCom);
if(HdwCfg.GamePresent)
printf("\nGame adapter present");
if(HdwCfg.JrComPresent)
printf("\nPCjr Com present");
printf("\nNumber of LPT ports: %d", HdwCfg.NumberOfLpt);
// Вызываем прерывание INT 12h для определения
// объема основной оперативной памяти компьютера
rg.h.ah = 0x0;
int86(0x12, &rg, &rg);
// Выводим объем оперативной памяти
printf("\nRAM istalled: %d Kbytes",
(unsigned int)rg.x.ax);
// Получаем объем расширенной оперативной памяти,
// доступной через прерывание INT 15h
rg.h.ah = 0x88;
int86(0x15, &rg, &rg);
// Выводим объем расширенной оперативной памяти
printf("\nExtended RAM istalled: %ld Kbytes",
(unsigned int)rg.x.ax);
getch();
return 0;
}