[an error occurred while processing this directive]

.гр

.ао0

.ми0

.шп8

  ОПИСАНИЕ РАБОТЫ СИСТЕМЫ УПРАВЛЕНИЯ РЕЗИДЕНТНЫМИ ДРАЙВЕРАМИ

                    "ДИСПЕТЧЕР" V.1/00
                   --------------------

.шп72

Прежде следует ознакомиться с описанием работы интерпретатора

"Бейсик" А-9.1, а также другими материалами, которые относятся к проблеме расширения его возможностей.

.шп8

Введение...

.шп0

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

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

По причине вышеперечисленных соображений, программистами фирмы "Friends' Software" была написана система управления резидентными драйверами "Диспетчер".

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

Система "Диспетчер" может поставляться в двух вариантах: резидентном (в составе улучшенного интерпретатора BASIC 'MASTER') на диске ИКП-1 или другом диске с интерпретатором BASIC 'MASTER' (см. соответствующее описание) или нерезидентном (тогда Вы сами должны позаботиться о ее установке с помощью файла "STAYMNDR.BIN".

.сс

.шп8

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

.шп0

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

1) Вход SET (¤F71A)

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

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

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

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

2) Вход WORK (¤F77C)

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

Рабочий вход, предназначенный для переключения драйверов в системе. Этим входом пользуется специальная директива Бейсика "DR=N", где N-номер драйвера, который вы желаете установить активным. Директивы "DR=",естественно нет в стандартном Бейсике ИКП-1. Если вы хотите установить ее в Бейсик, то пользуйтесь файлом "STAYMNDR.BIN", который также устанавливает в Бейсик всю систему "Диспетчер". (В системе BASIC 'MASTER' соответствующая директива уже есть).

Директива "DR=" устанавливается вместо директивы "GR=", которая, естественно не работает на АГАТ-9 (из-за отсутствия такого режима в Д.К.) и является рудиментарной и случайно пришедшей из "Бейсика АГАТ-7".

Итак, например, команда "DR=5" устанавливает вектора 5-го драйвера в системный вектор "&", или выдает ошибку "ОШИБОЧНОЕ ЗНАЧЕНИЕ", если в систему установлено меньше 5 драйверов (кол-во драйверов установленных в систему можно узнать, например, директивой "PRINT PEEK (¤F700)". Команда "DR=0" устанавливает в вектор "&" значение ¤FF58 (то есть отключает все драйвера) и очищает всю таблицу "Диспетчера"! Ей можно пользоваться, когда Вы захотите инициализировать систему. При непустой таблице "Диспетчера" команды DOS "FP" и "INIT" будут выдавать ошибку "СИСТЕМА ИСПОРЧЕНА". Избежать этого можно только обнулением таблицы командой DR=0 (см. также пункт настоящего описания "Меры предосторожности").

.сс

3) Вход EXIT (¤F744)

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

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

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

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

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

.шп8

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

.шп0

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

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

.шп8

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

.шп0

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

Помните, что нерезидентная версия системы "ДИСПЕТЧЕР" (загружающаяся файлом "STAYMNDR.BIN") изменяет контрольную сумму DOS без коррекции проверочной таблицы. Поэтому команды "FP" и "INIT" будут выдавать ошибку "СИСТЕМА ИСПОРЧЕНА". Для возврата к нормальной системе DOS перегрузите систему без загрузки "ДИСПЕТЧЕРа". Вы также можете превратить нерезидентную версию системы "Диспетчер" в резидентную. Для этого необходимо скорректировать таблицу контрольной суммы DOS после установки "Диспетчера" (для этого можно воспользоваться файлом "CALCSUM .BIN" фирмы "Friends' software") и затем записать измененную среду на диск с помощью команды "INIT FILENAME".

.ст Раздел I:8

[an error occurred while processing this directive]