Основной монитор.Описание компьютера Орион-128Журнал РАДИО

ОСНОВНОЙ МОНИТОР для ПРК “ОРИОН-128”
В предыдущих статьях мы неоднократно подчеркивали, что программа МОНИТОР[1] 
(назовем ее МОНИТОР-1) предназначена, практически, только для отладочных целей 
при построении компьютера, а также первых (ознакомительных) шагов в его 
освоении. Мы надеемся, что этот этап у читателя закончился благополучно и 
предлагаем теперь заменить программу МОНИТОР, записанную в ППЗУ (DD22) на 
основной МОНИТОР (МОНИТОР-2), коды которого приведены в табл.1, а контрольные 
суммы блоков - в табл.2.
Таблица 2. 
  0000 - 00FF E853
  0100 - 01FF C72E
  0200 - 02FF 48CF
  0300 - 03FF FB9B
  0400 - 04FF 1A93
  0500 - 05FF 0885
  0600 - 06FF D9BE
  0700 - 07FF C6F3 
Необходимость такого “ступенчатого” освоения компьютера продиктована тем, что 
МОНИТОР-2 не имеет в своем составе никаких средств, позволяющих хотя бы 
приблизительно определить неисправность компьютера. На начальном этапе отладки и 
освоения компьютера действительно были необходимы такие операции, как просмотр и 
модификация ячеек памяти, возможность ручного переключения экранных режимов 
дисплея, проверка правильного функционирования клавиатуры, проверка канала 
чтения/записи на магнитофон. Именно для этих целей и был разработан МОНИТОР-1, 
хотя с самого начала подразумевалось, что диалог пользователь-компьютер должен 
осуществлять не МОНИТОР, а операционная система (ОС). МОНИТОР же при этом должен 
представлять собой набор драйверов, обслуживающих аппаратную часть и иметь 
загрузчик первоначального (“холодного”) запуска операционной системы при 
включении компьютера. Естественно, что совмещение в одном двухкилобайтном ППЗУ 
функций управления и набора системных драйверов (и к тому же еще 
знакогенератора) невозможно без значительного упрощения “МОНИТОРА”.
Теперь же наступило время разделить эти функции так, как это делается в 
большинстве современных систем: основное ППЗУ будет выполнять функции мощного 
драйвера аппаратных средств, а диалог с пользователем станет поддерживать 
операционная система. На низовом уровне это ОС ORDOS. Она предназначена как для 
профессионалов, так и для начинающих пользователей - тех, кто только входит в 
мир операционных систем.
В среде ORDOS возможно решение широкого круга прикладных задач в без дисковом 
варианте ПРК “Орион-128”.
На более высоком уровне - ОС СР/М-80. Эта операционная система может быть 
адаптирована в двух вариантах: с использованием в качестве внешней памяти 
внутреннего квазидиска (второй страницы памяти) или накопителя на гибких 
магнитных дисках, правда, во втором случае необходимо еще дополнительное 
устройство - плата контроллера дисковода.
Во всех случаях при работе с ОС (независимо от уровня) “МОНИТОР” должен 
выполнять роль (или же дополнять) BIOS (базовая система ввода-вывода), а также 
содержать первоначальный (“холодный”) загрузчик операционной системы или другой 
программы, поддерживающей диалог с пользователем.
МОНИТОР-2 занимает в ПЗУ 2 Кбайта и устанавливается в ПРК вместо МОНИТОРА-1. При 
включении компьютера или нажатии кнопки “СБРОС” МОНИТОР-2 производит 
инициализацию портов, служебных ячеек, распаковку знакогенератора и другие 
служебные операции, а затем проверяет, подключен ли ROM-диск к порту 0F500H 
(ХЗ). Если он не подключен, то экран дисплея очищается и в его верхнем левом 
углу выводится сообщение - “ввод?”, свидетельствующее о том, что МОНИТОР-2 готов 
к вводу программы с магнитной ленты. Считанная информация размещается по 
адресам, записанным на магнитной ленте. Если контрольная сумма совпадает, то 
управление передается в начальный адрес считанной программы, т. е. производится 
ее самозапуск. При обнаружении ошибки считывания - сообщение “ввод?” выводится 
повторно: - МОНИТОР готов к повторному вводу.
На программном уровне МОНИТОР-2 полностью совместим (снизу вверх) с программой 
МОНИТОР-1, т. е. все программы, рассчитанные на работу с МОНИТОРОМ-1, будут 
работать и с МОНИТОРОМ-2, но не наоборот. Разумеется, это справедливо только в 
том случае, если программы пользователя обращаются корректно к стандартным 
подпрограммам через таблицу, расположенную в начальных адресах монитора, а также 
используют служебные ячейки) объявленные авторами в [1]. Добавим, что программы, 
которые мы предполагаем публиковать впредь будут, в основном, работать при 
наличии МОНИТОРА-2. Это вызвано тем, что МОНИТОР-1 (из-за упрощений) не может 
обеспечить их функционирование. О том, что программа может работать только с 
одним монитором, мы будем предупреждать читателя.
Таблица входов в стандартные подпрограммы нового МОНИТОРА почти полностью 
совпадает с той, что приведена в [1], поэтому нет необходимости приводить ее 
полностью. Расскажем только о дополнениях и изменениях.
Так как загрузчики ОС содержат свои необходимые драйверы для записи файлов на 
магнитную ленту, из таблицы исключена функция по адресу 0F827H - “запись файла 
(массива) на магнитофон” и вход заблокирован командой RET.
Вход 0F821H (ранее не использовался) определен как универсальный, программно 
переключаемый вход в программы-драйверы пользователя. В исходном состоянии 
заблокирован командой RET. Использовать этот вход можно для работы с драйвером 
печатающего устройства, однако этим его применение не ограничивается. В 
дальнейшем мы расскажем, как пользоваться переключаемыми входами.
Дополнительно появился новый вход: 0F83FH - подпрограмма генерирования звукового 
сигнала. Эта подпрограмма не имеет входных параметров и формирует звуковой 
сигнал постоянной длительности. “Высоту” сигнала можно изменять, если его 
значение записывать в служебную ячейку по адресу 0F3E7H.
Особенностью построения таблицы МОНИТОРА-2 является возможность подмены 
некоторых внутренних драйверов периферийных устройств внешними. Такое 
переключение можно производить с помощью программных переключателей. Для 
переключения доступны драйверы клавиатуры (OF803H), дисплея (OF809H), 
формирователя звукового сигнала (0F83FH) и универсальный вход в 
программы-драйверы пользователя (0F821H).
Пользователь может написать свой драйвер для обслуживания выше перечисленных 
устройств и переключить на пего управление, при этом вход в программу будет 
оставаться прежним, стандартным. Такое переключение на “подставной” драйвер 
осуществляется занесением адреса входа нового драйвера в специальную 
ячейку-ключ. Адреса ячеек-ключей для выше означенных драйверов следующие: 
  клавиатура - 0F3C7-0F3C8H, 
  дисплей - 0F3CD-0F3CEH, 
  формирователь звукового сигнала - 0F3C4-0F3C5H, 
  универсальный вход - 0F3CA-0F3CBH. 
