Аппаратное обеспечение персонального компьютера

       

Программа 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;

}


Содержание раздела