Орион-128/Радио 02-90/Программное обеспечение

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

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

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

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

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНОГО РАДИОЛЮБИТЕЛЬСКОГО КОМПЬЮТЕРА «ОРИОН −128»

По структуре программное обеспечение радиолюбительского компьютера (РК) «Орион-128» аналогично «Микро-80» и «Радио-86РК». Отличительная особенность компьютера — двухстраничная система построения памяти в базовом варианте и четырехстраничная — в расширенном.

Рассмотрим структуру основной — 0 страницы памяти. Как видно из рис. 1, в самых старших адресах памяти располагается управляющая программа МОНИТОР. Он занимает адресное пространство 0F800 — 0FFFFH и размещен в ПЗУ.

Область ОЗУ с адресами 0F400 — 0F7FFH отведена под дешифрацию портов ввода-вывода, так как микропроцессор адресуется к портам ввода-вывода как к ячейкам памяти. ТАБЛИЦА АДРЕСАЦИИ ПОРТОВ ВВОДА-ВЫВОДА

0F400H — порт клавиатуры
0F500H — порт пользователя № 1
0F600H — порт пользователя № 2
0F700H — порт платы расширения
0F800H — системный порт № 1 (только для записи)
0F900H — ” № 2 ( ” )
0FA00H — ” № 3 ( ” )
0FB00H — ” № 4 ( ” )

Область с адресами 0F000 — 0F3FFH (1 Кбайт) используется как служебное ОЗУ, здесь размещаются служебные ячейки и рабочий стек МОНИТОРА (0F3C0 — 0F3FFH). Адреса 0F000H — 0F2FFH занимает знакогенератор, который разворачивается при инициализации МОНИТОРа.

Далее размещается ОЗУ дисплея. Оно занимает адресное пространство 0С000 — 0EFFFH, то есть 12 Кбайт или 384X256 точек разложения. Остальные 48 Кбайт памяти отведены пользователю.

В дополнительных страницах верхние (0F000 — 0FFFFH) 4 Кбайта ОЗУ не используются и пользователю недоступны. При переключении страниц эта область памяти не переключается, что позволяет иметь доступ к МОНИТОРу и служебной области ОЗУ из любой страницы.

В дополнительной странице памяти — 1 находится область ОЗУ, содержащая информацию о цвете экрана дисплея. Она занимает, как и ОЗУ экрана, тоже 12 Кбайт. Такой принцип распределения атрибутов цвета изображения позволяет не уменьшать разрешающую способность экрана при переходе в цветной режим отображения информации, а также имитировать спрайтовую структуру. Остальные 48 Кбайт ОЗУ дополнительной страницы могут быть использованы, к примеру, как «квазидиск». Следует заметить, что если цветной режим дисплея отключен, то в дополнительной странице пользователю отводятся все 60 Кбайт памяти.

По адресам 0F800H — 0FB00H находятся системные порты. Рассмотрим их структуру более подробно. Системные порты доступны только для записи.

Системный порт1 (адрес 0F800H), — управление цветным режимом.

D0 0 — палитра №1 1 — палитра №2
D1 0 — режим 1 —16 цветов 1 — режим 2 — 4 цвета
D2 0 — монохромный режим 1 — цветной режим 

Бит D2 — монохромный режим На цветном мониторе информация отображается зеленым цветом на черном фоне, если включена палитра № 1, и желтым на голубом фоне — палитра № 2. Бит D1 — режим 1 (D1 —0) — 16 цветов (групповое кодирование). В этом режиме на восемь смежных точек изображения выделяется общий байт управления цветом, который размещается в дополнительной странице памяти I — при этом возможно отображение 16 цветов изображения и 16 цветов фона в режиме 2 (D1=1) каждому элементу отображения (пикселю) можно присвоить 4 цвета в одной из двух палитр. Бит D0 — палитра 1 (D=0), палитра 2 (D=1) (только в 4-цветном режиме). Перечислим все возможные комбинации состояний системного порта 1.

