Радио-86РК/Радио 01-87/Бейсик для Радио-86РК

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

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

Автор: А. ДОЛГИЙ

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

Для компьютера «Радио-86РК» можно использовать интерпретатор языка Бейсик, разработанный для «Микро-80» и опубликованный в [1, 2]. Необходимо только изменить коды в областях памяти 490H-4AFH, 4D0H- 4EFН, 1010Н- 104FH, 1740Н-184FH, 1950Н- 19FFH (см. табл.1), а также в ячейках, перечисленных в табл. 2. Опыт показывает, что лучше всего вводить коды интерпретатора в ОЗУ компьютера блоками по 256 байт, проверяя правильность ввода каждого из них и срезу же записывая его на магнитофон. После записи всех блоков программу вводят с магнитофона поблочно, еще раз проверяют и только после этого записывают на магнитофон полностью. Контрольные суммы отдельных блоков и всей программы, которые подсчитывает МОНИТОР при записи и воспроизведении, приведены в табл. 3. Они соответствуют еще не работавшему (ни разу не запускавшемуся по директиве GO) интерпретатору. После запуска контрольные суммы некоторых блоков и всего интерпретатора изменятся.

Таблица 2.

Адрес Код Адрес Код
0001H

0002H
0170H
017EH
0194H
0244H
0246H
0248H

16H

02H
65H
79H
AFH
1BH
1BH
1BH

024AH

024CH
1050H
1866H
18B6H
18E7H
194CH

1BH

1BH
F8H
31H
31H
С5H
4EH

В ячейках 17F0H, 17F1H указан адрес ячейки экранного буфера, соответствующей верхнему левому углу экрана. Этот адрес необходим для нормальной работы псевдографических операторов PLOT X, Y, Z и LINE X, Y. Если ОЗУ компьютера имеет объем 32 Кбайте, то в эти ячейки нужно записать число 77С2Н. Напоминаем, что в ячейку с меньшим адресом всегда записывается младший байт двухбайтового числа.

Таблица 3.

Адреса блока Контрольная сумма
0000Н—00FFH 036FH
0100Н— 01FFH 37Е3Н
0200Н—02FFH 26F1H
0300Н—03FFH 714ВН
0400Н— 04FFH С51ЕН
0500Н—05FFH D061H
0600Н—06FFH D4E4H
0700Н—07FFH 3190Н
0800Н—08FFH Е638Н
0900Н— 09FFH 7CD6H
0А00Н—0AFFH 07F4H
0В00Н—0BFFH 246АН
0С00Н—0CFFH 6774Н
0D00H—0DFFH 64СВН
0Е00Н— 0EFFH С533Н
0F00H—0FFFH FD93H
1000Н—10FFH А455Н
1100H—11FFH B570Н
1200H—12FFH 59BFH
1300H—13FFH 6BD6H
1400Н—14FFH 18А2Н
1500H—15FFH 11В4Н
1600H—16FFH DB3DH
1700Н—17FFH 1274Н
1800H—18FFH 3CF0H
1900H—19FFH 57FFH
0000Н—19FFH 1242Н

При каждом запуске (директивой G0) интерпретатор запрашивает у МОНИТОРА верхнюю границу адресов ОЗУ, которыми он может пользоваться.

Значение этой границы записывают по директиве М в ячейки 3631Н, 3632Н. Если граница попадает в область памяти, уже занятую самим интерпретатором или введенной ранее программой на Бейсике, то при попытке запустить интерпретатор он выведет на экран минимально допустимое шестнадцатеричное значение границы и возвратит управление МОНИТОРУ. Заметим, что при установке этого значения в распоряжении пользователя остается около 200 ячеек памяти для размещения программ и данных. Если при вводе программы на Бейсике (вручную или с магнитофона) значение верхней границы адресов ОЗУ будет превышено, то выдается сообщение об ошибке 07. То же произойдет и при работе программы, если интерпретатору не хватит объема памяти для размещения переменных.

Следует иметь в виду, что нажатие на кнопку «СБРОС» автоматически устанавливает значение верхней границы доступной памяти, равное 35FFH (75FFH для ОЗУ 32 Кбайта), и восстанавливает константы скорости ввода и вывода информации на магнитофон, если они изменялись.

При выходе из интерпретатора нажатием на кнопку «СТР» этого не происходит.

В предлагаемой версии предусмотрено использование функциональных клавиш компьютера для управления интерпретатором. Назначение этих клавиш указано в табл. 4. Функции выполняются сразу же после нажатия на соответствующие клавиши (то есть использовать клавишу «ВК» в этом случае не надо). Названия выполняемых функций на экран не выводятся. Необходимо отметить, что при вводе символьных переменных оператором INPUT случайное нажатие на любую функциональную клавишу искажает вводимую информацию и нарушает работу программы.

