Радио-86РК/Радио 01-87/Бейсик для Радио-86РК
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: А. ДОЛГИЙ Источник: 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 |
16H 02H |
024AH 024CH |
1BH 1BH |
В ячейках 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).
А. ДОЛГИЙ
г. Москва
- Зеленко Г., Панов В., Попов С. Бейсик для «Микро-80».- Радио, 1985 № 1 — 3.
- Зеленко Г., Панов В., Попов С. Программирование на Бейсике.- Радио, 1986, № 2,3.