Радио-86РК/Радио 08,09-86/Программное обеспечение

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

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

Автор: Д. ГОРШКОВ, Г. ЗЕЛЕНКО, Ю. ОЗЕРОВ, С. ПОПОВ

Источник: http://retro.h1.ru/RK86/Programm/SoftWare.php

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

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

НАЧАЛЬНАЯ ФАЗА РАБОТЫ МОНИТОРА

После включения питания и нажатия на кнопку «СБРОС» управление передается МОНИТОРУ, работа которого начинается с инициализации ППА. Все каналы ППА программируются в режим нестробируемого ввода-вывода (0). Канал А настраивается в режим вывода для выдачи сканирующих импульсов на клавиатуру, а канал В — на ввод сигналов с нее. Линии С0 — С3 канала С программируются на вывод и используются для управления светодиодом, отображающим состояние регистра РУС/ЛАТ, и блоком вывода на магнитофон, а линии С4 — С7 — в режим ввода информации о нажатии специальных клавиш и ввода сигнала с магнитофона.

Далее МОНИТОР настраивает контроллер ПДП. Для этого в его внутренние регистры заносятся адрес начала экранной области ОЗУ и количество передаваемых байтов. При передаче каждого байта в режиме ПДП значение адреса увеличивается, а содержимое счетчика байтов уменьшается на единицу. Так как контроллер всегда управляет передачей кодов символов из одной и той же области ОЗУ, устанавливается режим работы с автозагрузкой, характерный тем, что после завершения передачи всех кодов символов и контроллер дисплея происходит автоматическая перезагрузка внутренних регистров исходными параметрами, и процесс формирования телевизионного кадра начинается сначала.

Инициализация контроллера дисплея сводится к следующему: в его регистры заносится информация о формате знакоместа, экрана, курсора, а также о длительности импульсов HRTC и VRTC, Значения всех этих параметров тесно связаны между собой и зависят от частоты сигнала, подаваемого на вход CCLK контроллера, поэтому параметры настройки контроллера не могут быть выбраны произвольно. После окончания настройки контроллеров ПДП и дисплея происходит их запуск.

ВВОД ДИРЕКТИВ И АНАЛИЗ РЕЗУЛЬТАТОВ

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

Выполнение директив О, L, S может быть прервано. Для этого, удерживая клавишу «УС»,надо нажать еще и на «С»;выполнение директивы прервется, и МОНИТОР будет готов выполнять следующую.

Имена всех директив состоят из одной латинской буквы, непосредственно за которой могут следовать не более трех параметров, представляющих собой шестнадцатеричные числа, Один параметр от другого отделяют запятой. Ее ставят и в тех случаях, когда один из параметров (в том числе и первый) отсутствует.

ДИРЕКТИВЫ РАБОТЫ С ПАМЯТЬЮ

Содержимое области памяти может быть выведено на экран дисплея либо в виде шестнадцатеричных чисел (директива О), либо в виде алфавитно-цифровых символов, соответствующих этим кодам (директива L). Если при выполнении последней встретятся коды, не соответствующие ни одному алфавитно-цифровому символу, то они отобразятся в виде точек. Содержимое памяти выводится в виде таблицы из 16 колонок. Слева от каждой строки указывается шестнадцатеричный адрес первой в строке ячейки. Форматы этих и других директив приведены в табл. 5. Директива М предназначена для просмотра и изменения содержимого одной или нескольких ячеек памяти. После ее ввода на экране высвечивается адрес ячейки и ее содержимое, курсор останавливается справа от этого значения, и МОНИТОР "ожидает" ввода с клавиатуры. Если необходимо изменить содержимое ячейки, набирают новое значение и нажимают клавишу "ВК", если изменений не требуется, ее нажимают сразу же. При каждом нажатии на клавишу "ВК" значение адреса автоматически увеличивается на единицу. Выполнение директивы продолжается до тех пор, пока не будет нажата клавиша "." (точка).

Таблица 5

