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

       

Программа CMOSSHOW


Программа CMOSSHOW читает в массив первые 64 ячейки памяти CMOS и отображает содержимое некоторых из них:

CMOS Show (C)A. Frolov, 1997

RTC:              22 00 30 00 17 00 03 19 08 97 a6 02 00

Diagnostics byte: 08

Shutdown byte:    00

Reserved:         00 00 00 00 00 00 00 00 00 00 00 00

Extended RAM:     16384 Kbyte

Отображаются ячейки часов реального времени RTC, о которых мы расскажем позже в отдельной главе, диагностический байт и байт отключения, зарезервированные байты. Кроме того, на основании информации, хранящейся в ячейках 17h и 18h программа вычисляет размер расширенной памяти, установленной в компьютере.

Исходный текст программы CMOSSHOW вы найдете в листинге 1.3.

Листинг 1.3. Файл cmosshow\cmosshow.c

// =====================================================

// Чтение и отображение ячеек памяти CMOS

//



// (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 <stdlib.h>

int main()

{

  unsigned char cmos[64];

  int i;

  unsigned long nExtRam;

  printf("\nCMOS Show (C)A. Frolov, 1997\n\n");

  // Читаем 64 ячейки CMOS-памяти в массив cmos

  for(i=0; i<64; i++)

  {

    outp(0x70,i);

    cmos[i]=inp(0x71);

  }

  // Отображаем ячейки часов реального времени

  printf("\nRTC:              ");

  for(i=0; i<0xd; i++)

  {

    printf("%02.2x ",(unsigned)cmos[i]);

  }

  // Отображаем состояние байта диагностики

  // после включения питания

  printf("\nDiagnostics byte: %02.2x",cmos[0xe]);

  // Отображаем содержимое байта отключения

  printf("\nShutdown byte:    %02.2x\n",cmos[0xf]);

  // Отображаем содержимое зарезервированных ячеек

  printf("Reserved:         ");

  for(i=0x34; i<0x40; i++)

  {

    printf("%02.2x ",(unsigned)cmos[i]);

  }

 

  // Вычисляем объем расширенной памяти и отображаем

  // его на консоли

  nExtRam = ((unsigned long)cmos[0x18] << 8) + cmos[0x17];

  printf("\nExtended RAM:     %ld Kbyte\n", nExtRam);

   

  getch();

  return 0;

}



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