Приведем примеры. Допустим, вы написали свой драйвер дисплея, который выполняет 
другие функции, чем имеющиеся в МОНИТОРЕ-2. Желательно такой драйвер (как и все 
сменные драйверы) разместить в области 0А800Н - 0AFFFH. Это исключит возможные 
конфликты с загружаемыми командами операционной системой. Чтобы к этому драйверу 
можно было обращаться из программ пользователя по стандартному адресу - 0F809H, 
необходимо адрес входа в ваш драйвер занести в ячейки 0F3CD-0F3CEH. Естественно, 
теперь по адресу 0F809H внутренний драйвер монитора уже будет недоступен, 
поэтому для такой ситуации имеется второй вход в драйвер дисплея монитора - 
0F80FH (напомним, выводимый символ находится в регистре “А”). Такой подход 
позволяет работать одновременно с двумя драйверами дисплея.
Подобным образом можно поступить и с драйвером клавиатуры, подменив его, 
например, программой, обслуживающей джойстик и формирующей коды управления 
курсором. Это позволит игровые программы, работающие с клавиатурой, перевести на 
управление джойстиком, не меняя ничего в самой программе игры. Адрес входа в 
драйвер джойстика необходимо занести в ячейки 0F3CA- 0F3CBH.
Относительно третьего драйвера мы ограничимся лишь замечанием, оставив 
придумывать варианты читателю. Внутренний драйвер формирования звука очень 
упрощен и рассчитан на обслуживание клавиатуры. Формировать с его помощью 
серьезные фонограммы нельзя, поэтому и предусмотрена возможность его подмены.
Что касается универсального входа в программы-драйверы пользователя, то он не 
имеет специального определения в назначении и используется для служебных целей в 
программах, где необходимо через один вход (стандартный) обращаться к своим 
подпрограммам-драйверам. Переключение производится через ячейку-ключ. Возможен, 
например, такой вариант: вы написали драйвер вывода символа (или строки 
символов) на печатающее устройство, которым располагаете. Нет необходимости этот 
драйвер “прицеплять” к каждой прикладной программе, в том числе и к БЕЙСИКУ, 
РЕДАКТОРУ, АССЕМБЛЕРУ и другим программам. Достаточно разместить его в свободной 
области памяти (желательно 0А800- 0AFFFH) и через ячейку-ключ переключить на 
него управление. Теперь все программы будут обращаться к драйверу печати по 
одному адресу - 0F821H. Такой подход позволяет не специализировать прикладные 
программы под один тип принтера.
Вернемся к драйверу дисплея. Его функциональные возможности значительно 
расширены. Мы уже говорили о том, что драйвер дисплея игнорирует символы с 
кодами 00-1FH, вернее интерпретирует их как пробел. Исключение составляют коды 
управления работой дисплея:
  08Н - перемещение курсора на одну позицию влево. 
  09Н - горизонтальная табуляция. Установка курсора в ближайшую позицию в 
  строке, кратную четырем. 
  0АН - перемещение курсора вниз на одну строку в той же позиции. Если такой 
  переход происходит в самой нижней строке, то включается режим “Скроллинг” 
  (смещение всего изображения экрана на одну строку вверх). 
  0СН - установка курсора в левый верхний угол экрана. 
  0DH - установка курсора в первую позицию строки. 
  18Н-перемещение курсора на одну позицию вправо. 
  19Н - перемещение курсора на одну позицию вверх. 
  1АН - перемещение курсора на одну позицию вниз. 
  1FH - стирание экрана, курсор установить в верхний левый угол. 
  7FH - переключение вывода символов на экран дисплея в инверсном виде (белый 
  фон, черные символы). Выключение - повторный ввод кода 7FH. 