ДИРЕКТИВЫ МОНИТОРА
ДИРЕКТИВЫ РАБОТЫ С ПАМЯТЬЮ
D <НАЧАЛЬНЫЙ АДРЕС>,<КОНЕЧНЫЙ АДРЕC>
L < НАЧАЛЬНЫЙ АДРЕС>,<КОНЕЧНЫЙ АДРЕС>
F <НАЧАЛЬНЫЙ АДРЕС >, <КОНЕЧНЫЙ АДРЕС>, <ЗАПИСЫВАЕМЫЙ КОД>
M <АДРЕС>
T <НАЧАЛЬНЫЙ АДРЕС>, <КОНЕЧНЫЙ АДРЕС>, <АДРЕС ОБЛАСТИ ПЕРЕСЫЛКИ>
C <НАЧАЛЬНЫЙ АДРЕС>, <КОНЕЧНЫЙ АДРЕС>, <АДРЕС ОБЛАСТИ СРАВНЕНИЯ>
S <НАЧАЛЬНЫЙ АДРЕC>, <КОНЕЧНЫЙ АДРЕС>, <ИСКОМЫЙ КОД>
ДИРЕКТИВЫ ЗАПУСКА И ОТЛАДКИ
G <АДРЕС ЗАПУСКА>,<АДРЕС ОСТАНОВА>
X
ДИРЕКТИВЫ ВВОДА-ВЫВОДА
O <НАЧАЛЬНЫЙ АДРЕС >,< КОНЕЧНЫЙ АДРЕС>,/<СКОРОСТЬ>/
I <СМЕЩЕНИЕ >/,/< СКОРОСТЬ>/
ДОПОЛНИТЕЛЬНЫЕ ДИРЕКТИВЫ
R <НАЧАЛЬНЫИ АДРЕС ПЗУ>, <КОНЕЧНЫИ АДРЕС ПЗУ>, <АДРЕС ЗАГРУЗКИ>
U
(НАКЛОННЫМИ ЧЕРТАМИ ВЫДЕЛЕНЫ НЕОБЯЗАТЕЛЬНЫЕ ПАРАМЕТРЫ)

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

Директива Т предназначена для копирования (пересылки) содержимого одной области памяти в другую. Копирование осуществляется побайтно, начиная с младшего адреса.

Для сравнения двух областей памяти необходимо пользоваться директивой С. Если содержимое соответствующих ячеек памяти не совпадает, на экран выводится адрес ячейки из первой области, ее содержимое и содержимое соответствующей ячейки из второй области. МОНИТОР предоставляет пользователю возможность поиска кода в заданной области памяти (директива S). При обнаружении искомого кода на экране появляются адреса ячеек, в которых он был обнаружен.

ДИРЕКТИВЫ ЗАПУСКА И ОТЛАДКИ ПРОГРАММ

Для запуска программы служит директива G. Второй параметр этой директивы, задающий адрес останова, используется только при отладке программ и может быть опущен. Кроме того, пользователь может сам назначать в своей программе контрольные адреса останова, записав по этим адресам код команды RST6 (0F7Н). Если при выполнении программы встретится эта команда, управление будет передано МОНИТОРУ, который сообщит адрес, в котором было прервано выполнение программы, после чего пользователь может воспользоваться любыми директивами МОНИТОРА для контроля результатов работы и модификации программы.

Просмотреть и изменить содержимое внутренних регистров микропроцессора поможет директива Х (не имеющая параметров). В результате ее выполнения на экран выводятся символические имена и содержимое регистров, которое можно изменять так же, как и содержимое ячеек памяти по директиве М. Регистр признаков результата операции обозначен латинской буквой Р, обозначение других внутренних регистров микропроцессоре стандартно.

ДИРЕКТИВЫ ВВОДА-ВЫВОДА

Первые два параметра директивы вывода на магнитную ленту О задают область памяти, содержимое которой подлежит выводу, третий — шестнадцатеричный код, определяющий скорость вывода. Если скорость не указать, то будет использовано либо значение, заданное в предыдущей директиве вывода, либо стандартное — 1DH (около 1200 бит/с), записываемое (при нажатии на кнопку «СБРОС») в рабочую ячейку МОНИТОРА 03630Н (использовать константу вывода менее 10Н недопустимо!). Рекомендуем пользоваться стандартной скоростью, так как она выбрана с учетом использования магнитофона и магнитной ленты невысокого качества. Кроме того, стандартная скорость облегчит обмен программами. После завершения вывода, на экране отобразятся начальный и конечный адреса и четырехзначная контрольная сумма выведенной информации.

Ввод с ленты осуществляется по директиве I, которая может иметь два параметра. Первым параметром — необязательным — задают смещение. Если он есть, вводимая информация будет загружена по адресу, являющемуся суммой указанного в записи на ленте адреса и смещения. Второй параметр определяет временную задержку при чтении с ленты. Он также может отсутствовать, но в этом случае будет взята задержка, использовавшаяся в предыдущей команде ввода (если вы не нажимали на кнопку «СБРОС») или установленная (по умолчанию) при начальной настройке рабочих ячеек МОНИТОРА (стандартное значение, записанной по адресу 0362FH — 2АН).

