Радио-86РК/Радио 04-88/Программа обработки текстов на Бейсике

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

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

Автор: А. ПЕКИН

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

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

Считается хорошим тоном строки программы на языке БЕЙСИК номеровать с шагом, кратным десяти. Однако редко кому удается «сходу» написать даже небольшую по объему программу, не нарушив этого неписаного закона — программа RENUM позволяет оператору сдвигать, раздвигать и упорядочивать (перенумеровывать с единым шагом) номера строк всего текста программы.

Перед ее использованием в ОЗУ микро-ЭВМ должны быть введены интерпретатор и программа на БЕЙСИКе. После запуска по адресу 6000Н RENUM выводит на экран сообщение МАРКЕР- ХХХХ и список директив

  1. (BASIC),
  2. (RENUM),
  3. (COMPACT),
  4. (REM — COMPACT),
  5. (NORMAL).

Правее надписи «MAPKEP» — выводится шестнадцатеричный адрес маркера конца программы [1]. Выбор одной из директив производится нажатием соответствующей цифровой клавиши. Рассмотрим каждую из пяти директив отдельно.

1 (BASIC) — обеспечивает запуск интерпретатора БЕЙСИКа. В этом режиме можно просмотреть текст программы, проверить результаты работы RENUMa.

2 (RENUM) — позволяет перенумеровать строки программы с одновременным изменением адресов переходов в операторах GOTO…, GOSUB…, THEN…, RUN… . После ввода директивы (нажатием на клавишу 2) на экран выводится запрос: НАЧ. НОМЕР ? В ответ оператор должен ввести желаемый номер первой строки программы и нажать клавишу «ВК». После вывода на экран нового запроса: ШАГ ? следует ввести шаг, с которым должны быть перенумерованы строки программы. После нажатия на клавишу «ВК» выводится сообщение: НЕ ГОТОВ! Во время присутствия его на экране RENUM производит перенумерацию строк программы. После завершения работы на экран вновь выводится список директив.

В процессе отладки программ на БЕЙСИКе может встретиться ситуация, когда есть ссылка на несуществующую строку. В этом случае RENUM, кроме сообщения «НЕ ГОТОВ!», выводит текст: НЕТ СТРОКИ ХХХХ В СТРОКЕ ХХХХ с соответствующими номерами несуществующей строки и строки, в которой впервые встретилась ссылка на нее. Обработка программы блокируется, а на экран выводится список директив.

3 (COMPACT), 4 (REM-COMPACT) — эти директивы позволяют сократить объем ОЗУ, занимаемый программой на БЕЙСИКе, и время ввода программ с магнитофона (благодаря их более плотной «упаковке» на магнитной ленте). Как известно, достаточно большую часть текста реальной программы составляют символы пробелов и примечания, делающие программу нагляднее, но не являющиеся необходимыми для ее работы. Директива COMPACT сокращает текст программы благодаря исключению пробелов между операторами. Директива REM-COMPACT исключает также все встретившиеся в программе примечания (оператор REM…), сохраняя, однако, номера строк программы, начинающиеся с этого оператора, так как существуют программы, в которых на эти строки осуществляются переходы.

После выбора одной из этих директив (нажатием соответствующей цифровой клавиши) RENUM приступает к обработке текста программы, выводя на экран сообщение «НЕ ГОТОВ!». По окончании работы на экране появляется список директив с новым адресом маркера конца программы.

5 (NORMAL). После обработки директивами COMPACT и REM-COMPACT программа на БЕЙСИКе сокращается в объеме, но становится неудобной для чтения оператором. Директива NORMAL возвращает тексту программы привычный вид, расставляя в необходимых местах «пробелы» (примечания, естественно, не восстанавливаются!).

RENUM занимает в ОЗУ область адресов с 6000Н по 64А9Н и может применяться в компьютерах с объемом ОЗУ не менее 32 К. Применение версии RENUMa в 16-килобайтных микроЭВМ оказалось неэффективным ввиду малого объема ОЗУ, остающегося для размещения программ на БЕЙСИКе.

Коды программы приведены в табл.1. Их можно ввести в компьютер, воспользовавшись директивой «М» МОНИТОРа. Правильность ввода можно проверить, подсчитав поблочно контрольные суммы блоков и сверив их с приведенными в табл. 2.

Таблица 2.

Блок Контрольная сумма
6000—60FF

6100—61FF
6200—62FF
6300—63FF
6400—64A9

521A

3B02
E771
40E9
D282

6000—64A9 19F8


Распределение ОЗУ при работе с программой показано в табл.3. При работе RENUM, кроме использования служебных ячеек 64ААН-64ВВН, создает список номеров строк, отводя под каждый номер 2 байта. Следовательно, объем ОЗУ, занимаемый этим списком, равен 2N, где N — число строк обрабатываемой программы.

Таблица 3.

Список номеров строк 64ВСН
Служебные ячейки RENUMa 64ВВН
64ААН
RENUM 64А9Н
6000Н
Текст программы на БЕЙСИКе 5FFFH
1В01Н
Интерпретатор БЕЙСИКа 0000Н

В заключение несколько замечаний по работе с программой. Прежде всего запомните: ни при каких условиях не нажимайте на клавишу «СБРОС» во время присутствия на экране сообщения «НЕ ГОТОВ!», поскольку это приведет к полной неработоспособности исходной программы на БЕЙСИКе.

Время, затрачиваемое на перенумерацию строк программы на БЕЙСИКе, зависит от ее объема, количества в ней операторов перехода, а также от разницы в разрядности старых и новых номеров. Чтобы в операторе GOTO заменить номер 10 на 1000, необходимо раздвинуть всю программу на два байта для «впечатывания» недостающих цифр. Так, например, реальную программу в 350 строк с исходными номерами 1-350 RENUM перенумеровывает с шагом 10 (то есть в номера 10-3500) за 40…50 секунд. Следует отметить, что удаление примечаний процедура довольно медленная, поэтому время, необходимое для их исключения из текста программы, может оказаться значительным — несколько минут (при общем объеме примечаний около 2 К).

В ячейках 63FDH, 63FEH записан адрес начала текста программы на БЕЙСИКе (1В01Н для интерпретатора PK86). При использовании программы совместно с «МИКРО-80» адрес начала текста — 2201 Н (в ячейку 63FEH записать байт 22Н).

Возможно использование RENUMa совместно с интерпретаторами, отличными от опубликованных, но использующих ту же структуру «односвязного списка» . В этом случае необходимо знать, в каких ячейках хранится маркера конца программы (в нашем случае — 0245Н, 0246Н). Адрес первой из этих ячеек должен быть занесен в таблицу кодов RENUMa по адресам (первым — младший байт): 6007Н. 6008Н; 6129Н, 612АН; 6140Н, 6141Н; 6144Н, 6145Н; 6161 Н, 6162Н; 6165Н, 6166Н. Адрес перехода на запуск интерпретатора БЕЙСИКа (директива 1) находится в ячейках 6021Н, 6022Н, в которые следует занести адрес «горячего старта» используемой версии интерпретатора.

При записи RENUMa в ПЗУ возможно сокращение его объема до одного Килобайта (6000Н-63FFH). В этом случае по адресу 63FFH следует записать байт С9Н. Однако в этом случае RENUM не сможет перенумеровывать программы, в которых встречаются ссылки на несуществующие строки. Текст программы будет испорчен. Перенумерация корректных программ, а также работа остальных директив остаются без изменений,

А. ПЕКИН, г. Москва