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