Аппаратное обеспечение IBM PC

-3Fh - зарезервировано


Это поле вы можете использовать по своему усмотрению, например, хранить здесь пароль.

PS/2 использует ячейку с адресом 37h для хранения номера текущего столетия. Ячейки 38h-3Fh в модели 50 компьютера PS/2 используются для хранения пароля. Обращение к этим ячейкам выполняется по адресам 78h-7Fh, которые аппаратно отображаются на адреса 38h-3Fh.

Приведем две маленькие программы, демонстрирующие приемы работы с КМОП-памятью. Первая программа записывает в ячейки 34h-3Fh строку символов, вторая отображает эту строку, а также некоторые другие ячейки.

#include <stdio.h> #include <stdlib.h>

main() {

// Эта строка будет записана в КМОП-память

static char password[12] = "!Frolov A.V."; int i,j;

printf("\n*Запись в CMOS* ©Фролов A. 1991\n\n");

for(i=0x34,j=0; i<0x40; i++,j++) {

// Задаем адрес ячейки КМОП-памяти

outp(0x70,i);

// Выполняем запись в эту ячейку

outp(0x71,password[j]); } }



Программа для чтения содержимого КМОП-памяти:

#include <stdio.h> #include <stdlib.h>

main() { unsigned char cmos[164]; int i;

printf("\n*Чтение из CMOS* ©Фролов A. 1991\n\n");

// Читаем все 64 ячейки КМОП-памяти в массив cmos

for(i=0; i<64; i++) { outp(0x70,i); cmos[i]=inp(0x71); }

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

printf("\nЯчейки часов реального времени: ");

for(i=0; i<0xd; i++) { printf("%02.2x ",(unsigned)cmos[i]); }

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

printf("\nБайт диагностики: %02.2x",cmos[0xe]);

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

printf("\nБайт отключения: %02.2x\n",cmos[0xf]);

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

printf("\nPassword : "); for(i=0x34; i<0x40; i++) { printf("%02.2x ",(unsigned)cmos[i]); }

// Выводим это же еще раз в виде текстовой строки

cmos[0x40]=0; printf(">%s<\n",&cmos[0x34]); }

Некоторую помощь в определении конфигурации компьютера вам может оказать прерывание BIOS INT11h, которое мы рассмотрим ниже.



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