Ключевые адреса программ BIOS
Программы, находящиеся в BIOS, используют ряд ресурсов компьютера для хранения данных, полученных в ходе инициализации оборудования, тестирования и для работы служебных подпрограмм. На рис. показано распределение оперативной памяти компьютера PC.
Наиболее важная служебная зона адресов размером в 1 Кбайт начинается с нулевого адреса. В ней находятся векторы аппаратных и программных прерываний, с которыми работают процессор и программное обеспечение. Сами векторы представляют собой инструкцию безусловного перехода на подпрограмму обработки прерывания. Каждый вектор занимает 4 байта, соответственно, всего может быть всего 256 прерываний.
С прерываниями связана одна из проблем персональных компьютеров, которая осложняет жизнь системным программистам. Дело в том, что зону векторов, расположенную с нулевого адреса, используют как сами процессоры семейства х8б, так и различные устройства компьютера, в чем виноваты разработчики IBM PC. Вначале это не особенно осложняло жизнь программистам, поскольку у процессора было не так много аппаратных прерываний, но в дальнейшем, по мере совершенствования процессоров, 256 векторов стало маловато.
Ниже, только для иллюстрации использования таблицы векторов приведено назначение нескольких прерываний компьютера IBM PC AT (для современных процессоров назначение ряда векторов несколько иное):
- INT 00h — деление на 0;
- INT 01h— пошаговый режим;
- INT 02h— немаскируемое прерывание;
- ТХТТ ATI INT ОЗh — точка останова;
- INT 04h — переполнение;
- INT 08h — таймер;
- INT 09h — клавиатура;
- INT 33h — поддержка мыши;
- INT 4Ah — будильник пользователя.
После зоны векторов прерываний идет область, называемая BIOS Data Area, где размещаются данные, полученные в ходе тестирования оборудования, буфера системных устройств, например буфер клавиатуры, и различные служебные регистры. Эта область данных имеет размер не менее 256 байтов и начинается с адреса 0000:0400h или 0040:0000h. Назначение наиболее интересных для пользователя зон в области BIOS Data Area приведено в табл.
Назначение ячеек BIOS Data Area | ||
Адрес | Размер, байт | Назначение |
040:000 | 4x2 | Базовые адреса портов СОМ 1— COM4 |
040:008 | 3x2 | Базовые адреса портов LPT1— LPT3 |
040:010 040:017 | 2x39 | Установленное оборудование Область флагов и буфер клавиатуры |
040:049 | Текущий видеорежим | |
040:04А | Ширина экрана (число колонок символов) | |
040:050 | Позиция курсора (младшая половина — колонка, старшая — ряд) | |
040:060 | Размер курсора (в младшем байте — последняя строка, в старшем — первая) | |
040:067 | Область данных POST |
Для работы с видеоадаптером BIOS использует область видеопамяти, расположенную выше 640 Кбайт. Видеопамять занимает 128 Кбайт, начиная с адреса A0000h и до C0000h, но для конкретного режима работы видеоадаптера (монитора) используется строго определенная часть памяти. Например, в текстовом режиме могут использоваться только 4 Кбайт