[an error occurred while processing this directive]

.ао0

.ми0

.шп8

4] ОПИСАНИЕ работы "Диспетчера" поддержки драйверов
   расширения возможностей интерпретатора "Бейсик"
   (версия 2.00) интегрированной в среду "BASIC-'MASTER'95".

.шп8

Введение

.шп0

Как известно интерпретатор "Бейсик" позволяет расширять набор своих команд через свободное ключевое слово амперсанд, "&"; эту возможность использует фирма Friends' software при создании своих драйверов, возможно известных читателю. Однако, основное неудобство такой возможности связано с тем, что система DOS-BASIC имеет один вектор, "&", с которого начинается дальнейшая интерпретация. В то же время пользователь (или начинающий программист), невладеющий навыками программирования на языке Ассемблера, не может собрать специальный драйвер к собственной Бейсик-программе из Библиотечных модулей, предлагаемых фирмой "Friends' Software".

В результате вышесказанного приходится использовать уже готовые драйвера фирмы, которые собраны согласно тематическому предназначению и имеют, поэтому далеко не все операторы, которые были бы нужны в каждом конкретном случае. Это заставляет автора Бейсик-программы перегружать их с диска по мере необходимости, что очень неудобно, т.к. отнимает много дискового пространства и увеличивает время выполнения вашей программы.

По причине вышеперечисленных соображений, программистами фирмы "Friends' Software" в 1994 году была написана система управления резидентными драйверами "Диспетчер" (версии 1.00) еще для систем BASIC A9.1 и BASIC-MASTER.

Мультидрайверная система обеспечивала возможность одновременной работы с несколькими драйверами операторов (до 10 включительно), что устраняло описанные выше неудобства.

Интерпретатор BASIC-"MASTER"95 позволяет увеличивать набор своих команд путем расширения интерпретации свободного ключевого слова "&" (амперсанд) через две системные точки входа:

¤3F5 - для команд-процедур

¤3E8 - для команд-функций (новая возможность среды)

Фирма "Friends' software", всвязи с необходимостью активизировать драйвера расширения возможностей интерпретатора Бейсик сразу по двум точкам входа была вынуждена пересмотреть стандарт организации указанных драйверов и также всвязи с этим выпустить настоящую (2.00), новую версию "Диспетчера" их поддержки.

.сс

.шп8

О том,как работает система

.шп0

Система располагается с адреса ¤F700 до ¤F7FF (в памяти, не занятой интерпретатором и DOS), в области Псевдо-ПЗУ (7 банк), и имеет три основных входа в обслуживающие подпрограммы, посредством которых "Диспетчер" выполняет свои функции:

1) Вход SET (¤F700)

-------------------

Этим входом может воспользоваться драйвер, только что загруженный в ОП. В регистры A и Y необходимо передать начальный адрес поля точек входа в интерпретатор команд драйвера (соответственно старший и младший байты).

Формат поля точек входа следующий:

JMP PROC     или (JMP ¤E508) переход к обработке процедур
JMP FUNCTION или (JMP ¤E1AC) переход к обработке функций

(В скобках указаны переходы к подпрограммам обработки ошибок, если команд соответствующих типов драйвер не имеет)

Поле точек указанного формата должно присутствовать в каждом драйвере расширения возможностей "Бейсика". Диспетчер обеспечивает правильную работу только в этом случае.

Подпрограмма SET проверяет кол-во драйверов, уже установленных в систему, и если их уже больше 10, то возвращает установленный флаг переноса (C=1) и в регистре X код ошибки BASICа "МАЛО ПАМЯТИ (69).

Если же в системе меньше 10 драйверов, то будет произведен поиск в таблице адреса, совпадающего с переданным на вход. При нахождении такого, "Диспетчер" возвращает установленный флаг переноса (C=1) и в регистре X код ошибки BASICа "УЖЕ ЕСТЬ" (200). Это сделано для того, чтобы один и тот-же драйвер не мог установиться в систему два и более раз или разные два драйвера не установились бы друг на друга. Однако эта предосторожность не избавляет от ошибки, которая возникнет при несовпадении адресов хотя бы на один байт (см. пункт настоящего описания "Меры предосторожности"). Иначе, адрес, переданный в A и Y, устанавливается в упомянутую специальную таблицу и "ДИСПЕТЧЕР" возвращает сброшенный флаг переноса (C=0). Формат специальной таблицы приведен ниже. В этой же таблице отмечается, что этот драйвер активен в системе, и вектора его обработчика, из поля точек входа в драйвер устанавливаются в ячейки системных точек входа обработки "&" ¤3F5 и ¤3E8.

2) Вход WORK (¤F703)

--------------------

Рабочий вход, предназначенный для переключения драйверов в системе. Этим входом пользуется специальная директива Бейсика "DR=n", где n-номер драйвера, который вы желаете установить активным. Итак, например, команда "DR=5" устанавливает вектора 5-го драйвера в системные вектора "&", или выдает ошибку "ОШИБОЧНОЕ ЗНАЧЕНИЕ", если в систему установлено меньше 5 драйверов (кол-во драйверов установленных в систему можно узнать, например, директивой "PRINT PEEK (¤1900)". Команда "DR=0" устанавливает в вектор "&" для процедур (¤3F6-¤3F7) значение ¤FF58, а в вектор функций (¤3E9-¤3EA) значение ¤E1AC (то есть отключает все драйвера) и очищает всю таблицу "Диспетчера"! Ей можно пользоваться, когда Вы захотите инициализировать систему.

.сс

3) Вход EXIT (¤F706)

--------------------

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

