БК-0011М - Руководство системного программиста: различия между версиями
Panther (обсуждение | вклад) мНет описания правки |
Panther (обсуждение | вклад) м (TOC format) |
||
Строка 1: | Строка 1: | ||
{{ДИ|Автор=Александр Лунев|Источник=http://www.vak.ru/doku.php/proj/bk/bk-0011m-pm}} | {{ДИ|Автор=Александр Лунев|Источник=http://www.vak.ru/doku.php/proj/bk/bk-0011m-pm}} | ||
Набил 13.08.1992 В. Усович. Подготовил к печати и перевел из RT-11 в MKDOS 31.07.1993 Чурин Д.М. (Asfalt software). | Набил 13.08.1992 В. Усович. Подготовил к печати и перевел из RT-11 в MKDOS 31.07.1993 Чурин Д.М. (Asfalt software). | ||
Строка 15: | Строка 15: | ||
00015 - 01.32.01 | 00015 - 01.32.01 | ||
</pre> | </pre> | ||
__TOC__ | |||
<h1>Аннотация</h1> | <h1>Аннотация</h1> |
Текущая версия от 11:45, 23 сентября 2009
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: Александр Лунев |
Набил 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 #<ADDR * 400> + PAGE,R0 JSR PC,@140034 (EMT 12) |
В младший байт R0 помещается номер подключаемой страницы. Код адреса подключения страницы помещается в старший байт R0. Нулевое значение означает область адресов 40000 - 100000, любое ненулевое значение - область 100000 - 140000.
Возможно нормальное завершение запроса и завершение запроса с ошибкой. В случае нормального завершения бит ‘C’ в слове состояния процессора сброшен, по ошибке - установлен в 1. В этом случае в байт с адресом 52 (восьмеричное) помещается код ошибки:
- 1 - страница отсутствует;
- 2 - страница не может быть подключена по заданному адресу (попытка подключить страницу ПЗУ по адресу 40000 - 100000);
- 3 - страница используется БОС для своих внутренних целей и запрещена для подключения;
3.2.4. Назначение рабочей страницы .BWORK
Макрокоманда: | .BWORK ARG |
---|---|
Расширение: | MOV ARG,R0 JSR PC,@140036 (EMT 13) |
Если бит 15 аргумента равен 0, то происходит назначение рабочей страницы: если бит 7 равен 0,то страница с номером в младшем байте аргумента назначается в качестве рабочей для записи/чтения. Если бит 7 равен 1, то страница назначается в качестве рабочей для макрокоманд .BJSR и .BJMP. Если бит 15 аргумента равен 1, то в R0 помещается код рабочих страниц: в младшем байте номер рабочей страницы чтения-записи, в старшем - номер страницы вызовов (со старшим битом, равным 0).
3.2.5. Чтение слова из рабочей страницы .BGETW
Макрокоманда: | .BGETB ADDR |
---|---|
Расширение: | MOV ADDR,R0 JSR PC,@140040 (EMT 14) |
Из рабочей страницы по указанному адресу читается слово и помещается в R0. При попытке прочесть слово из несуществующей страницы R0 не изменяется, а бит ‘C’ слова состояния процессора устанавливается в 1.
Старшие два бита адреса игнорируются.
3.2.6. Чтение байта из рабочей страницы .BGETB
Макрокоманда: | .BGETB ADDR |
---|---|
Расширение: | MOV ADDR,R0 JSR PC,@140042 (EMT 15) |
Из рабочей страницы по указанному адресу читается байт и помещается в младший байт R0. Старший байт R0 обнуляется. При попытке прочесть байт из несуществующей страницы R0 не изменяется, а бит ‘C’ слова состояния процессора устанавливается в 1.
3.2.7. Запись слова в рабочую страницу .BPUTW
Макрокоманда: | .BPUTW ADDR,DATA |
---|---|
Расширение: | MOV ADDR,R1 MOV DATA,R0JSR PC,@140044 (EMT 16) |
В рабочую страницу по указанному адресу записывается слово. При попытке записи в ПЗУ,несуществующую страницу или системную область ОЗУ устанавливается бит ‘C’. Системной областью считается область системной страницы с относительными адресами 0 - 7777.
3.2.8. Запись байта в рабочую страницу .BPUTB
Макрокоманда: | .BPUT ADDR,DATA |
---|---|
Расширение: | MOV ADDR,R1 MOVB DATA,R0JSR PC,@140046 (EMT 17) |
В рабочую страницу по указанному адресу записывается байт. При попытке записи в ПЗУ, несуществующую страницу, системную область ОЗУ устанавливается бит ‘C’.
3.2.9. Пересылка массива слов .BMOVE
Макрокоманда: | .BMOVE AREA |
---|---|
Расширение: | MOV AREA,R0 JSR PC,@140050 (EMT 20) |
Производится пересылка массива слов между текущим адресным пространством пользователя и заданным скрытым пространством. В R0 помещается адрес области параметров.
Формат области:
.WORD MEMADR ; начальный адрес в памяти .WORD HIDADR ; начальный адрес в скрытой памяти .BYTE LOW,HIGH ; номера страниц скрытой памяти .WORD BCOUNT ; счетчик слов
Начальные адреса в памяти должны лежать выше адреса 400, конечные адреса (начальный адрес + счетчик) в памяти не должны превышать 160000. Параметры LOW и HIGH задают номера страниц, подключаемых к адресам 40000 и 100000 соответственно. Выходной массив (в который осуществляется запись) не должен лежать в ПЗУ или системной области ОЗУ. Положительное значение счетчика слов задает пересылку из рабочей страницы в память (чтение),отрицательное (при этом используется абсолютное значение счетчика) - обратную операцию (запись). При правильно заданных параметрах и успешной пересылке бит ‘C’ слова состояния процессора и байт 52 обнуляются. Возможны следующие случаи неуспешного завершения (при этом бит ‘C’ устанавливается в 1 и в байт 52 помещается соответствующий код):
- неверно задан начальный адрес (код 1) - пересылка не производится;
- неверно задан конечный адрес (код 2) -пересылка производится до достищения допустимого конечного адреса, в R0 помещается число непереданных слов;
- при пересылке возникло прерывание по 4 вектору (попытка записи в ПЗУ или несуществующую область) (код 3) - пересылка прекращается, в R0 помещается число непереданных слов.
3.2.10. Пересылка массива байтов .BMOVB
Макрокоманда: | .BMOVB AREA |
---|---|
Расширение: | MOV AREA,R0 JSR PC,@140052 (EMT 21) |
Производится пересылка массива слов между текущим адресным пространством пользователя и заданным скрытым пространством. Параметры аналогичны пересылке слов (вместо “слов” читай “байтов”).
3.2.11. Вызов подпрограммы из рабочей страницы .BJSR
Макрокоманда: | .BJSR ADDR |
---|---|
Расширение: | MOV ADDR,-(SP) JSR PC,@140054 |
Рабочая страница подключается по адресу, определенному аргументом ADDR (если он находится в диапазоне 40000 - 47776, то к 40000, если в диапазоне 100000 - 140000, то к 100000) и производится вызов командой JSR PC,ADDR.
Регистры общего назначения с слово состояния процессора (кроме бита ‘C’) при выполнении вызова не изменяются. Стек не должен находиться в переключаемой странице. В стек помещается следующя информация:
— SP до вызова | |
адрес перехода | |
адрес возврата 1 | |
старая карта | |
адрес возврата 2 | — SP после перехода |
При выходе из подпрограммы регистры общего назначения и слово состояния программы сохраняются.
При попытке обращения к подпрограмме в несуществующей странице или системной странице ОЗУ обращение к подпрограмме выполняться не будет и выполнится выход в монитор с соответствующей диагностикой.
После выхода из подпрограммы восстанавливается старое подключение обеих страниц ОЗУ/ПЗУ, даже если подпрограмма переключала одну или обе страницы. Допускается вложенное использование макрокоманды ‘.BJSR’. Параметр вызова из стека удаляется.
3.2.12. Переход в рабочую страницу без возврата .BJMP
Макрокоманда: | .BJMP ADDR |
---|---|
Расширение: | MOV ADDR,-(SP) JSR PC,@140056 (EMT 23) |
Макрокоманда выполняется аналогично макрокоманде .BJSR, но дополнительная информация в стек не помещается, адрес возврата не сохраняется. Если страница не существует или занята системой, параметры вызова из стека удаляются и происходит выход в монитор с соответствующей диагностикой.
ПРИМЕЧАНИЯ:
- В диагностических сообщениях, выдаваемых по .BJMP, .BJSR и прерыванию по 4 вектору выдается содержимое PC после выполнения запроса, т.е. адрес следующей за JSR или недопустимой командой ячейки.
- В связи с использованием стека для передачи параметра для вызова следует использовать только команды JSR, а не EMT.
3.3. Запросы драйвера клавиатуры
3.3.1. Инициализация драйвера клавиатуры .BKINI
Макрокоманда: | .BKINI |
---|---|
Расширение: | JSR PC,@140070 (EMT 30) |
Выполняется инициализация драйвера клавиатуры, описанная в макрокоманде .BINIT.
3.3.2 Установка режима драйвера клавиатуры .BKSET
Макрокоманда: | .BKSET MODE |
---|---|
Расширение: | MOV MODE,R0 JSR PC,@140072 (EMT 31) |
Устанавливается режим драйвера клавиатуры в соответствии со словом MODE. Назначение разрядов слова:
Разряд | Значение |
---|---|
0 | 0 - КОИ-8, 1 - КОИ-7 |
1 | для КОИ-7: 1 - КОИ7-Н2 |
6 | 0 - “щелчок” клавиатуры разрешен, 1 - запрещен |
7 | 0 - прямая передача кодов, 1 - перекодировка (см. приложение 1) |
Кроме этого, программа пользователя имеет возможность задать подпрограмму завершения при нажатии каждой клавиши. Программным вектором считаются ячейки 110 и 112. При нулевом содержимом 110 ячейки считается, что подпрограмма завершения отсутствует. В ячейку 112 записывается значение регистра управления памятью для подпрограммы завершения или 0 для текущего распределения. При вызове подпрограммы завершения в R0 передается код нажатой клавиши. Выход из подпрограммы выполняется командой ‘RTS PC’. В подпрограмме завершения можно использовать все регистры общего назначения.
Если при выходе из подпрограммы завершения бит ‘C’ установлен в 1, драйвер считает, что символ с клавиатуры не обработан и передаст его программе пользователя по .BTTIN.
Если при выходе из подпрограммы завершения бит ‘C’ установлен в 0, то символ считается обработанным и в буфер не записывается.
3.3.3. Чтение режима работы клавиатуры .BKGET
Макрокоманда: | .BKGET |
---|---|
Расширение: | JSR PC,@140074 (EMT 32) |
Текущий режим клавиатуры помещается в R0. Формат слова режима см. макро .BKSET.
3.3.4. Ввод символа с ожиданием .BTTIN
Макрокоманда: | .BTTIN |
---|---|
Расширение: | JSR PC,@140076 (EMT 33) |
В младший байт R0 помещается очередной символ из буфера ввода клавиатуры, старший байт R0 обнуляется.
3.3.5. Ввод символа без ожидания .BINKEY
Макрокоманда: | .BINKEY |
---|---|
Расширение: | JSR PC,@140100 (EMT 34) |
В случае отсутствия символов в буфере, R0 обнуляется, бит ‘C’ устанавливается в 1, в противном случае бит ‘C’сброшен,в R0 передается код очередного символа.
3.3.6. Ввод строки с редактированием .BGLIN
Макрокоманда: | BGLIN ADDR,LENGTH |
---|---|
Расширение: | MOV ADDR,R0 MOV LENGTH,R1JSR PC,@140102 (EMT 35) |
Осуществляется ввод с клавиатуры строки символов с редактированием. Ввод строки заканчивается при нажатии клавиши ‘ВВОД’, необязательно в конце строки. Код клавиши ‘ВВОД’ в буфер не помещается, в конце строки добавляется нулевой байт. Параметр ADDR задает адрес буфера, куда помещается строка, параметр LENGTH задает максимальную длину вводимой строки. При длине, равной 0, длина принимается равной максимально возможной длине - 128 символов. При вводе строки отрабатывается клавиша ‘забой’. После возврата из функции в R0 находится адрес байта, следующего за нулевым, а в R1 - длина введенной строки.
3.3.7. Редактирование существующей строки .BEDIT
Макрокоманда: | .BEDIT ADDR,LENGHT |
---|---|
Расширение: | MOV ADDR,R0 MOV LENGTH,R1JSR PC,@140104 (EMT 36) |
Строка, находящаяся по адресу ADDR и заканчивающаяся нулевым байтом, выводится на экран, курсор помещается в конец выведенной строки, после чего осуществляется ее редактирование, аналогичное .BGLIN. Отредактированная строка помещается на место исходной.
3.3.8. Сброс буфера клавиатуры .BKRES
Макрокоманда: | .BKRES |
---|---|
Расширение: | JSR PC,@140106 (EMT 37) |
Осуществляется инициализация кольцевого буфера клавиатуры.
3.3.9. Установка функциональных клавиш .BSFUN
Макрокоманда: | .BSFUN KEY,ADDR |
---|---|
Расширение: | MOV KEY,R0 MOV ADDR,R1JSR PC,@140110 (EMT 40) |
Макрокоманда позволяет присвоить 10 функциональным клавишам (аргумент KEY [1...10] - номер клавиши) текстовые строки, которые будут вводиться при нажатиях этих клавиш.Функциональные клавиши вводятся при одновременном нажатии клавиши АР2 и соответствующей цифровой клавиши(номеру 10 соответствует клавиша 0). Аргумент KEY, равный 0, вызывает сброс всех функциональных клавиш.Аргумент ADDR задает адрес строки, которая должна заканчиваться нулевым байтом. Максимальная длина присваемой строки - 64.
3.3.10. Чтение функциональных клавиш .BGFUN
Макрокоманда: | .BGFUN KEY,ADDR |
---|---|
Расширение: | MOV KEY,R0 MOV ADDR,R1JSR PC,@140112 (EMT 41) |
Производится пересылка строки, соответствующей клавише с номером KEY, в пользовательскую область по адресу ADDR.
3.4. Запросы драйвера экрана
3.4.1. Инициализация драйвера экрана .BTINI
Макрокоманда: | .BTINI |
---|---|
Расширение: | JSR PC,@140130 (EMT 50) |
Производится инициализация драйвера экрана, описанная в макрокоманде .BINIT.
3.4.2. Установка режима драйвера экрана .BTSET
Макрокоманда: | .BTSET MODE |
---|---|
Расширение: | MOV MODE,R0 JSR PC,@140132 (EMT 51) |
Устанавливается режим работы экрана, соответствующий слову MODE. Формат слова приведен в приложении 3.
3.4.3. Чтение режима драйвера экрана .BTGET
Макрокоманда: | .BTGET |
---|---|
Расширение: | JSR PC,@140134 (EMT 52) |
В R0 помещается слово управления режимом драйвера экрана.
3.4.4. Установка цветов .BSCOL
Макрокоманда: | .BSCOL FORE,BACK |
---|---|
Расширение: | MOV #<BACK * 400>+FORE,R0 JSR PC,@140136 (EMT 53) |
Задаются цвета для символьного вывода на экран. Аргумент FORE задает код цвета для символов и помещается в младший байт R0, аргумент BACK - код цветов фона и помещается в старший байт R0. Код, больший 200 (восьмеричное), означает сохранение текущего цвета. В зависимости от режима рассматриваются младшие 1 или 2 бита кода.
3.4.5. Чтение цветов .BGCOL
Макрокоманда: | .BGCOL |
---|---|
Расширение: | JSR PC,@140140 (EMT 54) |
В R0 помещается код текущих цветов, как описано в макрокоманде .BSCOL.
3.4.6. Установка/чтение палитры .PAL
Макрокоманда: | .BPAL PALET |
---|---|
Расширение: | MOVB PALET,R0 JSR PC,@140142 (EMT 55) |
Устанавливается палитра, соответствующая аргументу PALET (0...15). Если PALET >200 (восьм.), то палитра не изменяется, а в R0 код текущей палитры.
3.4.7. Переключение буферов экрана .BBUF
Макрокоманда: | .BBUF WRITE,VIDEO |
---|---|
Расширение: | MOV #<WRITE * 400>+VIDEO,R0 JSR PC,@140144 (EMT 56) |
Устанавливаются буфера экрана для отображения (VIDEO) и для записи (WRITE). Номер буфера (0 или 1) отображения помещается в младший байт R0, записи - в старший. Если бит 15 R0 установлен в’1’, в R0 возвращается текущий код буферов.
3.4.8. Установка координат алфавитно-цифрового курсора .BSPOS
Макрокоманда: | .BSPOS LINE,POS |
---|---|
Расширение: | MOV #<LINE * 400>+POS,R0 JSR PC,@140146 (EMT 57) |
Алфавитно-цифровой курсор устанавливается в заданной позиции POS заданной строки LINE. Если номер строки или позиции в строке превышает допустимый, то соответствующая координата не изменяется.
3.4.9. Чтение координат Алфавитно-цифрового курсора .BGPOS
Макрокоманда: | .BGPOS |
---|---|
Расширение: | JSR PC,@140150 (EMT 60) |
В R0 помещается текущее положение курсора, причем в младшем байте содержится номер позиции, а в старшем - номер строки.
3.4.10. Сдвиг экрана .BSCRL
Макрокоманда: | .BSCRL NUM |
---|---|
Расширение: | MOV NUM,R0 JSR PC,@140152 (EMT 61) |
Производится сдвиг изображения на указанное число телевизионных строк, положительное число означает сдвиг вверх, отрицательное - вниз.
3.4.11. Очистка экрана .BCLS
Макрокоманда: | .BCLS |
---|---|
Расширение: | JSR PC,@140154 (EMT 62) |
Производится очистка экрана (заполнение цветом фона). Курсор устанавливается в левый верхний угол.
3.4.12. Вывод символа .BTOUT
Макрокоманда: | .BTOUT CHAR |
---|---|
Расширение: | MOVB CHAR,R0 JSR PC,@140156 (EMT 63) |
Производится вывод символа на экран, если он печатаемый. Управляющие символы, интерпретируемые драйвером, описаны в приложении 2. Управляющие символы, отсутствующие в таблице, игнорируются. В режиме ‘БЛОКРЕД’ все управляющие символы не обрабатываются, а выводятся в виде инверсных изображений латинских букв.
3.4.13. Вывод строки символов (формат RT-11) .BPRIN
Макрокоманда: | .BPRIN ADDR |
---|---|
Расширение: | MOV ADDR,R0 JSR PC,@140160 (EMT 64) |
Производится вывод на экран строки символов. Строка должна начинаться с адреса ADDR и заканчиваться байтом 0 (курсор переводится в начало следующей строки) или 200 (курсор располагается за последним выведенным символом). После возврата в R0 находится адрес байта, следующего за конечным.
3.4.14 Вывод строки символов .BSTR
Макрокоманда: | .BSTR ADDR |
---|---|
Расширение: | MOV ADDR,R0 JSR PC,@140162 (EMT 65) |
Производится вывод строки, заканчивающейся байтом 0. Курсор на новую строку не переводится.
3.4.15. Установка текущих графических координат .BSGRF
Макрокоманда: | .BGRF X,Y |
---|---|
Расширение: | MOV X,R0 MOV Y,R1JSR PC,@140164 (EMT 66) |
Устанавливаются текущие графические координаты, которые используются в других графических вызовах. Аргумент X - номер точки в строке. Y- задает номер строки растра, верхняя левая точка имеет координаты (0,0), правая нижняя - (255,255) или (511,255) в зависимости от режима.
3.4.16. Чтение текущих графических координат .BGGRF
Макрокоманда: | .BGGRF |
---|---|
Расширение: | JSR PC,@140166 (EMT 67) |
В R0 и R1 помещаются текущие графические координаты в том же формате, что и в .BSGRF.
3.4.17. Установка графического цвета .BSCGR
Макрокоманда: | .BSCGR COLOR |
---|---|
Расширение: | MOVB COLOR.R0 JSR PC,@140170 (EMT 70) |
Устанавливается цвет для графического вывода. COLOR может принимать значения 0...3:
- 0 - черный
- 1 - синий
- 2 - зеленый
- 3 - красный
3.4.18 Чтение графического цвета .BGCGR
Макрокоманда: | .BGCGR |
---|---|
Расширение: | JSR PC,@140172 (EMT 71) |
В R0 помещается код текущего графического цвета.
3.4.19 Установка/чтение режима рисования .BSMOD
Макрокоманда: | .BSMOD MODE |
---|---|
Расширение: | MOVB MODE,R0 JSR PC,@140174 (EMT 72) |
Устанавливается режим рисования для всех графических вызовов. При MODE=0 устанавливается режим замещения текущим цветом. MODE=1 - режим инверсии содержимого буфера, MODE=200 - режим не меняется, а в R0 помещается код текущего режима.
3.4.20. Вывод графической точки .BSPNT
Макрокоманда: | .BSPNT X,Y |
---|---|
Расширение: | MOV X,R0 MOV Y,R1JSR PC,@140176 (EMT 73) |
На экран по заданным координатам выводится графическая точка текущего цвета. Текущие координаты перемещаются в заданную точку.
3.4.21. Чтение цвета графической точки .BGPNT
Макрокоманда: | .BGPNT X,Y |
---|---|
Расширение: | MOV X,R0 MOV Y,R1JSR PC,@140200 (EMT 74) |
В точке с заданными координатами определяется цвет и помещается в R0. Текущие координаты не изменяются.
3.4.22. Вывод графического вектора .BVECT
Макрокоманда: | .BVECT X,Y |
---|---|
Расширение: | MOV X,R0 MOV Y,R1JSR PC,@140202 (EMT 75) |
Выводится графический вектор текущего цвета, начало которого находится в точке с текущими координатами, а конец - в точке с заданными. Текущая точка перемещается в конечную. Часть отрезка, выходящая за пределы экрана (или окна) не отображается.
3.4.23 Вывод закрашенного прямоугольника .BRECT
Макрокоманда: | .BRECT X,Y |
---|---|
Расширение: | MOV X,R0 MOV Y,R1JSR PC,@140204 (EMT 76) |
Выводится прямоугольник, закрашенный текущим цветом, со сторонами, параллельными сторонам экрана. Один угол прямоугольника располагается в текущей точке, противоположный - в заданной. Текущая точка перемещается в заданную.
3.4.24. Вывод дуги или окружности .BCIRC
Макрокоманда: | .BCIRC ADDR |
---|---|
Расширение: | MOV ADDR,R0 JSR PC,@140206 (EMT 77) |
Выводится окружность, дуга или сектор текущего цвета. Аргумент ADDR задает адрес блока параметров вызова.
- Слово 1 - координата X центра дуги (окружности)
- Слово 2 - координата Y центра дуги (окружности)
- Слово 3 - радиус дуги (окружности)
- Слово 4 - начальный угол дуги
- Слово 5 - конечный угол
- Слово 6 - коэффициент сжатия по оси X
- Слово 7 - коэффициент сжатия по оси Y.
Начальный и конечный углы задаются следующим образом:
Аргумент | Значение угла (градусы) |
---|---|
000000 | 0 |
077777 | 360 |
Если задано отрицательное значение, используется его абсолютная величина, а соответствующая граничная точка дуги соединяется с центром дуги отрезком прямой. Аргументы “коэф. сжатия кодируются следующим образом:
- 0 - нет сжатия;
- 1-177777 - реальная координата = (вычисленная * коэфф.)/32767
3.4.25. Закраска гранично-определенной области .BFILL
Макрокоманда: | .BFILL COLOR |
---|---|
Расширение: | MOVB COLOR,R0 JSR PC,@140210 (EMT 100) |
Производится закраска гранично - определенной 4-связной области текущим цветом,начиная с текущей точки. Область должна быть ограничена одним заданным цветом (COLOR).
3.4.26. Выдача звука .BSOUN
Макрокоманда: | .BSOUN LENGTH,TONE |
---|---|
Расширение: | MOV LENGTH,R0 MOV TONE,R1JSR PC,@140212 (EMT 101) |
Выдается звук периодом TONE и длиной LENGTH периодов.
3.4.27. Установка графического окна .BSWIN
Макрокоманда: | .BSWIN AREA |
---|---|
Расширение: | MOV AREA,R0 JSR PC,@140214 (EMT 102) |
Производится установка границ окна для графического вывода. Аргумент AREA задает адрес области параметров. Формат области:
- .WORD MINX; левая граница по X
- .WORD MAXX; правая граница по X
- .WORD MINY; верхняя граница по Y
- .WORD MAXY; нижняя граница по Y
Если какая - либо из границ задана вне экрана, вместо нее устанавливается граница экрана.
3.4.28. Чтение графического экрана .BGWIN
Макрокоманда: | .BGWIN AREA |
---|---|
Расширение: | MOV AREA,R0 JSR PC,@140216 (EMT 103) |
По адресу, заданным параметром AREA, помещается таблица, описанная в .BSWIN.
3.4.29 Установка типа вектора .BSTYP
Макрокоманда: | .BSTYP ARG |
---|---|
Расширение: | MOV ARG,R0 JSR PC,@140222 (EMT 105) |
Производится установка типа (шаблона) для рисования графических векторов. Используется для рисования прерывистых линий. Каждый бит аргумента задает признак рисования (пропуска) двух точек, лежащих на векторе. После инициализации драйвера экрана устанавливается тип 177777 (8), задающий рисование сплошных линий. Следует учитывать, что значение типа циклически сдвигается, и поэтому рисование следующего вектора начинается не с начала шаблона, а с текущего положения.
3.4.30 Чтение типа вектора .BGTYP
Макрокоманда: | .BGTYP |
---|---|
Расширение: | JSR PC,@140224 (EMT 106) |
В R0 помещается текущий шаблон рисования векторов. Значение может быть циклически сдвинуто относительно заданного (см. .BSTYP).
3.4.31 Установка и чтение ориентации графических символов .BGOSET
Макрокоманда: | .BGOSET ARG |
---|---|
Расширение: | MOVB ARG,R0 JSR PC,@140226 (EMT 107) |
Производится установка ориентации для графического вывода символов. ARG, равный 0 означает нормальный вывод, 1 - повернутый на 180 градусов, 2 - на 90 влево, 3 - на 90 вправо; 200 - чтение ориентации графических символов (в R0 помещается код ориентации).
3.4.32 Графический вывод символа .BGOUT
Макрокоманда: | .BGOUT CHAR |
---|---|
Расширение: | MOV CHAR,R0 JSR PC,@140230 (EMT 110) |
Производится графический вывод символа, начиная с текущих графических координат в текущих режиме и ориентации текущим графическим цветом. Текущие координаты смещаются в соответствии с режимом и ориентацией для рисования следующего символа. Обрабатывается двойная ширина символов. В отличие от Алфавитно-цифрового вывода графические символы могут быть нарисованы в любой точке экрана, однако рисование производится медленнее.
3.5. Запросы драйвера магнитофона
3.5.1. Управление двигателем .BMOT
Макрокоманда: | .BMOT ARG |
---|---|
Расширение: | MOV ARG,R0 JSR PC,@140240 (EMT 114) |
При ARG=1 осуществляется включение двигателя магнитофона,при ARG=0-выключение.
3.5.2. Вызов формата БК-0010 .BMB10
Макрокоманда: | .BMB10 AREA |
---|---|
Расширение: | MOV AREA,R0 JSR PC,@140242 (EMT 115) |
Выполняется операция с магнитофоном, используется формат магнитной ленты, совместимый с БК - 0010. Параметр AREA - адрес области ОЗУ, через которую передаются параметры вызова.
Формат таблицы параметров вызова:
Смещение в байтах | |
---|---|
XXXXX CODE | 0 |
нач. адрес | 2 |
длина в байтах | 4 |
имя файла | 6 |
. . . (016 байтов) . . . | |
СТР 1 СТР 0 | 026 |
FILE ADDRESS | 030 |
FILE LENGTH | 032 |
FILE NAME | 034 |
. . . (016 байтов) . . . |
Поле ‘CODE’ (байт заполняется пользователем и содержит код операции:
- 0 - записать файл
- 1 - прочитать файл
- 2 - чтение метки файла
- 3 - фиктивное чтание файла
Аргумент “начальный адрес” задает начальный адрес области ОЗУ, из которой выводится информация в файл или начальный адрес области ОЗУ, куда производится ввод информации. Если в команде чтения указан адрес 0,информация записывается, начиная с адреса, указанного в метке файла.
Аргумент “длина” используется только в операции “запись файла”и задает длину в байтах записываемой области ОЗУ.
Аргумент “имя файла” содержит 16-байтное имя файла, с которым необходимо произвести операцию. Если в запросе чтение файла имя будет начинаться с нулевого байта, то будет загружен первый встретившийся файл.
Аргументы “СТР0” и “СТР1” задают номера страниц ОЗУ (ПЗУ), подключаемых к окнам 40000 - 100000 и 100000 - 140000 при передаче данных (задают страницы памяти буфера ввода - вывода). Отрицательные значения соответствующих байтов означают текущее распределение памяти.
Следующая 20-байтная область служит для возврата информации о текущем файле при операциях “чтение” и “фиктивное чтение” и содержит начальный адрес, длину и имя, прочитанные из метки текущего файла ленты.
При ошибочном завершении операции запрос возвращает установленный бит ‘C’ и код ошибки в байте 52:
- 1 - найден файл с именем, не совпадающим с заданным;
- 2 - ошибка контрольной суммы;
- 3 - недопустимый диапазон адресов;
- 4 - прерывание по вектору 4 или клавише ‘СТОП’.
При ошибке типа 1 магнитофон останавливается после прочитанной метки файла.
3.6. Запросы драйвера принтера
3.6.1 Инициализация драйвера принтера .BPINI
Макрокоманда: | .BPINI |
---|---|
Расширение: | JSR PC,@140260 (EMT 124) |
Осуществляется инициализация драйвера принтера, описанная в макрокоманде .BINIT.
3.6.2. Установка режима печати .BPSET
Макрокоманда: | .BPSET MODE |
---|---|
Расширение: | MOV MODE,R0 JSR PC,@140262 (EMT 125) |
Устанавливается режим печати в соответствии со словом MODE. Назначение разрядов:
- 8 - входная информация: 0 - КОИ - 8, 1 - КОИ - 7;
- 9 - выходная информация: 0 - КОИ - 8, 1 - КОИ - 7;
- 10 - 1 - КОИ - 7Н2 (при КОИ - 7 на входе).
Младший байт MODE содержит число квантов ожидания готовности принтера, один квант соответствуеь одному полному циклу (65536 раз) команды SOB.При равенстве нулю время ожидания бесконечно.
3.6.3. Чтение режима печати .BPGET
Макрокоманда: | BPGET |
---|---|
Расширение: | JSR PC,@140264 (EMT 126) |
В R0 помещается слово режима печати.
3.6.4. Вывод символа на печать .BPOUT
Макрокоманда: | .BPOUT CHAR |
---|---|
Расширение: | MOVB CHAR,R0 JSR PC,@140266 (EMT 127) |
Осуществляется вывод символа на печать. Если печать не выдает готовности больше установленного времени тайм - аута, возвращается управление с установленным битом ‘C’.
3.6.5. Определенте готовности принтера .BPRDY
Макрокоманда: | .BPRDY |
---|---|
Расширение: | JSR PC,@140270 (EMT 30) |
Если принтер готов, в R0 помещается 1$ бит ‘C’ сброшен, иначе R0 = 1, C = 1.
3.6.6. Чтение текущей позиции печати .BPPOS
Макрокоманда: | .BPPOS |
---|---|
Расширение: | JSR PC,@140272 (EMT 131) |
В R0 помещается текущая позиция печатающей головки. Пересчет при выводе символов табуляции не производится.
3.7. Запросы драйвера НГМД
Драйвер НГМД размещен в ПЗУ, находящемся в контроллере НГМД, и доступен при подключении контроллера к ЭВМ. Драйвер имеет несколько точек входа:
Адрес точки входа | Функция |
---|---|
160000 | Автоматическюя загрузка |
160002 | Загрузка с выбранного привода |
160004 | Чтение-запись по номеру блока |
160006 | Чтение-запись по номеру сектора |
160010 | Инициализация рабочей области драйвера |
160012 | Форматирование дорожки |
Для работы драйвера необходима область ОЗУ размером 66 байт для размещения параметров и рабочих ячеек.
Формат рабочей области:
───────┬──────┬──────────────────────┬───────────────────────────────────────── Смеще- │Длина │Симво- Начальное │ Назначение ние от │(байт)│личе- значение │ начала │ │ское │ области│ │имя │ │ │ │ 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 |
---|
Из монитора загрузка производится командой <N>B, где <N> — номер выбранного привода. Действие аналогично предыдущему пункту, однако чтение начинается сразу с выбранного привода и при неудаче попыток загрузиться с других приводов не производится.
3.7.3. Чтение-запись логического блока
Вызов: | JSR РС,@#160004 |
---|
Входные параметры:
- RO — номер блока на диске,
- R1 — длина пересылаемого массива данных,
- R2 — начальный адрес массива данных,
- R3 — базовый адрес рабочей области драйвера,
- поле UNIT в рабочей области — номер привода.
Блок является логической единицей информации на внешних носителях и равен 512 байтам. В основном используемом формате записи на диск размер блока совпадает с размером сектора. Первый сектор нижней стороны нулевой дорожки соответствует блоку 0. Вычисление номера сектора и дорожки по номеру блока производится с учетом установленных признаков в таблице FLGTAB. Алгоритм этого вычисления совпадает с алгоритмом драйвера MY для микроЭВМ серии ДВК.
Длина массива данных задает количество двухбайтных слов, подлежащих пересылке, а также тип операции: положительное число — чтение, отрицательное — запись. При записи пересылаемое количество слов равно абсолютному значению длины. Если заданное количество превышает размер сектора, осуществляется автоматический переход к следующему сектору, а если необходимо, то и на другую сторону, и дорожку. Если при записи число слов не кратно размеру сектора, то остаток последнего сектора заполняется нулями.
Перед самым первым вызовом драйвера поля CSRW, TRKTAB, FLAGS в рабочей области должны быть заполнены значениями, указанными в таблице, и не должны изменяться программой пользователя. Поля TDOWN, TSTEP, TRKCOR, BRETRY, FLGTAB рекомендуется заполнять значениями, указанными в таблице, однако они могут быть изменены в зависимости от конкретных условий.
Возврат из драйвера осуществляется командой RTS PC.
Содержимое регистров процессора R0, R1, R2, R4, R5 не сохраняется.
При возникновении ошибки бит ‘C’в слове состояния процессора устанавливается в 1 и в байт с абсолютным адресом 52 помещается код ошибки:
- 1 — при чтении - ошибка CRC в зоне данных, при записи - установлена защита записи;
- 2 — ошибка CRC в зоне заголовка сектора
- 3 — нет позиционирования на 0 дорожку
- 4 — ошибка позиционирования
- 5 — не найден сектор
- 6 — нет диска или диск не вращается
- 7 — прерывание по вектору 4 при операции
- 010 — не найден адресный маркер
- 011 — не найден маркер данных
- 012 — недопустимые параметры команды или нестандартный формат диска.
После завершения операции драйвер оставляет двигатель дисковода включенным. Для остановки двигателя программа пользователя должна записать 0P по адресу 177130, а также в ячейку CSRW р
3.7.4. Чтение-запись по номеру сектора и дорожки
Вызов: | JSR PC,@#160006 |
---|
Входные параметры: R3 - адрес рабочей области
Поля рабочей области:
ADDR | начальный адрес массива данных |
WCNT | длина массива данных |
SIDE | номер стороны (0 - нижняя, 1 - верхняя) |
TRK | номер дорожки |
UNIT | номер привода (0..3) |
SECTOR | номер сектора (1...12(8)) |
Действие аналогично предыдущему пункту.
3.7.5. Инициализация рабочей области
Эта точка входа является вспомогательной и служит для облегчения написания программ, использующих драйвер НГМД.
Вызов: | JSR PC,@#160010 |
---|
Входной параметр: R3 - базовый адрес рабочей области.
Действие: заполняются следующие поля рабочей области:
CSRW | 0 |
TRKTAB | 177777, 177777 |
TDOWN | 10000(10) |
TSTEP | 10000(10) |
TRKCOR | 60(10) |
BRETRY | 30(10) |
FLAGS | 0 |
FLGTAB | 0,0 |
3.7.6. Форматирование дорожки
Вызов: | JSR PC,@160012 |
---|
Входные параметры:
R3 | базовый адрес рабочей области |
FILLB | код, которым будет заполнено поле данных сектора при форматировании |
SIDE | номер стороны |
TRK | номер дорожки |
UNIT | номер привода |
Действие: форматируется указанная дорожка с указанной стороны, поле данных всех секторов заполняется кодом FILLB.
Приложения
Приложение 1: кодировка клавиш БК-0011
Управляющие клавиши
┌───────────────────────────────┬───────────────────────┬───────────────────┐ │ │ ПРЯМОЙ РЕЖИМ │ ПЕРЕКОДИРОВКА │ │ КЛАВИША ├────────────────┬──────┼─────────┬─────────┤ │ │ │ АР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─────────────┘