После окончания ввода МОНИТОР сообщит начальный и конечный адреса загрузки и контрольную сумму, подсчитанную при вводе информации. Если она не совпадет с введенной с ленты, то на следующей строке будет выведено значение, записанное на ленте. Этот факт свидетельствует об ошибках при чтении информации с ленты.

Прервать программу ввода с магнитной ленты можно либо выключением магнитофона, либо вводом с клавиатуры кода «УС» + «С» (здесь и далее латинский регистр).

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

В табл. 5 приведены форматы еще двух директив: R — чтения информации из ПЗУ, подключаемого к ППА D14, и U — предназначеннойдля дальнейшего расширения МОНИТОРА. О них будет рассказано в одном из следующих номеров журнала.

СТАНДАРТНЫЕ ПОДПРОГРАММЫ

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

Следует заметить, что при использовании подпрограмм ввода и вывода байта на ленту возможно нарушение процесса отображения на экране телевизора, поэтому после завершения работы с этими подпрограммами рекомендуется вызвать стандартную подпрограмму запуска отображения экранного буфера. Кроме того, при написании программ с использованием подпрограмм ввода-вывода необходимо учитывать, что для надежной работы время между обращениями к этим подпрограммам должно быть около 55 мкс (100 тактов работы микропроцессора).

В набор стандартных подпрограмм входят также подпрограммы ввода с магнитной ленты и вывода на нее блоков памяти, а также подпрограмма вычисления контрольной суммы такого блока. При использовании этих подпрограмм запуск отображения на экране производится автоматически, так же, как и при вводе-выводе по директивам I и О. При выводе на ленту необходимо указать в определенных регистрах (табл.6) адреса начала и конца блока, а также его контрольную сумму, подсчитанную стандартной подпрограммой МОНИТОРА или собственной подпрограммой пользователя. При вводе блока с ленты можно указать смещение, с которым блок данных должен быть загружен в ОЗУ. Подпрограмма чтения блока информации возвращает (в регистрах микропроцессора) адреса загрузки и считанную с ленты контрольную сумму, которая затем может быть проверена пользователем,

Подпрограмма опроса кода нажатой клавиши позволяет ускорить опрос клавиатуры и более эффективно использовать ее в программах, работающих в реальном масштабе времени.

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

В МОНИТОРЕ предусмотрены также две подпрограммы для определения верхней границы свободной оперативной памяти. Первая из них возвращает программе пользователя в регистровой паре HL установленный адрес верхней границы доступного ОЗУ (по умолчанию — 035FFH для РК с объемом ОЗУ 16 Кбайт), вторая — позволяет установить новую границу. Недопустимо устанавливать верхнюю границу свободной памяти выше ее положения по умолчанию, так как это может привести к неправильной работе вашей программы и искажению данных в рабочих ячейках МОНИТОРАХ

РАСПРЕДЕЛЕНИЕ ОПЕРАТИВНОЙ ПАМЯТИ ПРИ РАБОТЕ МОНИТОРА

ОЗУ «Радио-86РК» имеет информационную емкость 16 Кбайт и располагается, начиная с адреса 0000Н по 3FFFH включительно1. Следует иметь в виду, что часть памяти (3600Н — 3FFFH) отдана под рабочие ячейки МОНИТОРА и экранную область ОЗУ, поэтому использовать её при разработке и отладке программ нельзя! Остальная часть ОЗУ (0000Н- 35FFH) предназначена для программ и данных пользователя. Исключение составляют лишь три ячейки памяти с адресами 0030Н, 0031 Н и 0032Н, которые необходимы для организации отладочного режима запуска программ с использованием адресов останова, поэтому использовать эти ячейки в вашей программе не рекомендуется.

Таблица 7

ВО ВСЕХ ПЕРЕЧИСЛЕННЫХ НИЖЕ ЯЧЕЙКАХ ПЗУ
НЕОБХОДИМО ЗАМЕНИТЬ КОД 36Н НА 76Н
F83D F92E FA88 FCC7 FE6D
F843 F931 FA90 FССВ FE70
F846 F939 FAF1 FCCE FE86
F84E F93F FB34 FCEC FF1C
F851 F942 FBAA FD87 FF54
F860 F948 FBD6 FD8B FF58
F866 F94E FBFB FE0B FFA4
F86B F955 FC08 FE11 FFA9
F8AE FA48 FC15 FE1E FFAE
F885 FA4C FC2B FE24 FFB5
F897 FA5C FC2F FE28 FFBB
F89C FA64 FC36 FE40 FFBE
F8A0 FA67 FC64 FE46 FFC5
F8F0 FA7D FC74 FE5B FFCE
F91E FA82 FC8C FE5F FFDB
В СЛЕДУЮЩИХ ЯЧЕЙКАХ СЛЕДУЕТ ЗАМЕНИТЬ
F85D 35Н НА 75Н FDA5 3FH НА 7FH
FD51 37Н НА 77Н FDB7 37Н НА 77Н
FD54 38Н НА 78Н

