Ниже дано краткое описание интерфейса подпрограмм
сервис-монитора, вызываемых через командное прерывание 8 (команда ассемблера
RST 8). Отметим, что появление новых подпрограмм не было одновременным.
Поэтому, наряду с описанием, приводится код версии, начиная с которой данная
подпрограмма становится доступной. Код версии — это число, находящееся в ПЗУ по
смещению +0f1h от начала четверти монитора. В описании принято указывать его в
десятичном виде.
В общем рекомендуется начинать работу программы со следующих
шагов.
1. Определить действительно ли программа запущена на
компьютере Scorpion, тем самым предотвратить «зависания» на других машинах.
Можно предложить следующий способ. Переустановить на свою программу
переменную Бейсика ERR_SP, затем вызвать 8–е прерывание, например с кодом 85h
(отключение отладчика). Если управление перешло по адресу из ERR_SP, значит
обработчик команды RST 8 стандартный, следовательно это не Scorpion (или
версия ПЗУ настолько «древняя», что никаких подпрограмм там еще нет). Если же
прерывание вернуло управление в программу, то можно перейти к шагу 2.
2. Определить номер версии ПЗУ и принять решение о
возможности или невозможности дальнейшей работы. Проще всего напрямую прочитать
код версии из ПЗУ монитора. Для этого нужно запретить прерывания и, записав
число 2 в регистр 01ffdh прочитать код из ПЗУ. Затем вернуть конфигурацию в
исходное состояние, записав в регистр 01ffdh число 0 (напомним, что такие
операции не «перевариваются» отладчиками, и встроенный в компьютер не исключение).
В новых версиях ПрофПЗУ шаг 2 можно упростить и
воспользоваться изменившейся функцией дискового BIOS 9 (SETWRK). Для старых
версий ПЗУ содержимое регистров BC и DE при её выполнении не изменяется, а
начиная с версии 3.0a (код 68 от 29.04.95) в регистрах возвращается код версии
и дата компиляции ПрофПЗУ (D — код версии; C, B, E — соответственно число,
месяц и год даты компиляции).
Для этой подпрограммы начиная с версии 3.0b (код 64 от
05.11.94 — вывод символа в окно, указываемое дескриптором в регистре IX, код
символа передаётся в Akk) добавлены и изменены некоторые управляющие коды.
Символы из набора ASSCI (коды в диапазоне 32...127)
непосредственно печатаются в определённом окне экрана (см. режимы в
дескрипторе, описанные в RST 8, код 84h). Наряду с обычными «печатаемыми»
символами, возможно использование управляющих кодов. Символом * отмечены
управляющие коды, появившиеся и действующие в версиях старше 3.0b (код 64 от
05.11.94).
1 Установка атрибутов для последующих символов
Непосредственно за управляющим кодом должны быть выведены два
байта: первый байт — маска устанавливаемых атрибутов, второй — маска
сбрасываемых атрибутов. Значимые биты должны быть установлены в байтах маски.
2 Восстановление запомненных атрибутов
4* Вывод с выравниванием
Следом за этим управляющим кодом должна быть передана строка
печатаемых символов, которая будет выровнена по центру или по правому краю
окна. Длина строки не должна превышать ширину окна, управляющие символы в
строке не допускаются, за исключением двух следующих, завершающих строку,
кодов.
5* Вывод строки по центру окна
6* Вывод строки выровненной по правому краю окна
7 Вывод звукового сигнала
Программа отрабатывает короткий звуковой сигнал. Бордюр получает
при этом цвет, установленный в специальной ячейке монитора (см. Переменные
режимов, цвета).
10 Перевод строки
Если курсор находится в последней строке, то происходит «свиток».
12* Очистка окна, курсор устанавливается в левый верхний
угол
13 Перевод каретки
Перемещение курсора в крайнюю левую позицию строки в окне. Если
установлен соответствующий бит в дескрипторе окна, то совместно с возвратом
каретки вызывается и программа обслуживания символа перевода строки.
27 Позиционирование курсора внутри окна
Непосредственно за управляющим кодом должны быть выведены два
байта. Первый определяет позицию курсора в строке, второй номер строки. Отсчет
ведётся от левого верхнего угла окна начиная с нуля.
30* «Обратный свиток»
Положение курсора не изменяется, весь текст в окне сдвигается на
одну строку вверх, первая строка текста пропадает, последняя строка заполняется
пробелами.
Подфункций нет.
Параметры:
вых.: CY=1, если во время вывода был нажат BREAK.
Функция доступна, начиная с версии 2.4a (код 3).
Действие: вывод на принтер копии графического экрана,
аналогичной получаемому из меню Сервис-монитора. При печати используются
текущие настройки монитора.
Подфункций нет.
вых.: CY=1, если плата компьютера не позволяет переключать скорость.
Функция доступна, начиная с версии 2.4d (код 3 от
11.12.93).
Подфункций нет.
вых.: CY=1, если плата компьютера не позволяет переключать скорость.
Функция доступна, начиная с версии 2.4d (код 3 от
11.12.93).
Подфункций нет.
вх.: D — код операции:
7 — записать (1)/ считать (0)
значение времени и/или даты;
6 — считать в буфер (только, если бит
7 = 0, см. также бит 5);
5 — формат считывания — (1) прямое считывание;
(0) считывание в формате ASCIZ;
0 — работать с датой (1), или со временем (0);
HL — адрес буфера (если бит 6 = 1);
C — секунды/число;
B — минуты/месяц;
E — часы/год.
вых.: CY=1, если микросхемы CMOS нет или задан неверный формат
запроса;
(HL) — строка текста ASCIZ (если бит
6 = 1);
C — секунды/число;
B - минуты/месяц;
E - часы/год;
L - день недели.
Функция доступна, начиная с версии 3.1f (код 70 от 21.05.95).
Действие: установка или чтение показаний текущего времени
из микросхемы энергонезависимой памяти и часов (CMOS).
Использование: один вызов функции обеспечивает доступ либо
к текущей дате (бит 0 регистра D установлен), либо к текущему времени (бит 0
регистра D сброшен). 7-м битом регистра D указывается тип выполняемой функцией
операции: запись — 1, считывание — 0. Считывание значений из микросхемы возможно
в двух вариантах — передачей в буфер, адрес которого указывается в регистрах HL
(бит 6 регистра D установлен), либо передачей в регистры C, B, E и L (бит 6
регистра D сброшен).
Интерпретация считываемых через буфер значений
определяется 5-м битом регистра D. Если он установлен, то в буфер помещается 6
байт данных о текущем времени и дате (по одному байту на — секунды, минуты,
часы, число, месяц, год). Если 5-й бит регистра D сброшен, то осуществляется
перевод времени или даты в строку символов ASCII, оканчивающуюся нулевым
байтом. При этом содержимое регистра E используется как формат вывода:
младшие 5 бит — символ разделителя — к ним будет добавлено 20h;
биты 7, 6 и 5 разрешают вывод соответственно часов, минут и секунд;
для вывода даты:
7 выводить день недели,
6 ставить символ «0» перед числом,
5 выводить месяц словом и перед годом добавлять «19».
При изменение текущей даты задание нового значения
возможно только через регистры C, B и E; изменить день недели нельзя, он
рассчитывается программно для текущей даты.
Остальные ячейки CMOS-памяти используются монитором для
своих нужд, поэтому подпрограмм работы с ними пока не предусмотрены.