Орион-128/Радио 01-91/Основной МОНИТОР

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: В. СУГОНЯКО, В. САФРОНОВ

Источник: http://www.retro.h1.ru/Orion/MainMon/MainMon.php

В предыдущих статьях мы неоднократно подчеркивали, что программа МОНИТОР[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 есть «пустые» места. Это сделано не случайно. Авторы предусмотрели возможность модификации МОНИТОРА под другие типы клавиатур, расширению функциональных возможностей драйвера ввода с магнитофона.

В. СУГОНЯКО, В. САФРОНОВ

Московская обл.

ЛИТЕРАТУРА

  1. Сугоняко, В. Сафронов, К. Коненков. Персональный радиолюбительский компьютер «Орион-128». Программное обеспечение. — Радио, 1990, № 2, с. 46.

Отсканировано с журнала Радио № 1 1991 г.

Отредактировано Лесных Ю. 2001 г.