МОНИТОР-2 имеет расширенный набор функций, вызываемых с помощью управляющего 
кода 1ВН (АР2). В программе МОНИТОР-1 эти функции отсутствуют:
  1ВН+41Н - сместить курсор на одну позицию вверх. 
  1ВН+42Н - сместить курсор на одну позицию вниз. 
  1ВН+43Н - сместить курсор на одну позицию вправо. 
  1ВН+44Н - сместить курсор на одну позицию влево. 
  1ВН+45Н - стирание экрана. 
  1ВН+48Н - установить курсор в верхний левый угол. 
  1BH+4AH - стирание экрана нг, с курсора. 
  1ВН+4ВН — стирание строки правее курсора. 
  1BH+59H+(X+20H)+(Y+20H) - установить курсор в позицию Х (номер строки - 
  0-19Н), Y (номер позиции - 0-3FH). 
Драйвер дисплея использует несколько установочных констант, которые хранятся в 
области служебных ячеек и поэтому доступных для оперативного изменения.
0F3CFH - старший байт адреса начала строки. При инициализации МОНИТОР заносит 
значение 0С0Н (0С000Н - начальный адрес области ОЗУ экрана №1 ). Если записывать 
промежуточные значения (0С0-0Е0Н), то будет происходить смещение начала строки 
вправо. Для включения экранов №2, №3 и №4 заносят (помимо соответствующего кода 
в системный порт №3) соответственно коды 80Н, 40Н, 00Н. Данная константа влияет 
на начальную позицию первого символа в строке.
0F3D0H - ширина поля, в котором производятся операции “Скроллинг” и гашение 
экрана. Исходное значение З0Н, т. е. 48 байт в строке (не символов). Программно 
сдвигая экран вправо, необходимо пропорционально укорачивать эту константу, в 
противном случае функции гашение экрана и “Скроллинг” будут “влезать” в 
служебную область МОНИТОРА (для экрана №1) - поле знакогенератора. На длину 
символьной строки данная константа не влияет.
0F3D4H - номер строки, с которой действуют функции стирания экрана, а также 
“Скроллинг”. Отсчет ведется от верхней строки. Если в ячейку занести код 05Н, к 
примеру, то верхние пять строк не будут стираться по коду 1FH (или 1ВН+45Н) и не 
попадут под действие режима “Скроллинг”. Для возврата в исходное состояние, 
необходимо восстановить начальное значение констант.
Оперируя этими константами, можно оперативно защитить часть экрана от стирания и 
“Скроллинга”, т. е. без дополнительных программных средств имитировать “окно”. 
Однако следует помнить, что изменение констант, а также переключение экранов 
требуют аккуратного и продуманного порядка действий. Драйвер дисплея не имеет 
“защиты от дурака”, и установка констант, при которых “окно” выйдет за границы 
дисплейной области ОЗУ, скорее всего приведет к выходу программы из-под 
контроля.
В заключение следует сказать, что в программе МОНИТОР-2 есть “пустые” места. Это 
сделано не случайно. Авторы предусмотрели возможность модификации МОНИТОРА под 
другие типы клавиатур, расширению функциональных возможностей драйвера ввода с 
магнитофона.
В. СУГОНЯКО, В. САФРОНОВ
Московская обл.
ЛИТЕРАТУРА
Сугоняко, В. Сафронов, К. Коненков. Персональный радиолюбительский компьютер 
“Орион-128”. Программное обеспечение. - Радио, 1990, № 2, с. 46.

Отсканировано с журнала Радио №1 1991 г.
Отредактировано Лесных Ю. 2001 г. 
      Описание компьютера Орион-128Журнал РАДИО