Таблица 4.

Клавиши Выполняемая функция
без АР2 после АР2
«F1» или «УС»+«@» MSAVE MLOAD
«F2» или «УС»+«А» LIST PRINT FRE(0)
«F3» или «УС»+«В» RUN CONT
«F4» или «УС»+«С» STOP

Работу интерпретатора можно приостановить нажатием на клавишу «РУС/ЛАТ» (до момента ее отпускания). При нажатии клавиш «УС» — 0 выполнение программы продолжается, но на экран ничего не выводится, кроме псевдографической информации (то есть в программе блокируются все операторы PRINT). Блокировка вывода снимается повторным нажатием на клавиши «УС» — 0 или автоматически при возврате интерпретатора в непосредственный режим.

Информацию, отображаемую на экране дисплея (кроме псевдографической), можно параллельно вывести на внешнее устройство, например на принтер. Этот режим включают и выключают нажатием клавиш «УC» — «D» или дополнительной клавиши «F5» (которую можно установить на плате A3) (контакты клавиши соединяют с анодом диода V1 и контактом 10 платы). Режимом можно управлять и программно — оператором POKE 1261,А. При А>1 вывод на внешнее устройство включается, а при А=0 выключается.

Информация выводится через порт В микросхемы D14 в коде КОИ-7. Значение старшего разряда выводимого кода устанавливается таким, чтобы общее количество единиц в коде было нечетным. О выводе очередного байта сигнализирует низкий логический уровень на контакте А21 разъема платы А1. В подтверждение приема внешнее устройство должно установить низкий уровень на контакте А18 этого же разъема. Если внешнее устройство не подключено, между указанными контактами нужно включить резистор сопротивлением 10…100 кОм, иначе при включении режима вывода на внешнее устройство выполнение программы остановится. Если на плате А1 микросхема D14 не установлена, то для нормальной работы интерпретатора в ячейку 19СВН нужно записать код С9Н.

Описанный алгоритм вывода может оказаться непригодным для обслуживания конкретного внешнего устройства. В этом случае нужно заменить подпрограмму вывода, начинающуюся с ячейки 19ССН. При ее переработке следует иметь в виду, что она получает код выводимого символа в регистре С микропроцессора и не должна изменять содержимого регистров D, Е, Н, L. Подпрограмма может занимать область памяти вплоть до ячейки 1AFFH.

Область 19ЕЕН-1AFFH интерпретатора Бейсика можно использовать и для записи подпрограмм, вызываемых функцией USR(X). Если же вывод на внешние устройства не используется, то область допустимых адресов подпрограмм пользователя может начинаться уже с 19ССН. С ячейки 1В00Н начинается область хранения программ на Бейсике. Так как на экран дисплея «Радио-86РК» выводится только 25 строк символов, максимальное значение параметра Y в операторе CUR X, Y равно 24, а в операторах PLOT X, Y, Z и LINE X, Y-49.

Оператор OUT X, Y и функция INP (X) в интерпретаторе сохранены, но пользоваться ими не рекомендуется. Дело в том, что в «Радио-86РК» адресные пространства регистров ввода-вывода и ячеек памяти совмещены. Из-за этого при обращении к регистру с адресом Х микропроцессор фактически обращается к ячейке с адресом X=256 * X. Во избежание ошибок в этой ситуации лучше пользоваться оператором POKE X, Y и функцией PEEK (X). Так, например, портам А, В, С и регистру управляющего слова микросхемы D14 соответствуют адреса −24576, −24575, −24574 и −24573.

В МОНИТОРЕ «Радио-86РК» предусмотрена подпрограмма ввода кода нажатой клавиши без остановки выполнения программы. Из программы на Бейсике обратиться к ней можно с помощью функции USR (-2021) Например, оператор A=USR (-2021) присвоит переменной А значение кода нажатой клавиши или 255, если ни одна клавиша не нажата. Оператор ON USR (-2021) −48 GOTO 1000, 2000, 3000 передает управление строкам 1000, 2000 или 3000, если нажата одна из клавиш 1, 2 или 3 соответственно. Если же нажата любая другая клавиша или не нажата никакая, то будет выполняться следующая за этим оператором строка.

Для подачи звукового сигнала можно пользоваться оператором PRINT CHR$(7).

А. ДОЛГИЙ

г. Москва

  1. Зеленко Г., Панов В., Попов С. Бейсик для «Микро-80».- Радио, 1985 № 1 — 3.
  2. Зеленко Г., Панов В., Попов С. Программирование на Бейсике.- Радио, 1986, № 2,3.