При необходимости объем ОЗУ РК может быть увеличен до 32 Кбайт. Это, естественно, потребует внесения изменений и в программное обеспечение. Рабочие ячейки МОНИТОРА и экранная область ОЗУ в этом случае будут находиться в области памяти с адресами 7600Н — 7FFFH. В табл. 7 приведены изменения, которые необходимо внести в МОНИТОР для работы с ОЗУ объемом 32 Кбайт.

ОСОБЕННОСТИ КЛАВИАТУРЫ

Необходимо сказать несколько слов о некоторых особенностях клавиатуры РК. О назначении клавиши «РУС/ЛАТ» уже говорилось ранее. Ее отличие от всех остальных состоит в том, что она «срабатывает» при отпускании. Этот эффект можно использовать для приостановки вывода сообщений на экран телевизора. После отпускания клавиши вывод будет продолжен.

Для кратковременного переключения регистров можно пользоваться и другой клавишей — «СС».

Еще одним полезным свойством клавиатуры является автоматическое повторение выдачи кода символа при длительном нажатии на клавишу.

УПРАВЛЯЮЩИЕ КОДЫ ДИСПЛЕЯ

Управляющие коды, в отличие от остальных, не отображаются в виде алфавитно-цифрового или псевдографического символа, а вызывают выполнение какой-либо специфичной функции, связанной с управлением форматом выводимых на экран сообщений (табл.8).

Функция <- («Курсор влево») вызываетперемещение курсора на одну позицию влево. Если курсор находился в самой левой позиции строки, он переместится в последнюю позицию предыдущей строки, а если он находился в нулевой позиции экрана - в последнюю позицию последней строки.

Функция -> («Курсор вправо») перемещает курсор в противоположном направлении.

Функции ­ («Курсор вверх») и («Курсор вниз») вызывают перемещение курсора на одну строку вверх или вниз соответственно. Если при этом курсор находился в самой нижней строке экрана, то при выполнении функции «Курсор вниз» он переместится в ту же позицию верхней строки, функция «Курсор вверх» из самой верхней строки переместит его в самую нижнюю.

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

Функция «ПС» («Перевод строки») действует так же, как и «Курсор вниз», в том случае, если курсор не находится в последней строке экрана, в противном случае курсор остается в прежней позиции, и на экране происходят следующие изменения: на месте первой строки появляется вторая, на месте второй — третья и т. д., последняя строка экрана очищается. Таким образом, текст на экране дисплея передвигается на одну строку вверх, вся информация, высвечиваемая в первой строке, теряется, а последняя строка освобождается для вывода новой строки символов.

Функция «СТР» («Стирание экрана») полностью стирает весь текст на экране и устанавливает курсор в нулевую позицию (левый верхний угол).

Функция «\» («Курсор в начало экрана») перемещает курсор в левый верхний угол экрана. Информация на экране остается неизменной.

Если обратиться к подпрограмме вывода символа на экран (по адресу 0F809H), записав предварительно в регистр С микропроцессора код 07Н, то РК выдаст звуковой сигнал продолжительностью примерно 0,25 с.

В заключение — о функции прямой адресации курсора. Чтобы установить курсор в требуемую позицию на экране, необходимо выдать на дисплей последовательность кодов: 1ВН+59Н+(НОМЕР СТРОКИ+20Н)+(НОМЕР ПОЗИЦИИ + 20H). Строки и позиции на экране отсчитываются от 0, причем нулевой строкой экрана считается самая верхняя строка, а нулевой позицией — самая левая. Некоторая сложность данной управляющей последовательности объясняется стремлением обеспечить совместимость с наборами кодов дисплеев промышленного производства.

Д. ГОРШКОВ, Г. ЗЕЛЕНКО, Ю. ОЗЕРОВ, С. ПОПОВ

Г. Москва.

Отсканировано с журнала Радио № 8, № 9 1986 г.

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

  1. «Радио», 1986, № 4, с. 26,