00 — монохромный режим, палитра 1 (зеленый/черный) 
01 — ---------------//----------- палитра 2 (желтый/голубой) 
02 — гашение изображения 
03 — ----------------//------------------- 
04 — 4-цветный режим, палитра 1
05 — -----------//----------- палитра 2
06 — 16-цветный режим 
07 — ----------------//----------------

Следует помнить, что если в дополнительной странице по адресу 0С000 — 0EFFFH находится информация, то она будет потеряна при включении цветного (тем более цветного многоэкранного) режима дисплея.

Системный порт 2 (адрес 0F900H) — управление переключением страниц памяти.

D1 D0 
 0  0 — основная страница “0” 
 0  1 — дополнительная страница “1”
 1  0 — дополнительная страница “2”
 1  1 — дополнительная страница “3” 

В базовой версии компьютера страницы 2 и 3 отсутствуют, поэтому значения «10» и «11» использовать не следует.

Системный порт 3 (адрес 0FA00H) — управление переключением экранов.

При включении компьютера программа МОНИТОР всегда инициализирует экран из страницы памяти 1, который размещается в ОЗУ по адресам 0С000 — 0EFFFH. Однако пользователь, изменяя значение системного порта 3, а также начальный адрес экрана в служебной ячейке, может создать еще три области экрана:

8000—AFFFH — экран 2
4000—6FFFH — экран 3
0000—2FFFH — экран 4 

D1 D0 
 0  0 - экран №1 
 0  1 - экран №2
 1  0 - экран №3
 1  1 - экран №4

Промежутки, не заполненные экранными областями 3000 — 3FFFH, 7000 — 7FFFH, ОВООО—OBFFFH, могут быть использованы для размещения программ пользователя. Многоэкранный режим включения возможен как в монохромном, так и в любом цветном режиме.

Системный порт 4 (адрес 0НВ00Н) — переключение типов дисплея: графический или символьный (аппаратного исполнения) — в базовом варианте РК «Орион-128» — не используется.

При «холодном» запуске МОНИТОРа или нажатии на кнопку «Сброс» в системные порты записывается значение — ООН, таким образом устанавливается следующий режим: монохромное отображение информации, включена нулевая (основная) страница памяти и инициализирован экран 1.

МОНИТОР

После включения питания и нажатия кнопки «Сброс» управление передается программе МОНИТОР. МОНИТОР — единственная резидентная программа, записанная в ПЗУ и занимающая 2 Кбайта. Коды программы приведены в табл.2. Она инициализирует программируемые БИС портов, обеспечивает работу клавиатуры, дисплея, контролирует ввод-вывод информации на внешний накопитель — магнитную ленту.

В МОНИТОРе находится и специально упакованный знакогенератор, который при пуске МОНИТОРа распаковывается и размещается в области служебного ОЗУ по адресам OFOOO — OF2FFH. Наличие загружаемого знакогенератора позволяет производить его замену, в том числе и национальные наборы символов, а также одновременно работать с несколькими знакогенераторами.

ДИРЕКТИВЫ МОНИТОРА

МОНИТОР поддерживает упрощенный диалог с пользователем, который вводит с клавиатуры директивы и считывает с экрана дисплея результат их выполнения.

После запуска МОНИТОРа экран телевизора очищается, в левом верхнем углу появляется надпись «Орион-128», а под ней — стрелка «=>», сообщающая о том, что МОНИТОР находится в управляющем режиме и готов к вводу директив. Директивы МОНИТОРа однобуквенные и состоят из латинского символа и одного-двух параметров, представляющих собой шестнадцатиричные числа. Параметры между собой разделяются запятой. Неверно набранные символы исправляются нажатием клавиши «<-” (“курсор назад”). При этом символ, под которым находится курсор, можно исправить повторным вводом. Клавишей “—>» курсор можно вернуть в прежнее положение и продолжать ввод. Выполнение директивы начинается после нажатия на клавишу (ВК). Если директива и параметры заданы правильно, то начинается ее выполнение, если нет, на экран выводится знак вопроса. Это признак ошибочного ввода директивы или некорректного ввода параметров.

МОНИТОР выполняет семь директив — директивы просмотра и модификации ячеек памяти, передачи управления программам пользователя, записи — чтения информации на магнитную ленту, включение цветного режима дисплея. Ниже перечислены все директивы и форматы их ввода.

