logo search
несколько программ / bsp33

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

}