Описание
компьютера Радио-86РК
|
Журнал
РАДИО
|
ПРОГРАММА ОБРАБОТКИ текстов на БЕЙСИКЕ.
Предлагаемая вниманию читателей программа, условно названная RENUM, относится к числу сервисных и предоставляет пользователю некоторые дополнительные удобства при разработке и эксплуатации программ. Она является самостоятельной и использует от применяемой версии интерпретатора только три адреса: запуска, начала обрабатываемой программы и маркера ее конца.
Считается хорошим тоном строки программы на языке БЕЙСИК номеровать с шагом, кратным десяти. Однако редко кому удается "сходу" написать даже небольшую по объему программу, не нарушив этого неписаного закона - программа RENUM позволяет оператору сдвигать, раздвигать и упорядочивать (перенумеровывать с единым шагом) номера строк всего текста программы.
Перед ее использованием в ОЗУ микро-ЭВМ должны быть введены интерпретатор и программа на БЕЙСИКе. После запуска по адресу 6000Н RENUM выводит на экран сообщение МАРКЕР- ХХХХ и список директив
Правее надписи "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 не сможет перенумеровывать программы, в которых встречаются ссылки на несуществующие строки. Текст программы будет испорчен. Перенумерация корректных программ, а также работа остальных директив остаются без изменений,
А. ПЕКИН
г. Москва
Описание
компьютера Радио-86РК
|
Журнал
РАДИО
|