D(НАЧ.АДР.),(НОМЕР СТР.)(ВК) — ВЫВОД ДАМПА ПАМЯТИ
М(АДРЕС)(ВК) — МОДИФИКАЦИЯ ЯЧЕЕК ОЗУ
G(АДРЕС)(ВК) — ПЕРЕДАЧА УПРАВЛЕНИЯ ПО АДРЕСУ
Z(BK) — ПЕРЕДАЧА УПРАВЛЕ НИЯ ПО АДРЕСУ 0BFFDH
О(НАЧ.АДРЕС),(КОНЕЧ. АДР.)(ВК) — ВЫВОД НА МАГНИТОФОН
I(ВК) — ВВОД С МАГНИТОФОНА
С(БАЙТ ЦВЕТА)(ВК) — ВКЛЮЧЕНИЕ ЦВЕТНОГО РЕЖИМА ДИСПЛЕЯ.

Рассмотрим подробнее особенности работы директив МОНИТОРа.

Директива «D» — выводит на экран дисплея содержимое памяти в шестнадцатиричном формате. Для работы директивы достаточно вводить только начальный адрес. После нажатия клавиши ВК на экран выводится блок памяти длиной в 256 байт, после чего МОНИТОР входит в режим ожидания. Повторное нажатие клавиши ВК выводит очередную «порцию дампа». Нажатие клавиши (точка) прерывает работу директивы. Если через запятую после адреса ввести номер страницы (1—3), то на экран дисплея будет выведено содержимое соответствующей страницы памяти в шестнадцатиричном виде. Нулевые значения параметров и незначащие нули можно опускать.

Директива «М» — предназначена для просмотра и изменения содержимого одной или нескольких ячеек памяти. После ее ввода на экране высвечивается адрес ячейки и ее содержимое. Если необходимо изменить содержимое ячейки, набирают новое значение и нажимают клавишу ВК, если изменений не требуется, ее нажимают сразу же. При каждом нажатии на клавишу ВК значение адреса автоматически увеличивается на единицу. Нажатие клавиши «.» (точка) прерывает работу директивы.

Директива «G» — передает управление программе пользователя по заданному адресу. Предварительная установка регистров процессора не производится. Так, например, директива "G(BK)>> — запускает программу по адресу ООООН.

Директива «Z» — это модификация директивы «G». Однако для ее выполнения не требуется вводить адрес перехода. Управление передается всегда по одному и тому же адресу — OBFFDH. Эта директива введена для удобства работы с программами, которые размещаются под «потолком» ОЗУ пользователя, то есть в верхних адресах памяти. В таких программах (в конце) по адресу OBFFDH должна находиться команда безусловного перехода (JMP) на начало программы. При этом размер программы не будет влиять на стартовый адрес, а значит, все подобные программы можно запускать по одному стандартному адресу — OBFFDH.

Директива «О» — вывод массива информации, находящейся в ОЗУ, на магнитную ленту. Формат записи полностью совместим с компьютером «Ра-дио-86РК». Скорость вывода — 1200 БОД, изменить ее можно только заменой константы в служебных ячейках МОНИТОРа директивой «М».

Директива «I» — чтение информации с магнитной ленты и размещение ее в ОЗУ. После считывания массива на экран дисплея выводится начальный и конечный адреса, а также его контрольная сумма. Появление на экране рядом с контрольной суммой символа «?» (знак вопроса) говорит о том, что считывание произошло с ошибкой. Если не совпадает формат, скорость или не произошло опознание файла — выводится только «?». Досрочный вывод (то есть до окончания считывания программы) символа «?» указывает на дефекты записи (пропадание сигнала).

Директива «С» — предназначена для настройки экрана дисплея на отображение информации в цвете. Директива позволяет произвести проверку вывода информации в цветном (16-цветном) режиме на цветной дисплей (телевизор). Основное назначение директивы — проверить правильность подключения цветного дисплея и его настройку. Директива, согласно кода цвета, включает цветной режим и очищает область ОЗУ цвета в дополнительной странице памяти 1. После выполнения директивы «С» МОНИТОР и все другие программы пользователя будут выводить информацию на экран дисплея в том цветовом решении (цвет фона и отображения символов), которое было задано в параметре директивы.

Код цвета состоит из двух шестнадцатиричных символов от 0 до F. Первый символ указывает на цвет фона, второй — изображения. После ввода кода директивы, двух символов цвета нажимают клавишу (ВК). Если, например, ввести «C++В1+ВК», то дальнейший вывод информации будет происходить в следующем цветовом решении: бирюзовые символы на синем фоне (см. таблицу кодов).

Следует заметить, что программный драйвер обработки экрана дисплея в МОНИТОРе не поддерживает управление цветом, и это должна выполнять программа пользователя. Коды цветов

0 — черный 
1 — синий
2 — зеленый
3 — бирюзовый
4 — красный
5 — пурпурный
6 — коричневый
7 — светло-серый
8 — черный
9 — голубой
А — светло-зеленый
В — светло-бирюзовый
С — розовый
D — светло-пурпурный
Е — желтый
F — белый 

ТАБЛИЦА СТАНДАРТНЫХ ПОДПРОГРАММ ВВОДА-ВЫВОДА

МОНИТОР содержит набор стандартных подпрограмм (табл. 1, 2 и 3), к которым программа пользователя может обращаться, соблюдая соглашение об обмене информацией. Набор подпрограмм в основном такой же, как в «Микро-80» и «Радио-86РК», однако несколько расширен и изменен. Эти отличия связаны с архитектурными особенностями ПРК «Орион-128» и различием в организации отображения на экране дисплея. Несмотря на это большинство программ, разработанных для названных ПК, будут работоспособны и на «Орионе-128».


В табл.1 символом «*» помечены те входы подпрограмм ввода-вывода, которые имеют существенное отличие или являются совершенно новыми по отношению к «Радио-86РК». Рассмотрим их.

НАЗНАЧЕНИЕ ПОДПРОГРАММ АДРЕС ВЫЗОВА

ПАРАМЕТРЫ

1

ВВОД C СИМВОЛА С КЛАВИАТУРЫ

0F803H
−2045

ВЫХ: А — ВВЕДЕННЫЙ СИМВОЛ

2

ВВОД БАЙТА С МАГНИТОФОНА

0F806H
−2042
ВХ.: А=0FFH — С ПОИСКОМ СИНХРОБАИТА


А=08Н — БЕЗ ПОИСКА

3

ВЫВОД СИМВОЛА НА ЭКРАН

0F809H
−2039

ВХ.: С — ВЫВОДИМЫЙ СИМВОЛ

4

ЗАПИСЬ БАЙТА НА МАГНИТОФОН

0F80CH
−2036

ВХ.: С — ЗАПИСЫВАЕМЫЙ БАЙТ

5*

ВЫВОД СИМВОЛА НА ЭКРАН

0F80FH
−2033

ВХ.: А — ВЫВОДИМЫЙ СИМВОЛ

6

ОПРОС СОСТОЯНИЯ КЛАВИАТУРЫ

0F812H
−203И
ВЫХ.: А=00Н — НЕ НАЖАТА
А=0FFH — НАЖАТА

7

ВЫВОД БАЙТА НА ЭКРАН В НЕХ-КОДЕ

0FS15H
−2027

ВХ.: А — ВЫВОДИМЫЙ СИМВОЛ

8

ВЫВОД НА ЭКРАН СООБЩЕНИИ

0F81BH
−2В24
ВХ.: HL- — АДРЕС НАЧАЛА КОНЕЧНЫЙ БАЙТ — 00Н

9

ВВОД КОДА НАЖАТОЙ КЛАВИШИ (INKEY)

0F81BH
−2021
ВЫХ: А=0FFH — НЕ НАЖАТА
А=0FEH — РУС/ЛАТ ИНАЧЕ — КОД КЛАВИШИ

10

ЗАПРОС ПОЛОЖЕНИЯ КУРСОРА

0F81EH
−2018
ВЫХ: Н — НОМЕР СТРОКИ — Y a
L — НОМЕР ПОЗИЦИИ — X

11

