14h - конфигурация оборудования
14h - конфигурация оборудования
Для варианта №11, Лабораторной работы №2 –Определить и и выести на экран список оборудования (BIOS 11h).
В этом байте находится информация о количестве установленных НГМД, о наличии арифметического сопроцессора, а также о типе видеоадаптера, подключенного к системе. Приведем формат байта конфигурации:
Бит
| Описание
|
| 1 - в системе установлены НГМД;
0 - НГМД не используются
|
| 1 - установлен арифметический сопроцессор;
0 - арифметический сопроцессор не установлен
|
2-3
| не используются, равны 0
|
4-5
| Тип видеоадаптера и видеорежим:
00 - не используется или EGA;
01 - CGA, EGA, VGA в режиме 40x25;
10 - CGA, EGA, VGA в режиме 80x25;
11 – монохромный видеоадаптер
|
6-7
| Количество установленных НГМД, уменьшенное на единицу;
00 – один НГМД;
01 – два НГМД;
10 – три НГМД;
11 – четыре НГМД
|
Кроме этого, в ячейках CMOS-памяти содержится и информация об оперативно памяти: основной и расширенной ( Для варианта №2, Лабораторной работы №2 - Определить объем установленной оперативной памяти и ее тип. )
Номера ячеек
| Назначение
| Описание
|
15h - 16h
| Объем основной памяти
| Ячейка 15h содержит младший байт, а ячейка 16h - старший байт объема основной памяти. Например:
0100h - 256K
0200h - 512K
0280h - 640K
|
17h - 18h
| Объем расширенной (extended) памяти
| Ячейки 17h и 18h содержат, соответственно, младший и старший байты размера дополнительной памяти (расположенной выше границы 1 М) в килобайтах.
|
30h - 31h
| Объем расширенной (extended) памяти
| Ячейки 30h и 31h содержат, соответственно, младший и старший байты размера дополнительной памяти (расположенной выше границы 1 М) в килобайтах.
Эта информация дублирует аналогичную информацию, расположенную в ячейках с адресами 17h-18h.
|
Пример:
// =====================================================
// Чтение и отображение ячеек памяти CMOS
// =====================================================
#include < stdio. h>
#include < conio. h>
#include < stdlib. h>
int main()
{
unsigned char cmos[64];
int i;
unsigned long nExtRam;
// Читаем 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;
}
Int 14h - Управление стыком RS-232C
Для варианта №13, Лабораторной работы №2 – Определить статус последовательного порта связи (BIOS 14h).
Для управления последовательным интерфейсом (стыком RS-232C) имеются следующие функции:
Функция
| Назначение
| Примечания
|
00h
| Инициализация порта
| Поддерживаются BIOS всех ПЭВМ
|
01h
| Вывод одного символа в порт
|
02h
| Ввод одного символа из порта
|
03h
| Опрос состояния порта
|
04h
| Расширенная инициализация порта (PS/2)
| Поддерживаются только ПЭВМ семейства PS/2
|
05h
| Расширенное управление портом (PS/2)
|
Примечания.
Номер стыка в описанных ниже функциях задается так:
0 - COM1,
1 - COM2 и т. д.
При этом в PS/2 он может варьироваться от 0 до 3, в остальных ПЭВМ - от 0 до 1. Базовый адрес порта для стыка извлекается из области данных по адресу 00400h.
Рассмотрим некоторые функции данного прерывания более подробно:
INT 14h AH = 03 — Получить текущее состояние порта
Ввод:
| АН = 03h
DX = номер порта (00h – 03h)
|
Вывод:
| АН = состояние линии
AL = состояние модема
|
INT 14h АН = 00 — Инициализация последовательного порта
Ввод:
| АН = 00h
AL = параметры инициализации:
биты 7 – 5:
000 — 19 200 бод (110 бод без FOSSIL)
001 — 38 400 бод (150 бод без FOSSIL)
010 — 300 бод
011 — 600 бод
100 — 1200 бод
101 — 2400 бод
110 — 4800 бод
111 — 9600 бод
биты 4 – 3: четность (01 — четная, 11 — нечетная, 00 или 10 — нет)
бит 2: число стоп-бит (0 — один, 1 — два)
биты 1 – 0: длина слова (00 — 5, 01 — 6, 10 — 7, 11 — 8)
DX = номер порта (00h – 03h)
|
Вывод:
| АН = состояние порта
бит 7: тайм-аут
бит 6: буфер вывода пуст (без FOSSIL: регистр сдвига передатчика пуст)
бит 5: в буфере вывода есть место (без FOSSIL: регистр хранения передатчика пуст)
бит 4: обнаружено состояние BREAK
бит 3: ошибка синхронизации
бит 2: ошибка четности
бит 1: ошибка переполнения — данные потеряны
бит 0: в буфере ввода есть данные
AL = состояние модема
бит 7: обнаружена несущая (состояние линии DCD)
бит 6: обнаружен звонок (состояние линии RI)
бит 5: запрос для передачи (состояние линии DSR)
бит 4: сброс для передачи (состояние линии CTS)
бит 3: линия DCD изменила состояние
бит 2: линия RI изменила состояние
бит 1: линия DSR изменила состояние
бит 0: линия CTS изменила состояние
|
Более того информацию о портах можно извлечь и из области данных BIOS (Data Area BIOS).
Как говорилось ранее, после зоны векторов прерываний идет область, называемая BIOS Data Area, где размещаются данные, полученные в ходе тестирования оборудования, буфера системных устройств, например буфер клавиатуры, и различные служебные регистры. Эта область данных имеет размер не менее 256 байтов и начинается с адреса 0000: 0400h или 0040: 0000h. Назначение наиболее интересных для пользователя зон в области BIOS Data Area следующее:
Адрес
| Размер, байт
| Назначение
|
040: 000
| 4x2
| Базовые адреса портов СОМ 1— COM4
Для варианта №4, Лабораторной работы №2 – Определить количество установленных параллельных и последовательных портов.
|
040: 008
| 3x2
| Базовые адреса портов LPT1— LPT3
Для варианта №4, Лабораторной работы №2 – Определить количество установленных параллельных и последовательных портов
|
040: 010
040: 017
| 2 39
| Установленное оборудование
Для варианта №11, Лабораторной работы №2 – Определить и вывести на экран список оборудования (BIOS 11h).
Область флагов и буфер клавиатуры
|
040: 049
|
| Текущий видеорежим
Для варианта №12, Лабораторной работы №2 – Определить режим видеоадаптера (текстовый, графический, разрешение) (BIOS 10h).
|
040: 04А
|
| Ширина экрана (число колонок символов)
|
040: 050
|
| Позиция курсора (младшая половина — колонка, старшая — ряд)
|
040: 060
|
| Размер курсора (в младшем байте — последняя строка, в старшем — первая)
|
040: 067
|
| Область данных POST
|
Воспользуйтесь поиском по сайту: