====== БК-0011М: Руководство системного программиста =====
Набил 13.08.1992 В. Усович.
Подготовил к печати и перевел из RT-11 в MKDOS 31.07.1993 Чурин Д.М. (Asfalt software).
ПЕРСОНАЛЬНАЯ ЭВМ 'ЭЛЕКТРОНИКА МС 0513'
('ЭЛЕКТРОНИКА БК-0011М')
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
БАЗОВАЯ ОПЕРАЦИОННАЯ СИСТЕМА
РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА
00015 - 01.32.01
====== Аннотация ======
Настоящее руководство рассчитано на пользователей микроЭВМ 'Электроника МС
0513' ('Электроника БК-0011М', далее ЭВМ), программирующих на уровне языка
Ассемблера.
В руководстве описаны состав и функции базовой операционной системы ЭВМ
(далее БОС) и способы обращения к ним из пользовательских программ.
Описаны также команды монитора БОС, позволяющие пользователю работать с ЭВМ
в интерактивном режиме, вводить, отлаживать в кодах и запускать программы,
считывать и записывать программы на магнитную ленту и т.д.
====== 1. Краткое описание микроЭВМ БК-0011 ======
===== 1.1. Архитектура ЭВМ =====
ЭВМ построена на основе микропроцессорного комплекта серии К1801 и включает
в себя:
* однокристальный 16-разрядный микропроцессор К1801ВМ1;
* оперативное запоминающее устройство (ОЗУ) емкостью 128К байт со страничной организацией, выполненное на микросхемах К565РУ5;
* системное ПЗУ емкостью 16К байт;
* контроллер клавиатуры на базе БИС К1801ВП1-014;
* контроллер ОЗУ и телевизионного графического дисплея на базе БИС К1801ВП1-037;
* контроллер накопителя на бытовом кассетном магнитофоне;
* 16-разрядный параллельный программируемый интерфейс.
Отдельные функциональные узлы ЭВМ соединены с помощью межмодульного
параллельного интерфейса МПИ ОСТ 11.305.903-80.
Обслуживание перечисленных устройств, а также внешних дополнительных блоков
контроллеров локальной сети и НГМД осуществляется соответствующими
программами-драйверами, расположенными в системном ПЗУ ЭВМ и в дополнительных блоках.
==== 1.1.1. Распределение адресного пространства ЭВМ ====
Виртуальное адресное пространство ЭВМ определяется возможностями процессора
К1801ВМ1 и составляет 64К байт.Распределение адресного пространства следующее:
Переключаемые страницы ОЗУ и ПЗУ ┌────────────┐ ┌──────┐ ┌──────┐ ┌─────────┐ ┌───────────────┐ │ Стр. ОЗУ 0 │ │ │ │ │ │СИСТ. ПЗУ│ │РЕГИСТРЫ ВУ │ └────────────┘ └──────┘ └──────┘ └─────────┘ └───────────────┘ 0 40000 100000 140000 │ 160000 │ 177777 │ │ │ │ │ │ │ │ ┌────────────┴─┐ ┌┴────────────┐ │ │ │СТР. ОЗУ 0...7│ │СТР ОЗУ 0...7│ │ │ └──────────────┘ └─────────────┘ ┌───────────────┐ ИЛИ │ПЗУ КОНТРОЛЛЕРА│ ┌─────┐ └───┐ ┌───┘ │ ПЗУ │ │Н Г М Д│ └─────┘ └───────┘ ИЛИ ИЛИ ┌────────────────┐ ┌──────────────┐ │СМЕННЫЙ БЛОК ПЗУ│ │ПЗУ БЛОКА МСТД│ └────────────────┘ └──────────────┘Переключение страниц ОЗУ/ПЗУ осуществляется программно с использованием системного регистра ЭВМ. Следует обратить внимание, что каждая страница ОЗУ может быть одновременно подключена к двум окнам виртуального адресного пространства, а статическая страница (адреса 0 - 40000) - даже к 3-м. Переключение страниц из пользовательской программы может осуществляться только с помощью запросов базовой операционной системы. Две страницы ОЗУ являются буферами экрана графического дисплея. Один из буферов постоянно отображается на экране телевизионного приемника. Управление отображением того или иного буфера экрана также возложено на базовую операционную систему, причем имеется возможность "скрытого" вывода на экран, т.е. формирование изображения из программы пользователя в одном буфере в то время,как на экран выводится другой. Одна из страниц ОЗУ является служебной страницей базовой операционной системы ЭВМ и недоступна пользователям. Однако часть ее, не используемая базовой операционной системой, доступна для чтения-записи с помощью запросов драйвера ОЗУ/ПЗУ. ===== 1.2. Регистры внешних устройств ЭВМ ===== Работа ЭВМ с периферийными (внешними) устройствами выполняется через регистры внешних устройств, для которых выделен диапазон 170000 - 177777 адресного пространства. Ниже описаны регистры стандартных периферийных устройств. ==== 1.2.1. Регистр состояния клавиатуры ==== Адрес регистра - 177660. Формат регистра:
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ │ │ │ │ готовность │ │ маскирование прерыванийРазряд 7 - '1' в этом разряде означает, что в регистре данных клавиатуры находится код нажатой клавиши. Устанавливается при нажатии на клавишу, сбрасывается при чтении регистра данных клавиатуры. При нулевом состоянии 6-го разряда установка в '1' вызывает прерывание. Доступен только по чтению. Разряд 6 - '0' в этом разряде разрешает выработку сигнала требования прерывания по единичному значению разряда 7. Остальные разряды регистра не используются, читаются как 0. По сигналу сброса магистрали разряд 6 устанавливается в '1', разряд 7 обнуляется. ПРИМЕЧАНИЕ. См.также информацию о бите 6 системного регистра ЭВМ. ==== 1.2.2. Регистр данных клавиатуры ==== Адрес регистра - 177662. Формат регистра:
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│ └──┴──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┤ └──────────┬─────────┘ код символаРазряды 0 - 6 содержат код нажатой клавиши. Разряды 7 - 15 не используются, читаются нулями. Регистр доступен только по чтению. Данные сохраняются в регистре до нажатия следующей клавиши клавиатуры. При установленном в '1' 7-м разряде регистра состояния запись в регистр данных блокируется и нажатия клавиш игнорируются. ==== 1.2.3. Регистр управления палитрами ==== Адрес регистра - 177662. Формат регистра:
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│ └──┴──┴──┴──┼──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┘ │ │ └─────┬─────┘ │ │ код палитры │ │ │ └─────управление таймером │ └──────управление буфером экранаРегистр доступен только по записи. Разряд 15 - управляет отображением буферов экрана. При значении 0 отображается буфер 0 (страница 5), при 1 - буфер 1 (страница 6). Разряд 14 - управляет включением системного таймера. При значении 0 таймер выключен, при 1 - включен. Разряды 11 - 8 - в эти разряды записывается код палитры, которая задает кодировку цветов на экране в режиме 256 точек/строка. Текущее состояние регистра можно определить с помощью запросов БОС. ==== 1.2.4. Регистр смещения ==== Регистр смещения предназначен для управления "рулонным" сдвигом информации на экране по вертикали путем задания адреса в буфере экрана, с которого должна начинаться регенерация изображения. Адрес регистра - 177664. Формат регистра:
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│ └──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┤ │ └───────────┬───────────┘ │ смещение режим "малого" экранаРазряд 9 - при записи "1" в этот разряд на экране отображается весь буфер экрана (256 телевизионных строк). При нулевом значении в верхней части растра отображается 1/4 часть (старшие адреса) экранного ОЗУ, нижняя часть экрана не отображается. Данный режим не используется базовой операционной системой. Разряды 7 - 0 - в этом поле задается адрес строки экранного ОЗУ, с которой начинается отображение экрана. ОЗУ буфера экрана считается "замкнутым в кольцо". Экран состоит из 256 строк по 64 байта в каждой. Строки начинаются с адресов, кратных 100 (восьмеричное). Первый байт строки расположен в левом конце строки, байты отображаются, начиная с младшего бита. Смещение задается в строках, т.е. изменение кода смещения на 1 приводит к кольцевому сдвигу информации на экране на одну строку растра. Исходному состоянию (первый байт буфера экрана отображается в самой верхней строке растра) соответствует значение смещения 330 восьмеричное. Увеличение значения соответствует сдвигу информации вверх, уменьшение - вниз. Остальные разряды не используются. Регистр доступен по записи и чтению. ==== 1.2.5. Регистр параллельного программируемого интерфейса ==== Этот 16-разрядный регистр предназначен для записи информации в выходной порт и чтения информации с входного порта. Адрес регистра - 177714. Возможность прочитать состояние выходного порта отсутствует. Фактически в ЭВМ реализованы два независимых регистра,имеющие один и тот же адрес: * доступный только по записи регистр выходного порта; * доступный только по чтению регистр входного порта. ==== 1.2.6. Системный регистр ==== Используется при начальном запуске процессора, для переключения страниц ОЗУ/ПЗУ, управления внешними устройствами ЭВМ. Адрес регистра - 177716. Фактически по указанному адресу расположены три регистра: - регистр, доступный только по чтению; - два регистра, доступных только по записи (регистр управления памятью и регистр управления магнитофоном). === 1.2.6.1. Регистр чтения === Формат регистра:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │ 1│ 1│ 0│ 0│ 0│ 0│ 0│ 0│ 1│ X│ X│ 0│ 0│ X│ 0│ 0│ ├──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┘ └──────────┬────────────┘ │ │ │ │ адрес начального пуска │ │ │ признак записи │ │ │ в сист.регистр признак отсутствия │ │ └─данные с магнитофона арифметического───────────┘ │ расширителя │ флаг нажатия клавишиРазряды 15 - 8 - определяют адрес начального пуска ЭВМ по включению питания (140000); Разряд 7 - должен быть равен '1'; Разряд 6 - установлен в '0', если нажата любая клавиша клавиатуры ЭВМ. Устанавливается в '1' по отпускании клавиши; Разряд 5 - разряд данных контроллера магнитофона; Разряд 2 - этот разряд устанавливается в '1' по любой операции записи в системный регистр. Сбрасывается в '0' по окончанию операции чтения системного регистра. Об использовании этого разряда см. в разделе, посвященном особенностям выполнения некоторых команд ЭВМ. Остальные разряды не используются и читаются нулями. === 1.2.6.2. Регистр управления памятью === Формат регистра:
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │ .│ X│ X│ X│ 1│ X│ X│ X│ .│ .│ .│ X│ X│ .│ X│ X│ └──┼──┴──┴──┼──┼──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┘ └───┬────┘ │└────┬───┘ │ │ │ │ управление │ переключением │ │ │ │ страниц │ ОЗУ по адресам │ │ │ │ 40000-100000 │ 100000-140000 │ │ │ │ │ разрешение работы разрешение записи страниц ПЗУ в системный регистрРазряды 14 - 12 - определяют номер страницы ОЗУ, подключаемой на адреса 40000 - 100000 (см. ниже). Разряд 11 - должен содержать 1. Разряды 10 - 8 - определяют номер страницы ОЗУ, подключаемой на адреса 100000 - 140000. Разряд 4 - разрешает подключение к адресному пространству 100000 - 140000 страницы ПЗУ номер 3, отключает страницу ОЗУ с соответствующих адресов. Разряд 3 - разрешает подключение к адресному пространству 100000 - 140000 страницы ПЗУ номер 2, отключает страницу ОЗУ. Разряд 1 - разрешает подключение к адресному пространству 100000 - 140000 страницы ПЗУ номер 1, отключает страницу ОЗУ. Разряд 0 - разрешает подключение к адресному пространству 100000 - 140000 страницы ПЗУ номер 0, отключает страницу ОЗУ. Кодировка переключаемых страниц ОЗУ: ^ Бит 14 (10) ^ Бит 13 (9) ^ Бит 12 (8) ^ Страница ^ | 1 | 1 | 0 | страница 0 (постоянно отображена 0...40000) | | 0 | 0 | 0 | страница 1 | | 0 | 1 | 0 | страница 2 | | 0 | 1 | 1 | страница 3 | | 1 | 0 | 0 | страница 4 | | 0 | 0 | 1 | страница 5 (буфер экрана 0) | | 1 | 1 | 1 | страница 6 (буфер экрана 1) | | 1 | 0 | 1 | страница 7 (системная страница) | ПРИМЕЧАНИЕ. Запись в регистр возможна только при установленном 11-м бите, только по командам, работающим с регистром, как с целым словом. Страницы 0, 1 и 2 ПЗУ зарезервированы: страница 0 и адресное пространство 100000 - 117777 страницы 1 предназначены для ПЗУ языка программирования BASIC. В адресах 120000 - 137777 страницы 1 расположены программы БОС. Адреса 100000 - 117777 страницы 2 предназначены для ПЗУ драйвера локальной сети. Страница 3 ПЗУ предназначена для подключения внешних блоков ПЗУ к магистрали ЭВМ. === 1.2.6.3. Регистр управления магнитофоном === Формат регистра:
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │ .│ .│ .│ X│ 0│ .│ .│ .│ X│ X│ X│ .│ .│ X│ .│ .│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ │ │ │ │ │ блокировка клавиши │ │ │ │ 'стоп' │ │ │ │ │ │ │ │ управление двигателем─────┘ │ │ │ магнитофона │ │ │ │ │ │ данные записи на магнитофонРегистр доступен только по записи при значении разряда 11 равном '0'. ===== 1.3. Особенности выполнения команд ===== Система команд микроЭВМ соответствует системе команд ЭВМ "ЭЛЕКТРОНИКА - 60" и определяется применяемым процессором 1801ВМ1. Однако в связи с рядом особенностей архитектуры существуют некоторые отличия от ЭВМ семейств СМ ЭВМ, ЭЛЕКТРОНИКА-60, ЭЛЕКТРОНИКА-85 и ДВК. Команда HALT (код 000000) вызывает прерывание выполнения программы и переход по вектору прерывания 4, причем при этом устанавливается бит - признак записи в системный регистр. БОС различает обычное прерывание по 4 вектору и останов. Программа пользователя имеет возможность перехватить только обычное прерывание по 4 вектору. При останове произойдет переход в монитор БОС с выводом на экран содержимого счетчика команд ЭВМ. Следует заметить, что правильная обработка клавиши 'стоп' возможна только при корректном значении указателя стека. Кроме этого, из-за особенностей аппаратуры может выдаваться неправильное значение счетчика команд. В некоторых случаях (нажатие 'стоп' во время выполнения запроса БОС) невозможно продолжение программы по команде "P". Исходя из сказанного, клавишей 'стоп' следует пользоваться очень осторожно. ===== 1.4. Вектора прерываний и зарезервированные ячейки БОС ===== Обработка прерываний в ЭВМ производится по векторам, размещенным в области 0 - 376. Некоторые ячейки этой области используются БОС для внутренних целей. * 4,6 - вектор прерывания по ошибке обращения к каналу, команде HALT и клавише 'стоп'; * 10,12 - вектор прерывания по несуществующей команде (в БОС не используется); * 14,16 - вектор прерывания по команде BPT и Т-БИТУ (используется при нажатии клавиши "ШАГ"); * 20,22 - вектор прерывания по команде IOT (не используется); * 24,26 - вектор прерывания по аварии питания (не используется); * 30,32 - вектор прерывания по команде EMT; * 34,36 - вектор прерывания по команде TRAP (не используется); * 40 - адрес пуска по команде монитора 'G' (используется при операциях с магнитофоном); * 52 (младший байт) - код возврата системных вызовов; * 60,62 - вектор прерывания клавиатуры (алфавитно-цифровые и управляющие коды); * 100,102 - вектор прерывания таймера; * 110,112 - программный вектор клавиатуры (адрес пользовательской программы завершения); * 114 - копия по записи системного регистра (управление памятью); * 116 - копия по записи системного регистра (управление магнитофоном); * 150-156,164,250,252 - используются для внутренних нужд БОС; * 166 - используется в качестве псевдовектора EMT для перехвата пользовательской программой команд EMT, не обработанных БОС; * 270,272 - вектор прерывания параллельного порта; * 274,276 - вектор прерывания клавиатуры (регистр АР2 и функциональные клавиши). ====== 2. Функции базовой операционной системы ====== БОС состоит из следующих программ: - программа начального пуска; - клавиатурный монитор; - таблица системных вызовов; - обработчик команд EMT; - драйвер ОЗУ/ПЗУ; - драйвер клавиатуры; - драйвер экрана; - драйвер кассетного магнитофона; - драйвер принтера; - драйвер накопителя на ГМД. ===== 2.1 Программа начального пуска ===== Программа начального пуска предназначена для инициализации БОС при включении ЭВМ, определения конфигурации ЭВМ и запуска других программ. При включении ЭВМ программа определяет наличие дополнительных блоков ПЗУ, устанавливая соответствующие флаги. Если в момент пуска нажата и удерживается какая-либо клавиша на клавиатуре, программа начального пуска передает управление клавиатурному монитору. Если ни одна клавиша не нажата,производятся следующие действия: если к ЭВМ подключен контроллер НГМД, программа начального пуска вызывает дисковый загрузчик,расположенный в контроллере НГМД по адресу 160000. Дисковый загрузчик поочередно пытается загрузить операционную систему (ОС) с 0, 1 привода. Если все попытки оказались неудачными (в дисковод не вставлена дискета с ОС, дискета запорчена и т.д.), загрузчик возвращает управление программе начального пуска. Затем программа поочередно пытается запустить блоки ПЗУ, начиная с блока с наибольшим номером. Первое слово программы в ПЗУ должно быть командой NOP (код 240). Вызов ПЗУ производится командой JSR PC, поэтому программа в ПЗУ может вернуть управление программе начального пуска командой RTS PC для продолжения загрузки. Если программ в ПЗУ нет или они вернули управление, производится переход в клавиатурный монитор. ===== 2.2 Клавиатурный монитор ===== Клавиатурный монитор является програмой,работающей в диалоге с пользователем ЭВМ,и позволяет ему загружать программы с магнитной ленты, запускать программы на выполнение, просматривать и корректировать содержимое ячеек ОЗУ, регистров процессора и внешних устройств, записывать участки ОЗУ на магнитную ленту, загружать операционную систему с диска и т.д. Все эти функции выполняются пользователем при помощи команд монитора. Язык команд монитора максимально приближен ко входному языку режима пультового терминала ЭВМ 'ЭЛЕКТРОНИКА-60' и 'ДВК'. ==== 2.2.1. Команды монитора ==== Признаком готовности монитора к приему очередной команды оператора является символ '@' в первой позиции строки экрана. Числа вводятся в восьмеричной системе счисления. Набирать незначащие нули необязательно. XXXXXX/ - открыть ячейку с восьмеричным адресом XXXXXX. По этой команде на экран выводится восьмеричное содержимое ячейки ОЗУ, ПЗУ или регистра внешнего устройства с адресом XXXXXX. Если такой регистр отсутствует или страница ОЗУ не подключена к заданному адресу, выводится сообщение об ошибке - символ '?' и команда игнорируется. XXXXXX\ -открыть байт с адресом XXXXXX. Содержимое байта или слова можно изменить, введя восьмеричное число (новое содержимое) и подав одну из команд: 'ВВОД' (клавиша '<─┘'), 'открыть следующую ячейку', 'открыть предыдущую ячейку','открыть косвенно','открыть по смещению'. RX/ - открыть регистр X, где X = 0...7 или 'S'. Открывает регистр общего назначения процессора (R0 - R7) или регистр состояния процессора (RS). Команды '/' и '\' без аргумента открывают "текущую", то есть последнюю открывавшуюся ячейку. 'ВВОД' (<─┘) - закрыть слово, байт или регистр. Если пользователем было введено новое содержимое, оно будет записано. ■ - закрыть слово, байт или регистр (если надо, модифицировать содержимое как по команде 'ВВОД') и открыть следующее слово, байт или регистр (при этом печатается адрес открываемой ячейки). После ячейки с адресом 177777 открывается ячейка 000000, после R7 - R0, после RS - команда работает, как команда 'ВВОД'. ■ - закрыть (с модификацией) и открыть предыдущее слово, байт, регистр. ■ - закрыть (с модификацией) ячейку, вычислить адрес по формуле: АДРЕС = < АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ > + ее новое содержимое + 2 и открыть (как слово) ячейку с соответствующим адресом. Эта команда используется для открытия аргумента команды ЭВМ, использующей метод адресации "67". ■ - закрыть (с модификацией) ячейку, вычислить адрес по формуле: АДРЕС = < АДРЕС ЯЧЕЙКИ > + < СОДЕРЖИМОЕ МЛАДШЕГО БАЙТА > * 2 + 2 и открыть (как слово) ячейку с соответствующим адресом. Содержимое байта рассматривается как число со знаком. Команда используется для открытия ячейки, на которую выполняется переход по команде типа "BR". '@' - закрыть (с модификацией) ячейку, открыть ячейку по адресу, равному (новому) содержимому закрытой ячейки. N;MC -отобразить страницу номер "N" с адреса, задаваемого аргументом "M". Страницы с восьмеричными номерами 10, 11, 12, 13 относятся к страницам ПЗУ 0, 1, 2, и 3 соответственно. Значение "M", равное нулю, означает адреса 40000-100000, равное "1" - адреса 100000-140000. XXXB - загрузить операционную систему с НГМД номер XXX и запустить ее. Если номер не задан, производится загрузка с автоматическим поиском системного диска. XXXXXXL - загрузить с адреса XXXXXX двоичный файл с магнитной ленты. Если адрес не задан, загрузка осуществляется с адреса, заданного в заголовке файла. Базовая операционная система поддерживает формат записи на магнитной ленте, совместимый с ЭВМ БК - 0010. После выдачи этой команды на экран выдается вопрос "имя файла?". Оператор должен ввести имя файла на магнитной ленте длиной до 16 символов. Если необходимо просмотреть каталог ленты,необходимо ввести '?' вместо имени файла. Если нажать клавишу 'ВВОД' без ввода имени, будет загружен первый встретившийся файл. <ОБЛАСТЬ>;U - вывести в файл информацию из ОЗУ. <ОБЛАСТЬ> - конструкция вида 'XXXXXX-YYYYYY', где XXXXXX и YYYYYY - начальный и конечный (включительно) адреса записываемой области ОЗУ, или вида 'XXXXXX+YYYYYY', где XXXXXX - начальный адрес записываемой области ОЗУ, а YYYYYY -длина в байтах. После выдачи команды задается вопрос "имя?", на который оператор должен ввести имя файла, который он хочет записать на ленту. XXXXXXM - включить/выключить двигатель магнитофона (используется при перемотке). Если XXXXXX не равно 0, двигатель включается, иначе выключается. Отсутствие аргумента соответствует нулевому. XXXXXXG - запустить программу с адреса XXXXXX. При отсутствии аргумента запуск производится со стартового адреса прграммы, который должен содержаться в ячейке USERPC (адрес 000040). P - продолжить выполнение программы с адреса, на котором оно было прервано командой 'HALT' или клавишей 'стоп'. 'ШАГ' - выполнить одну команду программы и вернуться в монитор. '■' (забой) - аннулировать последнюю введенную цифру. Другие символы не аннулируются. Команда не выполняется, если вводимое число = 0. 'СУ/E' - переход в непосредственный режим. Используется для настройки драйвера экрана. В драйвер экрана передается символ ESC (код 33), после чего монитор все вводимые символы передает драйверу экрана. Монитор остается в непосредственном режиме до ввода комбинации 'СУ/@'. ESC - последовательности, воспринимаемые драйвером экрана, см. в приложении 2. Пример: * СУ/E 0 СУ/@ - установка цветного режима. * СУ/E ; 2 1 СУ/@ - установка цвета фона 2 и цвета символов 1. ===== 2.3. Таблица системных вызовов ===== Таблица системных вызовов распологается в ПЗУ, начиная с адреса 140010 и является массивом адресов программ - обработчиков системных вызовов. Вызов функции БОС производится командой: JSR PC , @ADDR где ADDR - адрес одного из слов таблицы, например JSR PC , @140010 Для передачи параметров используется R0 процессора, а в некоторых случаях и R1. При возврате из БОС содержимое регистров процессора сохраняется, за исключением особо оговоренных случаев.Содержимое таблицы рассматривается ниже. ===== 2.4. Диспетчер EMT ===== Диспетчер EMT позволяет наряду со способом вызова по JSR использовать команды EMT. Способ передачи параметров совпадает с вызовами JSR.При обработке команды EMT с номером, превышающим допустимый, диспетчер проверяет содержимое ячейки 166. Если оно не равно нулю, управление передается по адресу, находящемуся в этой ячейке. Регистр PS процессора устанавливается в соответствии с содержимым 32 ячейки. Возврат из пользовательского обработчика производится непосредственно в вызвавшую программу командой RTI. Достоинства использования EMT: * позиционная независимость; * меньший объем кода; Недостатки: * пользовательская программа не может использовать EMT с младшими номерами для своих нужд; * вызовы по EMT выполняются медленнее; * при некоторых условиях, возникающих при выполнении EMT и вызывающих переход в монитор (клавиша 'СТОП', неверный вызов .BJMP и .BJSR), выводится адрес, принадлежащий не программе, а диспетчеру EMT. ===== 2.5. Драйвер ОЗУ/ПЗУ ===== Драйвер ОЗУ/ПЗУ позволяет подключать по запросу пользовательской программы заданные страницы ОЗУ/ПЗУ, определять состояние памяти и страниц, читать и записывать слова, байты и массивы слов в скрытые страницы, обращаться к подпрограммам, находящимся в скрытых страницах, а также обеспечивает защиту системной страницы. ===== 2.6. Драйвер клавиатуры ===== Драйвер клавиатуры обеспечивает прием символов с клавиатуры, перекодировку символов в соответствии с таблицами КОИ - 8, КОИ - 7Н0, КОИ - 7Н1, КОИ - 7Н2, запись символов во внутренний буфер,выдачу по запросу и по прерыванию символов в программу пользователя с ожиданием и без, программирование и подстановку функциональных клавиш, автоповтор последнего символа, редактирование вводимой и существующей строки, акустическую обратную связь при нажатии на клавиши. Драйвер может работать в двух режимах: прямом, когда коды функциональных клавиш передаются в прграмму без изменений, и режиме перекодировки, в котором некоторые функциональные клавиши выдают другие коды(см. приложение 1). ===== 2.7. Драйвер экрана ===== Драйвер экрана обеспечивает вывод на экран символьной, псевдографической и графической информации, стирание экрана, сдвиг вверх и вниз,управление цветами и палитрами, переключение буферов экрана, управление курсором. Вывод символьной и графической информации возможен в трех режимах: * 256 точек в строке, 4 цвета, 32 символа в строке, * 512 точек в строке, 2 цвета, 64 символа в строке, * 512 точек в строке, 2 цвета, 80 символов в строке. Вывод алфавитно - цифровой информации производится в соответствии с одной из таблиц: КОИ-8,КОИ-7Н0, КОИ-7Н1, КОИ-7Н2. Знакогенератор символов располагается в системной странице ОЗУ, начиная со смещения 10000. Хотя системная страница не может быть подключена, область знакогенератора доступна по чтению и записи с помощью запросов драйвера ОЗУ/ПЗУ. Описание каждого символа состоит из 10 байт, соответствующих телевизионным строкам. Байт с младшим адресом соответствует верхней строке символа, младший бит байта -левой точке в строке. Таблица начинается с изображения символа с восьмеричным кодом 040.Далее подряд идут изображения символов с кодами от 041 до 377. При начальном пуске ЭВМ в ОЗУ переписывается стандартный знакогенератор из ПЗУ. Программа пользователя может заменить любую часть знакогенератора. В режиме 80 символов в строке на экран выводятся первые 6 бит каждого байта. На экране может быть отображен алфавитно - цифровой курсор, указывающий позицию текущего символьного вывода, возможны две формы курсора: в виде прямоугольника, инвертирующего изображение символа,на котором находится курсор и в виде подчеркивания символа. При выводе в последней строке символа ПС (код 12) или ПФ (код 14) сдвиг экрана вверх может производиться либо скачком либо плавно. Возможно задание атрибутов выводимых символов: двойная ширина, подчеркивание, инверсия, возможен также вывод символов двойной высоты в 2 приема: сначала выводится верхняя часть буквы, затем курсор позиционируется на строку ниже в той же позиции и выводится нижняя часть быквы. Двойная высота может сочетаться с любой шириной, подчеркивание символов двойной высоты не производится. При выводе на экран графической информации возможны два режима работы: с замещением текущим цветом или с инверсией существующег цвета, а также задание прямоугольного окна для отсечения его по границам. ===== 2.8. Драйвер кассетного магнитофона ===== Драйвер кассетного магнитофона обеспечивает поиск, запись и считывание файлов с бытового кассетного магнитофона в формате, совместимом с БК - 0010. ===== 2.9. Драйвер принтера ===== Драйвер принтера обеспечивает вывод на печатающее устройство алфавитно-цифровой информации с перекодировкой по таблицам КОИ - 8, КОИ - 7Н0, КОИ-7Н1, КОИ - 7Н2, определение готовности ПУ, отслеживание позиции печатающей головки. ===== 2.10. Драйвер НГМД ===== Драйвер НГМД обеспечивает запись и считывание информации с гибких магнитных дисков в формате, совместимом с контроллером КМД от ДВК-3, а также форматирование дискет. ====== 3. Описание системных запросов БОС ====== В этой главе содержится краткое и подробное описание запрсов БОС БК-0011М. Для облегчения программирования на языке Ассемблера под управлением операционной системы ОС БК-11, поставляется макробиблиотека, содержащая макроопределения системных вызов. При описании функций БОС приводится 2 формата вызовов: макрокоманда и макрорасширение, которое может использоваться при программировании без макробиблиотеки. По умолчанию используются команды JSR. Для использовакия EMT следует присвоить служебной переменной ...EMT значение, отличное от нуля. БОС поддерживаетследующие вызовы: * .BINIT (JSR PC,@140010, EMT 0) - инициализация БОС; * .BEXIT (140012, EMT 1) - выход в клавиатурный монитор; * .BTRPS (140014, EMT 2) - перехват 4 вектора; * .BTIM (140016, EMT 3) - управление таймером; * .BEMT (140020, EMT 4) - управление обработкой EMT; * .BMEM (140030, EMT 10) - чтение состояния памяти; * .BTEST (140032, EMT 11) - чтение статуса страницы; * .BPAGE (140034, EMT 12) - подключение страницы ОЗУ/ПЗУ; * .BWORK (140036, EMT 13) - назначение/чтение рабочей страницы; * .BGETW (140040, EMT 14) - чтение слова из рабочей страницы; * .BGETB (140042, EMT 15) - чтение байта из рабочей страницы; * .BPUTW (140044, EMT 16) - запись слова в рабочую страницу; * .BPUTB (140046, EMT 17) - запись байта в рабочую страницу; * .BMOVE (140050, EMT 20) - пересылка массива слов; * .BMOVB (140052, EMT 21) - пересылка массива байтов; * .BJSR (140054) - вызов подпрограммы из рабочей страницы; * .BJMP (140056, EMT 23) - переход в рабочую страницу без возврата; * .BKINI (140070, EMT30) - инициализация драйвера клавиатуры; * .BKSET (140072, EMT 31) - установка режима драйвера клавиатуры; * .BKGET (140074, EMT 32) - чтение режима драйвера клавиатуры; * .BTTIN (140076, EMT 33) - ввод символа с ожиданием; * .BINKEY (140100, EMT 34) - ввод символа без ожидания; * .BGLIN (140102, EMT 35) - ввод строки с редактированием; * .BEDIT (140014, EMT 36) - редактирование существующей строки; * .BKRES (140106, EMT 37) - сброс буфера клавиатуры; * .BSFUN (140110, EMT 40) - установка функциональных клавиш; * .BGFUN (140112, EMT 41) - чтение функциональных клавиш; * .BTINI (140130, EMT 50) - инициализация драйвера экрана; * .BTSET (140132, EMT 51) - установка режима драйвера экрана; * .BTGET (140134, EMT 52) - чтение режима драйвера экрана; * .BSCOL (140136, EMT 53) - установка цветов; * .BGCOL (140140, EMT 54) - чтение цветов; * .BGPAL (140142, EMT 55) - установка/чтение палитры; * .BBUF (140144, EMT 56) - переключение буферов экрана; * .BSPOS (140146, EMT 57) - установка координат алфавитно - цифрового курсора; * .BGPOS (140150, EMT 60) - чтение координат алфавитно - цифрового курсора; * .BSCRL (140152, EMT 61) - сдвиг экрана; * .BCLS (140154, EMT 62) - очистка экрана; * .BTOUT (140156, EMT 63) - вывод символа; * .BPRIN (140160, EMT 64) - вывод строки символов (формат RT - 11); * .BSTR (140162, EMT 65) - вывод строки символов; * .BSGRF (140164, EMT 66) - установка текущих графических координат; * .BGGRF (140166, EMT 67) - чтение текущих графических координат; * .BSCGR (140170, EMT 70) - установка графического цвета; * .BGCGR (140172, EMT 71) - чтение графического цвета; * .BGMOD (140174, EMT 72) - установка/чтение режима рисования; * .BSPNT (140176, EMT 73) - вывод графической точки; * .BGPNT (140200, EMT 74) - чтение цвета графической точки; * .BVECT (140202, EMT 75) - вывод вектора; * .BRECT (140204, EMT 76) - вывод закрашенного прямоугольника; * .BCIRC (140206, EMT 77) - вывод дуги или окружности; * .BFILL (140210, EMT 100) - закраска гранично - определенной области; * .BSOUN (140212, EMT 101) - выдача звука; * .BSWIN (140214, EMT 102) - установка графического окна; * .BGWIN (140216, EMT 103) - чтение графического окна; * .BSTYP (140222, EMT 105) - установка типа вектора; * .BGTYP (140224, EMT 106) - чтение типа вектора; * .BGOSET (140226, EMT 107) - установка/чтение ориентации графических символов; * .BGOUT (140230, EMT 110) - графический вывод символа; * .BMOT (140240, EMT 114) - управление двигателем магнитофона; * .BMB10 (140242, EMT 115) - вызов формата БК-0010; * .BPINI (140260, EMT 124) - инициализация драйвера принтера; * .BPSET (140262, EMT 125) - установка режима печати; * .BPGET (140264, EMT 126) - чтение режима печати; * .BPOUT (140266, EMT 127) - вывод символа на печать; * .BPRDY (140270, EMT 130) - определение готовности принтера; * .BPPOS (140272, EMT 131) - определение позиции печатающей головки; * .BABOOT (JSR PC,@#160000) - автоматическая загрузка с НГМД; * .BBOOT (160002) - загрузка с выбранного привода НГМД; * .BBLCK (160004) - чтение/запись по номеру блока; * .BSECT (160006) - чтение/запись по номерам сектора и дорожки; * .BDINI (160010) - инициализация драйвера НГМД; * .BFORM (160012) - форматирование дорожки НГМД. ===== 3.1. Общесистемные запросы ===== ==== 3.1.1. Инициализация базовой операционной системы .BINIT ==== ^ Макрокоманда: | .BINIT | ^ Расширение: | JSR PC,@140010 (EMT 0) | Производится инициализация драйверов БОС. Драйвер клавиатуры: * настраиваются вектора прерывания клавиатуры; * сбрасывается пользовательский вектор обработки клавиатуры; * разрешаются прерывания от клавиатуры; * разрешается шелчок при нажатии клавиш; * сбрасывается буфер ввода с клавиатуры; * сбрасываются значения функциональных клавиш; * запрещается перекодировка клавиш; * устанавливается режим ввода в коде КОИ-8; Драйвер экрана: * устанавливается режим 32 символа в строке, палитра 15, белые символна черном фоне; * в ОЗУ знакогенератора копируется стандартный из ПЗУ; * очищаются оба буфера экрана; * включается запись и отображение буфера 0; * выключается режим двойной ширины и двойной высоты символов; * выключается режим инверсии и подчеркивания символов; * выключается режим плавного сдвига экрана; * включается отображение курсора в виде прямоугольника; * включается режим нормальной обработки управляющих символов; Драйвер магнитофона: * выключается мотор магнитофона; Драйвер принтера: * на принтер (в случае готовности) посылается символ возврата каретки; * обнуляется счетчик позиции печатающей головки; * устанавливается режим вывода в КОИ-8; Драйвер НГМД: * Выключается двигатель накопителя. ==== 3.1.2. Выход в клавиатурный монитор .BEXIT ==== ^ Макрокоманда: | .BEXIT | ^ Расширение: | MOV ADDR,R0 \\ JSR PC,@140012 (EMT 1) | Производится выход из программы пользователя в клавиатурный монитор. Настраиваются вектора клавиатуры, при этом возможен возврат в программу пользователя по команде 'P'. ==== 3.1.3. Перехват вектора 4 .BTRPS ==== ^ Макрокоманда: | .BTRPS ADDR | ^ Расширение: | MOV ADDR,R0 \\ JSR PC,@140014 (EMT 2) | Устанавливается адрес пользовательской программы для обработки 4 вектора. Состояние останова (команда HALT и клавиша 'СТОП') не перехватывается, в этом случае всегда происходит выход в монитор. Программа обработки должна заканчиваться командой RTI. Вызов с нулевым значением аргумента ADDR отменяет обработку 4 вектора в пользовательской программе. В обоих случаях вектор 4 настраивается на обработчик БОС. ==== 3.1.4. Управление таймером .BTIM ==== ^ Макрокоманда: | .BTIM ARG | ^ Расширение: | MOV ARG,R0 \\ JSR PC,@140016 (EMT 3) | Если бит 15 ARG равен 1, то в R0 возвращается признак: 0 - таймер выключен, 1 - таймер включен, если бит 15 ARG равен 0, то при нулевом значении ARG происходит выключение таймера, при ненулевом - включение. Перед включением таймера следует подготовить вектор 100. ==== 3.1.5. Управление обработкой EMT .BEMT ==== Макрокоманда имеет две формы запроса. Первая: ^ Макрокоманда: | .BEMT ON | ^ Расширение: | JSR PC,@140020 \\ ...EMT = 1 | Содержимое вектора EMT (если оно не равно адресу диспетчера EMT) помещается в ячейку 166 (настраивается пользовательский обработчик EMT). Макробиблиотека настраивается на использование команд EMT (ниже по тексту программы). Вторая: ^ Макрокоманда: | .BEMT OFF | ^ Расширение: | MOV @#166,@#30 \\ ...EMT = 0 | Восстанавливается прямая обработка EMT пользовательской программой. Макробиблиотека настраивается на использование команд JSR (ниже по тексту программы). ===== 3.2 Запросы драйвера ОЗУ/ПЗУ ===== ==== 3.2.1. Чтение состояния памяти .BMEM ==== ^ Макрокоманда: | .BMEM | ^ Расширение: | JSR PC,@140030 (EMT 10) | В младший байт R0 помещается номер страницы, подключенной к адресу 40000, в старший - номер страницы, подключенной к адресу 100000. Номера страниц 0 - 7 относятся к ОЗУ, страницы 10 - 13 (восьмеричное) относится к страницам ПЗУ с номерами 0, 1, 2 и 3 соответственно. ==== 3.2.2. Чтение статуса страницы ОЗУ/ПЗУ .BTEST ==== ^ Макрокоманда: | .BTEST PAGE | ^ Расширение: | MOV PAGE,R0 \\ JSR PC,@140032 (EMT 11) | Выдается состояние страницы ОЗУ/ПЗУ. В R0 помещается код: * бит 0 - страница подключена по адресу 40000, * бит 1 - страница подключена по адресу 100000, * бит 2 - страница ОЗУ используется БОС или страница ПЗУ не подключена, * бит 3 - страница является рабочей. Примечание. Страница ПЗУ считается подключенной, если в ней присутствует хотя бы одна микросхема ПЗУ. ==== 3.2.3. Подключение страницы ОЗУ/ПЗУ .BPAGE ==== ^ Макрокоманда: | .BPAGE PAGE,ADDR | ^ Расширение: | MOV #
───────┬──────┬──────────────────────┬───────────────────────────────────────── Смеще- │Длина │Симво- Начальное │ Назначение ние от │(байт)│личе- значение │ начала │ │ское │ области│ │имя │ │ │ │ 0 │ 2 │CSRW 0 │ Копия по записи регистра состояния НГМД 2 │ 2 │CURTRK - │ Адрес текущей дорожки 4 │ 4 │TRKTAB 177777(10),77777 Таблица текущих дорожек 10 │ 2 │TDOWN 20000(для 6022)│ Время опускания головки (в циклах SOB) 12 │ 2 │TSTEP " │ Время перехода с дорожки на дорожку 14 │ 1 │TRKCOR 36 (для 6022) │ Номер дорожки, с которой включается │ │ │ предкомпенсация при записи 15 │ 1 │BRETRY 30 (рекоменд.)│ Число повторных операций при ошибках 16 │ 1 │FLAGS 0 │ Рабочая ячейка драйвера 17 │ 1 │FILLB вх. параметр │ Код заполнения секторов при форматиров. 20 │ 2 │FLGPTR - │ Указатель на байт признаков 22 │ 4 │FLGTAB 0 │ Таблица признаков (см. ниже) 26 │ 2 │ADDR вх. параметр │ Адрес буфера ОЗУ 30 │ 2 │WCNT " │ Число слов для пересылки 32 │ 1 │SIDE " │ Номер стороны диска 33 │ 1 │TRK " │ Номер дорожки 34 │ 1 │UNIT " │ Номер привода 35 │ 1 │SECTOR " │ Номер сектора 36 │ 22 │ " │ Рабочие ячейки драйвера 60 │ 2 │MAXSEC вх. параметр │ Число секторов на дорожке 62 │ 4 │ │ Рабочие ячейки ───────┴──────┴──────────────────────┴────────────────────────────────────────Таблица FLGTAB содержит по одному байту на привод и используется для обработки нестандартных дисков. В каждом байте используется два бита для указания параметров операции: * бит "пси" - при установке в 1 драйвер производит пропуск дорожек при поиске, т.е. фактически обрабатываются только четные дорожки. Эта возможность используется для обработки на дисководе, имеющем 80 дорожек, дискет, размеченных на 40-дорожечном дисководе; * бит 1 - при установке в 1 драйвер производит обращение только к нижней стороне дискеты. Эта возможность используется при подключении дисководов, имеющих только одну головку, а также при обработке дискет, записанных на таком дисководе, на двустороннем дисководе; * бит 2 - при равенстве 0 драйвер обрабатывает сектора длиной 512 байт, иначе длиной 1024 байт. ==== 3.7.1. Автоматическая загрузка ==== ^ Вызов: | JSR PC,@160000 | Можно также произвести загрузку непосредственно из монитора команд оператора командой 'B'. Входные параметры отсутствуют. Действие: производится попытка загрузить операционную систему с привода 0. Если попытка загрузки была неудачной, то драйвер последовательно пытается загрузить систему с 1, 2 и 3 привода. Если все попытки оказались неудачными, драйвер возвращает управление с установленным битом 'C' оператора. Алгоритм загрузки: - Инициализируется рабочая область драйвера в ОЗУ (базовый адрес - 2000) с параметрами для дисковода 6022. - Считается 1 сектор 0 дорожки выбранного дисковода в ОЗУ, начиная с адреса 1000. - В приведенных ниже случаях попытка загрузки считается неудачной. Иначе драйвер передает управление по дресу 1000, при этом в RO помещается номер привода, откуда произведена загрузка. Причины неудачной загрузки: * в приводе отсутствует дискета; * не закрыта крышка привода; * привод неисправен; * дискета не размечена; * при считывании указанного сектора возникла ошибка; * на диске нет загрузчика операционной системы. ==== 3.7.2. Загрузка с выбранного привода ==== ^ Вызов: | MOV #N,RO \\ JMP @#160002 | Из монитора загрузка производится командой
┌───────────────────────────────┬───────────────────────┬───────────────────┐ │ │ ПРЯМОЙ РЕЖИМ │ ПЕРЕКОДИРОВКА │ │ КЛАВИША ├────────────────┬──────┼─────────┬─────────┤ │ │ │ АР2 │ │ АР2 │ ├───────────────────────────────┼────────────────┼──────┼─────────┼─────────┤ │ТАБ │ 11 │ 11 │ 11 │ 11 │ │КТ │ 3 │ 203 │ 3 │ 203 │ │─┼> (удал. правой ч. строки) │ 213 │ 213 │ 33 144 │ 33 144 │ ││<─ (сдвижка в строке) │ 26 │ 226 │ 33 145 │ 226 │ │├─> (раздвижка в строке) │ 27 │ 227 │ 27 │ 227 │ │ИНД СУ │ 202 │ 202 │ 33 25 │ 33 25 │ │БЛОК РЕД │ Код в программу не передается │ │ШАГ │ 220 │ 220 │ 33 10 │ 33 10 │ │СБР │ 14 │ 214 │ 14 │ 214 │ │<─┤ (забой) │ 30 │ 230 │ 177 │ 30 │ │ВС │ 23 │ 223 │ 23 │ 33 │ │<─┘ (ввод) │ 12 │ 212 │ 15 │ 15* │ │^ (вверх) │ 32 │ 232 │ 33 101 │ 33 121 │ │v (вниз) │ 33 │ 233 │ 33 102 │ 12 │ │─> (вправо) │ 10 │ 210 │ 33 103 │ 33 120 │ │<─ (влево) │ 31 │ 231 │ 33 104 │ 33 122 │ └───────────────────────────────┴────────────────┴──────┴─────────┴─────────┘Примечание. * - в режиме дополнительной клавиатуры код 33 77 Коды функциональных клавиш в режиме перекодировки и дополнительной клавиатуры ^ Клавиша + АР2 ^ Код ^ | 0 | 33 77 160 | | 1 | 33 77 161 | | 2 | 33 77 162 | | 3 | 33 77 163 | | 4 | 33 77 164 | | 5 | 33 77 165 | | 6 | 33 77 166 | | 7 | 33 77 167 | | 8 | 33 77 170 | | 9 | 33 77 171 | ===== Приложение 2: управление экраном ===== Управляющие символы драйвера экрана ^ Код ^ Назначение ^ | 7 | Звонок | | 10 | Возврат на шаг (курсор влево) | | 11 | Горизонтальная табуляция | | 12 | Перевод строки (курсор вниз, сдвиг экрана вверх) | | 14 | Перевод формата (пропуск 10 строк) | | 15 | Возврат каретки (курсор в начало строки) | | 16 | Переход на русский регистр (в КОИ-7) | | 17 | Переход на латинский регистр (в КОИ-7) | | 33 | ESCAPE (начало командной последовательности) | Командные последовательности ^ Команда ^ Назначение ^ | ESC 0 (033 060) | Устанавливает режим 32' символа в строке | | ESC 1 (033 061) | Устанавливает режим 64 символа в строке | | ESC 2 (033 062) | Устанавливает режим 80 символов в строке | | ESC 3 (033 063) | Двойная ширина символов | | ESC 4 {033 064) | Одинарная ширина символов | | ESC 5 (033 065) | Двойная высота символов (верхняя половина) | | ESC 6 (033 066) | Двойная высота символов (нижняя половина) | | ESC 7 (033 067) | Отмена двойной высоты | | ESC 8 (033 070) | Отображение курсора | | ESC 9 (033 071) | Запрет курсора | | ESC : (033 072) | Установка палитры (1) | | ESC ; (033 073) | Установка цветов (2) | | ESC = (033 075) | Вводит режим дополнительной клавиатуры | | ESC > (033 076) | Сбрасывает режим дополнительной клавиатуры | | ESC @ (033 100) | Раздвижка символов от курсора вправо | | ESC A (033 101) | Курсор вверх (в первой строке игнорируется) | | ESC B (033 102) | Курсор вниз (в последней строке игнорируется) | | ESC C (033 103) | Курсор вправо (зависит от режима автопереноса) | | ESC D (033 104) | Курсор влево (зависит от режима автопереноса) | | ESC E (033 105) | Стирание экрана | | ESC H (033 110) | Курсор в начало экрана | | ESC I (033 111) | "Обратный ПС" (сдвиг экрана вниз) | | ESC J (033 112) | Стирание от курсора до конца экрана | | ESC K (033 113) | Стирание от курсора до конца строки | | ESC L (033 114) | Раздвижка строк от курсора вниз | | ESC M (033 115) | Сдвижка строк к курсору вверх (строка, в которой находился курсор, исчезает) | | ESC N (033 116) | Подчеркивание символов | | ESC O (033 117) | Отмена подчеркивания символов | | ESC P (033 120) | Сдвижка символов к курсору влево | | ESC Q (033 121) | Курсор в начало следующей строки | | ESC R (033 122) | Курсор в начало текущей строки | | ESC T (033 124) | Инверсия символов | | ESC U (033 125) | Отмена инверсии | | ESC Y (033 131) | Прямая адресация курсора (3) | | ESC Z (033 132) | Идентификация (4) | Примечания. * (1) после команды должен следовать байт, младшие 4 бита означают код палитры; * (2) после команды должны следовать два байта,означающие фон и цвет символов; * (3) после команды должны следовать код строки и код позиции в строке. Код 40 соответствует верхней строке и левой позиции; * (4) в ответ на команду в драйвер клавиатуры передается последовательность: ESC/K. ===== Приложение 3: формат слова управления режимом экрана =====
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ │X │ │ │ │ │ │X │ │ │X │X │ │ │ │ │ │ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘ │ │ │ │ │ │ │ │ │ │ │ │ отоб- │ │ │ │ │ │ │ плавный───┘ │ │ │ │ ражение│ │ │ │ │ │ │ сдвиг │ │ │ │ управл.│ │ │ │ │ │ │ │ │ │ │ символов │ │ │ │ │ │ подчеркива- │ │ │ │ │ │ │ │ │ │ ющий курсор───┘ │ │ │ индикация─┘ │ │ │ │ │ │ │ │ курсора │ │ │ │ │ 80 символов в │ │ │ │ │ │ │ │ строке (не────────┘ │ │ разрешение │ │ │ │ │ работает в режиме │ │ автопереноса─┘ │ │ │ │ 256 точек в строке) │ │ │ │ │ │ │ │ подчеркивание─────┘ │ │ │ двойная ширина (не │ │ символов │ │ │ работает в режиме 80──┘ │ │ │ │ символов в строке) │ инверсия символов────┘ │ │ │ │ │ 0 - 512 точек в строке────┘ в коде КОИ-7 - КОИ7Н2, │ │ 1 - 256 точек в строке в КОИ-8 - совмещенный КОИ-7,8┘ │ │ 0 - КОИ-7, 1 - КОИ-8─────────────┘