НЕ ИСПОЛЬЗУЕТСЯ

0F821H
−2015

 

12*

ЧТЕНИЕ ФАЙЛА ИЗ МАГ. ЛЕНТЫ

0F824H
−2012
МАССИВ РАЗМЕШ.ПО АДРЕСАМ ЗАП. НА МАГНИТНОЙ ЛЕНТЕ

13*

ЗАПИСЬ ФАЙЛА НА МАГ. ЛЕНТУ

0F827H
−2009
ВХ.: HL- НАЧ. АДРЕС МАССИВА в
DE- КОНЕЧ. АДРЕС

14

ПОДСЧЕТ КОНТРОЛЬНОЙ СУММЫ БЛОКА

0FB2AH
−2006
ВХ.: HL — АДРЕС НАЧАЛА Е DE — АДРЕС КОНЦА

ВЫХ:

ВС — КОНТРОЛЬНАЯ СУММА

15*

РАСПАКОВКА ВНУТРЕННЕГО ЗНАКОГЕНЕРАТОРА

0F82DH
−2003

 

16

ЧТЕНИЕ КОНЕЧНОГО АДРЕСА ОЗУ ПОЛЬЗОВАТ.

0F830H
−2000

ВЫХ: HL -КОНЕЧНЫЙ АДРЕС

17

ЗАПИСЬ КОНЕЧНОГО АДРЕСА ОЗУ ПОЛЬЗОВАТ.

0F833H
−1997

EX. : HL -КОНЕЧНЫЙ АДРЕС

18*

ЧТЕНИЕ БАЙТА ИЗ ДОП. СТРАН.

0F836H
−1994
BX.: HL-АДРЕСА — N СТРАНИЦЫ (0-3)


ВЫХ: С — СЧИТАННЫЙ БАЙТ

19*

ЗАПИСЬ БАЙТАВ ДОП. СТРАНИЦУ 0F839H
−1991
BX.: HL — АДРЕСА — N

СТРАНИЦЫ (0-3)

C — ЗАПИСЫВАЕМЫЙ БАЙТ

20*

УСТАНОВКА КУРСОРА

0F83CH
−1988
ВХ. Н — НОМЕР СТРОКИ — Y
L — НОМЕР ПОЗИЦИИ — X

21*

РЕЗЕРВ

0F83FH
−1988

 

080FH — вывод символа, содержащегося в аккумуляторе, на дисплей. Значение всех регистров сохраняется.

0F824H — чтение файла программы с магнитной ленты. Подпрограмма должна вызываться только при наличии сигнала фонограммы с магнитофона на входе компаратора. В противном случае произойдет программное прерывание и управление будет передано по адресу, хранящемуся в ячейках OF3D6, OF3D7H, то есть на «теплый старт» МОНИТОРа.

0F827H — запись файла на магнитную ленту. Перед вызовом подпрограммы необходимо в регистровую пару «HL» занести начальный адрес, а в регистры «DE» — конечный адрес того участка памяти, который необходимо сохранить на ленте.

0F82DH — распаковка и размещение внутреннего знакогенератора в области служебного ОЗУ. Обращение к этой подпрограмме (без входных параметров) позволяет восстановить знакогенератор.

0F836H — чтение байта из дополнительной страницы. Адрес ячейки заносится в регистры «HL». В регистр «А» — номер страницы, откуда происходит чтение. После выполнения подпрограммы в регистре «С» будет содержаться считанный байт.

0F839H — запись байта в дополнительную страницу памяти. Регистры «HL» и «А» имеют такое же назначение, что и в предыдущей подпрограмме, а в регистр «С» заносится байт, который должен быть записан в дополнительную страницу памяти.

0F83CH — установка курсора в заданное знакоместо на экране дисплея. В регистр «Н» заносится значение номера строки (0—18Н), регистр «L» — номер позиции (0— 3FH).


Таблица 3. 
F800 - F8FF 48А8
F900 - F9FF 0В2В
FA00 - FAFF С5ЕЗ
FB00 - FBFF 91СЗ
FC00 - FCFF 92В2 
FD00 - FDFF 0243
FE00 - FEFF 8575 
FFB0 - FFFF С680
F800 - FFFF 5В63

