[an error occurred while processing this directive]
.шг12
.шп24
═════════════════════════════════════════════════════════════ РАЗДЕЛ I:СИСТЕМА РАСШИРЕНИЯ ВОЗМОЖНОСТЕЙ ИНТЕРПРЕТАТОРА "БЕЙСИК" ПЭВМ АГАТ-9 ═════════════════════════════════════════════════════════════
.цв
.шп136
I.1.1 ВВЕДЕНИЕ
.ов
.шп0
Язык "Бейсик", независимо от того на какой ПЭВМ он реализован, является одним из наиболее популярных языков программирования, благодаря простоте своих конструкций, универсальности и значительному многообразию средств решения задач.
Бейсик ПЭВМ "АГАТ-9" был реализован коллективом программистов НИИВК на основе своего фирменного предка - Бейсика ПЭВМ APPLE II (APPLESOFT II BASIC) и унаследовал от него достаточно мощный арсенал возможностей для реализации идей программистов. Следует упомянуть и о том, что отечественный аналог приобрел также некоторые дополнительные полезные возможности (такие, например, как возможность оперировать шестнадцатеричными константами и встроенный миниассемблер). В связи с этим у программистов появилась возможность легко вставлять в текст программ процедуры на машинном языке (чего нельзя было сделать используя APPLESOFT BASIC), вызывая их командами CALL или USR(X).
Благодаря этим нововведениям значительно упростилась работа программиста по созданию программ, работающих с оборудованием, и решения любых задач, выполнение которых выходит за рамки возможностей языка.
Между тем, разработчик программы постоянно сталкивается с определенными проблемами. Например, Вам требуется печать на принтере псевдографики или построение сложных геометрических фигур и графиков, хотелось бы красиво оформить интерфейс программы, или вставить оригинальную мелодию - решение всех этих задач подчас невозможно для языка. Использование миниассемблера хорошо в том случае, когда требуется написание небольших подпрограмм на машинном языке, т.к. процесс ассемблирования больших модулей отнимает много времени, что сильно замедляет начало выполнения Бейсик-программы. Главное же и основное неудобство состоит в сложности передачи параметров подпрограммам. (Директива интерпретатора CALL совсем не обладает такой возможностью, а функция USR(X) способна передать только один числовой параметр.) Фирма APPLE COMPUTER INC. при создании интерпретатора APPLESOFT BASIC предусмотрела одну уникальную возможность его расширения, которая в неизмененном виде перекочевала и в Бейсик ПЭВМ "АГАТ-9".
Как известно, выполнению интерпретатором любой команды предшествует ее анализ и отождествление с таблицей ключевых слов языка. При этом интерпретатор анализирует символ за символом, знак за знаком. Всякий раз, когда Бейсику требуется новый символ, он обращается к своей подпрограмме GETCHAR, расположенной на нулевой странице с адреса ¤B1 (обсуждается ниже). При анализе строки интерпретатор проверяет правильность записи, соответствие типов, допустимость значений выражений и только после этого переходит к выполнению соответствующей директивы. При выполнении директивы, начинающейся с ключевого слова, из специальной таблицы векторов выбирается адрес подпрограммы отождествленной команды и интерпретатор обращается к ней. После выполнения соответствующей подпрограммы, Бейсик переходит к анализу новой команды.
В таблице ключевых слов интерпретатора "Бейсик" имеется свободное ключевое слово амперсанд "&", которое не занято никакой подпрограммой и предназначено для расширения набора директив интерпретатора. Новая директива должна быть записана непосредственно за знаком "&" (возможно наличие незначащих пробелов). При обнаружении "&" в качестве команды, интерпретатор осуществляет переход к подпрограмме по адресу ¤3F5.
При запуске системы и по умолчанию в ячейке ¤3F5 хранится код команды "JMP" (¤4C), а в ячейках ¤3F6-¤3F7 адрес подпрограммы MONRTS в системе "Монитор", которая не производя никаких действий, возвращает управление интерпретатору (выполняя RTS). Для использования & следует поместить в ячейки ¤3F6-¤3F7 адрес исполняемой подпрограммы. При этом в момент входа в подпрограмму в аккумуляторе (регистре A) содержится первый символ, следующий за "&", флаг переноса C=0, если этот символ цифра, в ячейках ¤B8-¤B9 содержится адрес этого символа.
Как уже указывалось, взятие каждого нового символа интерпретатором осуществляется посредством обращения к подпрограмме GETCHAR, анализируя машинный текст которой, можно сделать все соответствующие выводы:
.гр
GETCHAR: 00B1- E6 B8 INC ¤B8 перейти к следующему адресу, 00B3- D0 02 BNE ¤00B7 изменив указатель 00B5- E6 B9 INC ¤B9 BAS (¤B8-¤B9) 00B7- AD 05 02 LDA ¤0205 взять символ 00BA- C9 3A CMP #¤3A это двоеточие ? 00BC- B0 0A BCS ¤00C8 да, или символ с большим кодом╗ 00BE- C9 20 CMP #¤20 это пробел ? | 00C0- F0 EF BEQ ¤00B1 да, повторить анализ | 00C2- 38 SEC установить флаги | 00C3- E9 30 SBC #¤30 для цифр и | 00C5- 38 SEC | 00C6- E9 D0 SBC #¤D0 | 00C8- 60 RTS выйти ←══════════════════════╝
.тт
Подпрограмма директивы, расширяющей &, должна обеспечить проверку правильности синтаксиса директивы и выполнение более сложных операций (если они предусмотрены), а после завершения выполнения основных действий вернуть интерпретатору измененные указатели ¤B8-¤B9 (они должны указывать на следующий после директивы символ).
После такого "подключения" новая команда становится полноправной командой системы "Бейсик" и выполняется как и любая резидентная, внутренняя команда языка.
.ст Раздел I:1.2
[an error occurred while processing this directive]