[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]