СЛУЖЕБНЫЕ ЯЧЕЙКИ МОНИТОРА

Для своей работы МОНИТОР использует незначительный объем памяти. В этой области размещаются рабочие ячейки МОНИТОРа и константы. К основным рабочим (служебным) ячейкам имеется доступ через стандартную таблицу ввода-вывода, размещенную в начальных адресах МОНИТОРа. Назначение остальных ячеек, представляющих интерес для пользователя, приведен ниже.

0F3D1H — ячейка, в которой хранится начальный адрес знакогенератора. При инициализации МОНИТОР записывает в эту ячейку значение — 0F000H. При необходимости пользователь может указать свой адрес, по которому размещен другой знакогенератор. При этом, однако, следует помнить, что драйвер дисплея символы с кодом 00—1FH на экран не выводит и в знакогенераторе для них место не выделяется. Таким образом, знакогенератор всегда начинается с кода 20Н, то есть «пробела».

0F3D3H — ячейка, хранящая признак прямого (00Н) вывода (светлые символы на темном фоне) или инверсного (0FFH) вывода (темные символы на светлом фоне). В цветном режиме цвета изображения и фона меняются местами.

0F3D8H — ячейка, содержащая адрес возврата из подпрограммы чтения байта (OF806H) при «зависании» или выпадании сигнала. МОНИТОР заносит в эту ячейку адрес «теплого старта». Программа пользователя должна заносить в эту ячейку свой адрес возврата, в противном случае при невозможности чтения байта программа осуществит возврат в МОНИТОР.

0F3DAH — ячейка, в которой хранится константа записи на магнитную ленту. Для скорости 1200 бод. Она имеет значение 40Н.

0F3DBH — ячейка, хранящая константу чтения с магнитной ленты. Для стандартной скорости — 60Н.

Следует заметить, что высокая тактовая частота процессора позволяет уменьшить значение констант и значительно повысить плотность записи на магнитной ленте. Однако увлекаться этим не стоит, так как качество отечественной ленты и лентопротяжных механизмов не позволяет гарантировать надежность чтения программ при более высоких плотностях записи.

В. Сугоняко, В. САФРОНОВ, К. КОНЕНКОВ

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

Отсканировано с журнала Радио № 2 1990 г. Отредактировано Лесных. Ю. 2001 г.

ВНИМАНИЮ ЧИТАТЕЛЕЙ

В статье А. Долгого «Контроллер последовательного интерфейса» («Радио», 1989, № 6) при подготовке материала к публикации допущены следующие ошибки:

  • на рис. 1 неправильно обозначены номера выводов микросхемы DD1. Должно быть: OUT1-13, OUT2-17. Сигнал CS ошибочно назван SC;
  • перепутаны местами рис. 3 и рис. 4.
  • на рис. 5 (вид со стороны установки деталей) контактная площадка, находящаяся слева от левого * вывода резистора R2, ошибочно соединена с цепью контакта 12 разъема. Она должна быть соединена только с контактом 11 разъема платы.
  • на рис. 5 (вид со стороны пайки) отсутствует соединение вывода 10 микросхемы DD1 с находящейся левее него контактной площадкой.

В статье Д. Лукьянова "RAMDOS для «Радио-86РК» («Радио», 1989, № 9) в таблице BITMAP по адресу 0262Н должен быть занесен код 01.

В принципиальную схему ПРК «Орион-128» («Радио», 1990, № 1) необходимо внести следующие изменения:

  • выводы 10, 12, 123 элемента DD12.1 и соединенные с ними выводы 1, 2, 4 элемента DD12.2 через резистор сопротивлением 1кОм должны быть подключены к источнику питания +5В.
  • выход процессора (DD19) SNY имеет порядковый номер вывода 19, а вывод 17 соответствует сигналу RD.
  • вход элемента DD15.6 — вывод 13, выход — 12, элемента DD15.1 соответственно 1 и 2.
  • резистор R24 входит в жгут под номером 416, а конденсатор С10 — под номером 472.
  • вывод В9 (сигнал «Сброс») разъема Х4 входит в жгут под номером 116.