(использующиеся для записи размещения и
информации о битах)
4 данные не найдены
Четвертая процедура, с кодом 3, используется для записи блоков данных
на кассету.
На этом мы завершаем изучение служебных процедур системы BIOS-ПЗУ,
предназначенных для поддержки периферийных устройств, подключаемых к
IBM/PC, но этим не исчерпывается ни система BIOS, ни оборудование IBM/PC.
В следующем разделе мы рассмотрим все остальное. Но прежде чем двигаться
дальше, нужно сообщить еще одну подробность, касающуюся интерфейса
кассетного накопителя.
Интерфейс кассетного накопителя IBM/PC разрабатывался только для
подключения кассетного накопителя к IBM/PC и он практически не
используется ни в одном компьютере. некоторые умные люди приспосабливают
этот интерфейс для соединения IBM/PC с другими устройствами. Одно из
возможных использований - подключение специализированных контроллеров
буферированного приема/передачи.
11.4. Дополнительные процедуры системы BIOS
Помимо тех процедур, которые мы уже рассмотрели, система BIOS
включает еще ряд интересных и полезных служебных процедур. Программы
11-101 и 11-102, входящие в дисковый пакет, прилагаемый к этой книге,
включают интерфейсные подпрограммы на ассемблере и вспомогательные
процедуры на Паскале, позволяющие наиболее полно использовать эти
служебные процедуры системы BIOS.
Первая из этих процедур - это процедура распечатки содержимого
экрана. Она обычно вызывается процедурой обслуживания клавиатуры системы
BIOS-ПЗУ, когда та обнаруживает нажатие клавиши "PrtSc". Распечатка экрана
выполняется программой обслуживания прерывания номер 5 и это позволяет
программно вызывать ту же операцию, запрашивая прерывание номер 5.
Процедура обслуживания клавиатуры, обнаружив нажатие клавиши "PrtSc",
просто вызывает прерывание 5.
Пользующиеся интерпретатором Бейсика замечали, что при работе с
Бейсиком клавиша "PrtSc" не действует. Однако, имеется простой способ
вызова программы распечатки экрана из программ на Бейсике. Сам
интерпретатор изменяет способ обслуживания клавиатуры и здесь ничего
изменить нельзя, но можно просто запросить из программы на Бейсике
прерывание 5, описанное выше.
Для программ на Бейсике необходима интерфейсная процедура на машинном
языке, позволяющая обратиться к операции распечатки экрана, Это очень
простая процедура, состоящая всего из двух команд, занимающих три байта.
На языке ассемблера эти команды записываются так:
INT; вызов прерывания номер 5 (распечатка экрана)
; (2-х байтная команда)
RET; возврат в программу на Бейсике (1 байт)
Такую простую подпрограмму можно просто записать в память командами
POKE и, поскольку длина ее всего три байта, можно использовать числа
обычной точности, Следующая короткая программа показывает, как это
делается:
100 REM Простая программа, позволяющая организовать
110 REM вызов операции распечатки экрана из Бейсика
120 REM Трехбайтная программа на машинном языке
125 REM формируется внутри переменной.
130 HOLD.THE.CODE = 0 'выделяется 4-байтная переменная
140 REM обычной точности
150 PRINT.SCREEN = VARPTR(HOLD.THE.CODE) 'установка указателя
160 REM на область памяти
170 POKE PRINT.SCREEN + 0,205 '1-й байт подпрограммы -
175 REM команда прерывания (INT)
180 POKE PRINT.SCREEN + 1,5 '2-й байт - номер прерывания 5
190 POKE PRINT.SCREEN + 2,203 '3-й байт - команда возврата
200 REM
210 REM Теперь подпрограмма в машинных кодах
220 REM храниться в переменной "hold.the.code"
230 REM и ее адрес храниться в "print.screen"
240 REM
250 CALL PRINT.SCREEN
В этой простой программе строки 120-170 записывают подпрограмму в
машинных кодах. Эту процедуру достаточно выполнить один раз. Оператор CALL
в строке 250 может выполняться тогда, когда необходимо распечатать
содержимое экрана. (Интерфейсные подпрограммы для всех процедур системы
BIOS и ДОС включены в дисковый пакет, прилагаемый к этой книге, но такой
простой интерфейс, как тот, который описан выше, можно оформить
непосредственно на Бейсике. Для более сложных процедур обычно требуются
законченные интерфейсные подпрограммы на ассемблере, которые могут
загружаться из Бейсика процедурой BLOAD).
Следующая из дополнительных процедур системы BIOS - процедура вывода
списка оборудования, которая вызывается с помощью прерывания номер 17,
шестнадцатеричное значение 11. При первом включении IBM/PC процедуры
запуска и самопроверки проверяют, какое оборудование подключено к IBM/PC
(в основном, проверка сводится к считыванию позиций переключателей,
установленных на системной плате IBM/PC; эти переключатели должны
выставляться определенным образом в зависимости от состава подключенного
оборудования. Такой метод не слишком точен, поскольку переключатели могут
быть выставлены неправильно).
Ваши программы могут выяснить конфигурацию системы, запрашивая
прерывание 17. При выполнении процедуры обслуживания этого прерывания не
производится ни новая проверка состава оборудования, ни повторное
считывание положений переключателей. Происходит всего лишь пересылка двух
байтов, содержащих код конфигурации системы, вызывающей программы в
регистрах AH и AL.
Ниже приведена таблица кодов оборудования:
Регистр Бит Значение
_______ ___ ________
AH 1-2 число адаптеров устройства печати
(от 0 до 3)
AH 3 не используется
AH 4 игровой адаптер подключен или нет
AH 5-7 число адаптеров связи (от 0 до 7)
AH 8 не используется
AL 1-2 число дисководов без единицы
(если установлен 8-ой бит)
AL 3-4 начальный видеорежим (см.таблицу
ниже)
AL 5-6 объем памяти на системной плате
(см.таблицу ниже)
AL 7 не используется
AL 8 дисководы подключены (если да, см.
1 и 2 биты)
Заметим, что число дисководов, задаваемое первыми двумя битами AL,
копируется числом, на единицу меньше действительного числа, так что
значение 00 соответствует одному дисководу, 01 - двум и так далее. С
помощью такой схемы кодирования указывается наличие до 4-х дисководов.
Восьмой бит указывает, имеются ли вообще дисководы в системе. Если этот
бит установлен, то используются два бита счетчика. Проще было бы
использовать три бита для кодирования числа дисководов, что позволило бы
задавать числа от 0 до 7.
Следующая таблица поясняет значения битов для начального видеорежима:
Биты Значение
____ _____________________________________________
00 (не используется)
01 графический режим, 40 столбцов, черно-белое
изображение
10 графический режим, 80 столбцов, черно-белое
изображение
11 монохромный режим
Следующая таблица поясняет установку битов для кода объема памяти на
системной плате:
Бит Значение
___ ______________________
00 16К
01 32К
10 48К
11 64К
Ваши программы могут использовать эту информацию для настройки своей
работы на конфигурацию системы.
Следующая процедура сообщает, какой объем памяти подключен к
компьютеру. Имеется ввиду объем рабочей памяти, включающий объем памяти на
системной плате (сообщаемый предыдущей процедурой) и дополнительные платы
памяти. Для вызова этой процедуры служит прерывание 18, шестнадцатиричное
значение 12, а значение, возвращаемое в регистре AX, равняется числу
блоков памяти размером 1К. Такой способ позволяет определить полный объем
памяти в один мегабайт.
Значение объема памяти не устанавливается прямой проверкой, а берется
из стандартной ячейки памяти. Это позволяет программно изменять объем
используемой памяти.
Одно из самых полезных средств для работы с IBM/PC с большим объемом
памяти (например, 512К) включает системную программу, которая использует
часть памяти как некий очень быстрый накопитель на гибком диске, т.е. так
называемый электронный диск. Такой тип модификации системы может быть
очень полезен и начинает использоваться все шире. Для того чтобы иметь
возможность выделения физической памяти для какого-нибуть специфического
использования, IBM/PC хранит рабочее значение объема доступной памяти в
ячейке оперативной памяти, содержимое которой можно изменить. И при любом
использовании памяти, например, при ее выделении программам, объем памяти
всегда сравнивается с этим значением.
Еще одна интересная особенность ПЗУ не связана с системой BIOS, а
относится к способу вызова кассетной системы Бейсика, которая также
хранится в ПЗУ. Если значение 18, тогда управление компьютером передается
интерпретатору Бейсика. Следует иметь в виду, что такая операция уже не
позволит снова получить управление Вашей программе и даже операционной
системе ДОС.
Еще одна процедура, которая удаляет Вашу программу и ДОС из системы,
- это процедура начальной загрузки, вызывающаяся прерыванием 25,
шестнадцатиричное значение 19. Эта процедура перезагружает операционную
систему с диска, так же как это происходит после нажатия клавиши
Ctrl-Alt-Del. Единственное отличие заключается в том, что при нажатии
клавиши Ctrl-Alt-Del выполняется диагностика системы, такая же как при
включении питания, а при запросе прерывания 25 сразу производится загрузка
системы. Это один из самых радикальных способов завершения программы,
гарантирующий наличие в памяти новой копии операционной системы.
Следующая процедура - это процедура обслуживания таймера. Она
используется для считывания и изменения внутреннего счетчика таймера. Хотя
эту процедуру и называют процедурой текущих даты/времени, на самом деле
это всего лишь счетчик прерываний таймера. Счетчик увеличивается на
единицу при каждом прерывании, которое происходит примерно 18-21 раз в
секунду. Вычисление и обновление времени дня и даты - это операция ДОС,
которая использует результаты счетчика.
Имеется две процедуры обслуживания таймера, вызывающиеся по
прерыванию 26, шестнадцатиричное значение 1А, одна, с кодом 0, для
считывания показаний таймера, а вторая, с кодом 1, для их установки.
Значение счетчика таймера хранится в виде пары двухбайтовых чисел,
использующихся, фактически, как одно четырехбайтовое. Эта процедура вносит
лишь одно добавление в примитивную процедуру подсчета часов. Когда это
происходит, счетчик сбрасывается и факт запоминается. При очередном
запросе на считывание значения счетчика передается сообщение о том, что
таймер сбрасывался.
Это позволяет ДОС следить за временем дня и сменой дат не вычисляя их
постоянно. Когда ДОС необходимо установить время дня, используется