Это может потребоваться, например, когда драйвер уже отработал, и вы хотите его выключить, чтобы он не занимал опер.память (как правило у драйверов, работающих с системой "Диспетчер" есть специальная команда '&"EXIT"', которая пользуется этим входом). При этом в регистрах A и Y следует сообщить тот-же адрес, который требовался входу SET.

Специальная подпрограмма произведет поиск в таблице этого адреса, если он будет найден, то будет удален из таблицы, а активным в системе станет предыдущий драйвер (принцип очереди). В этом случае работа считается успешно завершенной и управление передается вызывающей программе (естественно если "EXIT" был вызван командой JSR) со сброшенным флагом переноса (C=0).

Если же единственный, имевшийся в системе драйвер уйдет из нее, то в векторе процедур "&" (¤3F6-¤3F7) будет установлено значение ¤FF58 (JMP на RTS), а в векторе функций "&" (¤3E9-¤3EA) значение ¤E1AC (JMP на "ОШИБОЧНОЕ ЗНАЧЕНИЕ"). Если сообщенный адрес не будет найден в таблице, то и управление будет передано в вызывающую программу с установленным флагом переноса (C=1), сигнализирующем о невыполненной задаче.

.шп8

Формат Специальной таблицы "ДИСПЕТЧЕРА":

.шп0

(располагается с ¤1900)

------------------------------------------
номера          значение                  
байтов                                    
------------------------------------------
  1    Кол-во драйверов в системе         
                                          
  2    Номер активного драйвера           
                                          
 3-4   [¤FF58] константа в формате        
       микропроцессора                    
 5-24  Байты для адресов полей точек входа
       драйверов                          
25-26  [¤0000] нулевые байты              
------------------------------------------

.шп8

Меры предосторожности при работе с системой:

.шп0

Следует помнить, что в системе DOS 3.3 АГАТ-9 не существует никакого контроля за памятью, предоставленной пользователю; поэтому следует загружать в систему "Диспетчер" драйвера, области которых не перекрещиваются. Иначе это может привести к неправильной работе системы. Лучше всего использовать перемещаемые драйвера фирмы "Friends' Software" и загружать их в память оверлейно.

Помните, что Диспетчер 2.00 хранит в своей таблице адреса расположения полей точек входа в интерпретаторы драйверов, которыми пользуется для доступа к адресам обработки процедур и функций, содержащихся в полях. Всвязи с этим при переключении драйверов поля точек входа включаемого драйвера должны быть доступны для считывания подпрограммам "Диспетчера" (то есть располагаться в свободно читаемой области основного ОЗУ).

.сс

.шп8

5] Введение в интерпретатор "Бейсик" возможности использования свободного ключевого слова амперсанд, "&", в качестве функции.

.шп0

Как известно, в стандартном интерпретаторе "Бейсик-Агат 9.1" имеется свободное ключевое слово амперсанд, "&", предназначенное для расширения директив пользователем через специальную системную точку ¤3F5-¤3F7 (JMP USERPROC) (подробнее см. в официальных описаниях языка "Бейсик"). Однако, данное ключевое слово (как и дальнейшая интерпретация, подхватываемая от него) могут быть использованы только для интерпретации процедур- то есть команд, только выполняющих какие-либо действия. Для реализации расширения набора функций (команд, возвращающих результат действия) данный способ с использованием напрямую не возможен (для драйверов расширения возможностей "Бейсика" фирмы Friends' software в стандарте от 1.08.94 применялись директивные функции, записываемый внутри амперсанда; например &A¤="FILES"(5,5,10,10,6,3), как видно такая запись все равно по сути была директивой и эти функции нельзя было использовать в конструкции выражений.

В среде BASIC-'MASTER'95 Серков С.В. (автор настоящего описания) наконец-то реализовал возможность использования "&" как функции в том виде как это должно было быть еще в APPLESOFT II BASIC. Для этого в специальной подпрограмме обработки выражений языка "Бейсик" было разрешено использования "&", с ответвлением на новый системный вектор ¤3E8-¤3EA (JMP USERFUN), который был выделен. Таким образом в BASIC-'MASTER'95 при использовании "&" как процедуры (то есть записи его в начале строки или сразу после двоеточия) происходит переход по адресу ¤3F5. Если же "&" использовать по правилам записи функций, то интерпретатор "Бейсик" обратится к подпрограмме по адресу ¤3E8. Чтобы использовать "&" как функцию, следует занести в ячейки ¤3E9-¤3EA адрес подпрограммы пользователя. При этом данные на входе в подпрограмму такие же, как при входе по "&"-процедуре в ¤3F5 (см. Описания языка "Бейсик" ЛЭМЗ). По умолчанию, при загрузке системы с диска в ячейках ¤3E9-¤3EA установлен адрес подпрограммы перехода к обработке ошибки интерпретатора "Бейсик" "ОШИБОЧНОЕ ЗНАЧЕНИЕ".

При создании драйверов расширения возможностей интерпретатора "BASIC-'MASTER'95" следует учитывать, что все процедуры будут "приходить" на точку ¤3F5, а все функции на ¤3E8 (благодаря двум точкам входа программист точно знает какого типа данная команда и может соответствующим образом организовать обработку ошибок).

Собственно фирма "Friends' software" уже переработала все модули собственной "Системы расширения возможностей интерпретатора "Бейсик" под новую среду "BASIC-'MASTER'95" (диск с исходными текстами программисты могут заказать у автора или в компьютерном центре "USN") и все стандартные драйверы фирмы уже существуют для данной системы.

.сс

.ст BASIC 'MASTER'95_3

[an error occurred while processing this directive]