[an error occurred while processing this directive]

------------------------------------------------------
ОПИСАНИЕ ОТЛИЧИЙ ПРОГРАММНОЙ СРЕДЫ "BASIC-'MASTER'95" 
ОТ СТАНДАРТНОГО ИНТЕРПРЕТАТОРА "BASIC A9.1" (ИКП-1).  
ИСПРАВЛЕНИЕ ОШИБОК В ДОС 3.3 И СИСТЕМЕ "МОНИТОР"      
------------------------------------------------------

(Описание для программистов и пользователей)

ОТЛИЧИЯ ОТ СТАНДАРТНОЙ СИСТЕМЫ

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

1] Исправление ошибок, оставленных в интерпретаторе и ДОС 3.3 основными разработчиками этих систем на ПЭВМ АГАТ-9.

2] Удаление из интерпретатора "BASIC" операторов, потерявших свою актуальность или неработающих операторов и включение новых.

3] Исправление ошибок и внесение некоторых новых подпрограмм в систему "Монитор".

4] Интегрирование в "Бейсик" Диспетчера по обслуживанию драйверов расширения возможностей интерпретатора (версия 2.0)

5] Разрешение использования свободного ключевого слова амперсанд, "&", как функции и выделение для этого специальной системной точки входа для пользователя.

6] Интегрирование внешних драйверов расширения возможностей ДОС 3.3:

6.1- Драйвера управления виртуальной дисковой памятью VIRT128

6.2- Драйвера поддержки перемещаемых файлов RELDRIVE

(ранее данные драйвера были загружаемыми)

1] ИСПРАВЛЕНИЕ ОШИБОК В СИСТЕМЕ

Основным разработчиком ДОС 3.3 ПЭВМ АГАТ Кривцовым А.Ю. было допущено значительное кол-во ошибок, к сожалению не все из которых удалось исправить автору настоящего описания. Некоторые из них явились элементом случайности, другие появились в результате необдуманного преломления ДОС 3.3 APPLE при переделке на АГАТ-9. Были исправлены ошибки, устранение которых не потребовало внесения значительных изменений в систему, т.к. для этого потребовалось бы коренным образом пересмотреть структуру ДОС. Далее приводится краткий перечень всех ошибок, которые были устранены:

1) Исправление "подвисания" машины по команде "E000G" для "холодного" старта "Бейсика" из программы "Монитор".

2) Устранение загрузки файла типа "K" командой "LOAD" или "RUN" (Непростительная ошибка!).

3) Исправление допустимого значения параметра "S" (SLOT) при использовании его в командах ДОС (Было "S" максимально равно 7, но ведь у АГАТа 6 слот!).

4) Запрещение задания параметра "V" со значениями от 1 до 4 в команде "INIT" для разметки диска в дисководе типа "Teac" (FD55). Значения V=[14] были заразервированы для драйвера форматирования диска 720 Кб по томам, который так и не был реализован в ДОС. (Однако ДОС предусматривает работу с таким диском, если он уже отформатирован; это можно сделать, например, с помощью программы "FORMAT VOLUME" фирмы "Friends' Software".)

5) Исправление подпрограммы холодного старта в системе "Монитор".(Если ¤3F3%#¤A5■¤3F4, то ПЭВМ должна произвести поиск дискового контроллера и если он есть, то перезагрузиться. Однако вместо этого она "подвисала", выполняя STA ¤C0F0!).

6) Исправлена команда интерпретатора "CLEAR", которая не только обнуляла все переменные (что и должна была делать), но еще умудрялась портить все имена переменных в программе. Кроме этого Кривцов решил проявить эрудицию, сделав в команде "CLEAR" выдачу текста программы в формате поиска/замены. Очевидно он не подумал о том, что команду "CLEAR" возможно захочется использовать в качестве оператора в программе. В этом случае пользователю "предлагалось" просмотреть весь ее текст, возможно в самом наподходящем для этого месте (не говоря уже о том, какую радость будет испытывать при этом программист). Естественно такая экзотика была устранена. (Причем в "родном" APPLESOFT BASIC, команда "CLEAR" работала именно так, как работает после исправлений.)

7) Был улучшен параметр DCT+6 (задержка при движении головки НГМД FD55.F) в ДОС. Теперь дисковод не издает такие ужасные звуки, которые он издавал раньше. Причем надежность работы ничуть не уменьшилась.

2] НОВЫЕ ОПЕРАТОРЫ ИНТЕРПРЕТАТОРА "BASIC-MASTER"

Стандартный интерпретатор "Бейсик" имел пять команд для работы с магнитофоном: "LOAD", "SAVE", "STORE", "RECALL" (не путать с аналогичными и работающими командами ДОС) и "SHLOAD". Кроме того, что они потеряли свою актуальность при привязке интерпретатора к ДОС в ПЭВМ АГАТ-9, в отличии от APPLE IIE, но они еще и не работают, т.к. самих подпрограмм чтения/записи на магнитную ленту в системе нет. (Благодарите за это разработчиков). Итак, у меня было два пути: либо вставить недостающие подпрограммы (что вполне реально), либо наоборот - убрать подпрограммы этих операторов (при этом появляется возможность вставить другие полезные команды). Я выбрал второй путь, т.к. работа с магнитофоном при наличии ДОС в наше время вряд ли нужна. Убрав все лишнее, я внес в интерпретатор следующие команды:

1) PAL=n, n=[14] - включить палитру с номером n. Значение n должно быть числом или переменной. Если значение n нецелое, то оно будет округлено в меньшую сторону. Номера палитры соответствуют техническому описанию ПЭВМ АГАТ-9. Может использоваться как оператор и как директива.

2) PLAY X,Y - выдать на динамик звук частотой X, длительностью Y (однобайтовые числа или переменные). Команда может использоваться как оператор и как директива. Значения X и Y предствлены в условны единицах и соответствует описанию по книге Мымрина "Конструкция, применение, программирование и ремонт ПЭВМ АГАТ" (изд. "Машиностроение" 1990 г.). Краткая таблица значений тональностей и длительностей нот приводится ниже:

-------------------------------------------------
!  нота  ! малая октава ! 1 окт ! 2 окт ! 3 окт !
!--------!--------------!-------!-------!-------!
! до     !              !  192  !  96   !  48   !
! до#    !              !  184  !  92   !  45   !
! ре     !              !  171  !  85   !  42   !
! ре#    !              !  160  !  80   !  40   !
! ми     !              !  152  !  76   !  38   !
! фа     !              !  144  !  72   !  36   !
! фа#    !              !  136  !  68   !  34   !
! соль   !    255       !  128  !  64   !  32   !
! соль#  !    240       !  120  !  60   !  30   !
! ля     !    228       !  114  !  57   !  28   !
! ля#    !    214       !  108  !  54   !  26   !
! си     !    204       !  102  !  51   !  25   !
-------------------------------------------------

Примеры длительностей:

------------------------
  1/2        255
  1/4        128
  1/8        64
  1/16       32
  1/32       16
  1/4+1/8    192
  1/8+1/16   96
  1/16+1/32  48
------------------------

3) RESTART - холодный старт интерпретатора "Бейсик". Производится поиск контроллера диска в направлении слот 1 6, и перезагрузка, если он найден. Если контроллер не найден, то интерпретатор производит переустановку векторов ¤3F0-¤3FF и переходит на ¤E000 (вызвав начальные установки интерпретатора). Командой удобно пользоваться для перезагрузки машины. Может являться оператором и директивой.

4) INPKEY K,VAR - считать символ с клавиатуры в переменную VAR, выдав при этом знак приглашения с кодом K (однобайтовая переменная). Параметр VAR должен соответствовать типу вводимой переменной. В принципе оператор аналогичен оператору "GET", но принципиально отличается следующим:

- считывает только с клавиатуры (GET может читать, например из файла)

- можно задать код приглашения (GET всегда выдает знак "?")

5) DR=n - включить драйвер с номером n из таблицы "Диспетчера" резидентных драйверов (см. соответствующее описание). Применяется для работы с Библиотекой драйверов операторов фирмы "Friends' Software", расширяющей возможности интерпретатора. Может быть использована, как оператор и как деректива. DR=0 очищает таблицу "Диспетчера" и отключает все драйвера, приводя систему в начальное состояние.

6) HELP - выдать COPYRIGHT, повествующий о разработчиках системы.

3] НОВЫЕ ВОЗМОЖНОСТИ ПРОГРАММЫ "МОНИТОР"

В связи с написанием новых команд к интерпретатору "Бейсик", в "Мониторе" "BASIC-'MASTER'95" появились следующие подпрограммы:

SETPAL - включить палитру (адрес подпрограммы ¤FF03).

Номер палитры должен быть в регистре A (от 1 до 4).

SOUND - выдать звук (адрес подпрограммы ¤FF16).

При этом в ячейках ¤3E - частота       | в условных
                   ¤3F - длительность  | единицах

Величины частоты и длительности соответствуют описанию в книге Мымрина указанной выше для команды "PLAY".

RESTART - холодный старт системы "Бейсик" (адрес подпрограммы ¤F866). (Описание работы см. выше.)

Кроме этого в "Монитор" интегрированы следующие подпрограммы, расширяющие возможности редактирования вводимой строки:

- DELCHAR - убрать символ под курсором (адрес подпрограммы ¤FCED), подпрограмма срабатывает в системе при нажатии клавиши "f1". Работает в системе "Монитор", "Бейсик" и "ДОС"

- INSERT BLANK - вставить пробел на место курсора, при этом остаток строки справа от курсора сдвигается на один символ вправо (адрес подпрограммы ¤FED5). Работает в системе аналогично предыдущей подпрограмме при нажатии клавиши "f2".

Эти подпрограммы были скопированы автором из программы "СИСТЕМНЫЙ МОНИТОР".

4] ОПИСАНИЕ работы "Диспетчера" поддержки драйверов

расширения возможностей интерпретатора "Бейсик"

(версия 2.00) интегрированной в среду "BASIC-'MASTER'95".

Введение

Как известно интерпретатор "Бейсик" позволяет расширять набор своих команд через свободное ключевое слово амперсанд, "&"; эту возможность использует фирма Friends' software при создании своих драйверов, возможно известных читателю. Однако, основное неудобство такой возможности связано с тем, что система DOS-BASIC имеет один вектор, "&", с которого начинается дальнейшая интерпретация. В то же время пользователь (или начинающий программист), невладеющий навыками программирования на языке Ассемблера, не может собрать специальный драйвер к собственной Бейсик-программе из Библиотечных модулей, предлАД─В∙C┬@├└A╤%∙!УЕ¤A90ШAЬЁЗ0О1'gЗ!Яxlё╟{╧ф¤d ╚8 'щушх╧р ?▀/X,\├╧╨┴▀╚┼▐#П╧√└aМ@ДpnuЁД│╚ВSвXA@ВАxRxppxxxp`xpx`@x`@@pbxx@Hx@x@@xx@fx`bxHx@xBx`pBx@xx`xы, которые были бы нужны в каждом конкретном случае. Это заставляет автора Бейсик-программы перегружать их с диска по мере необходимости, что очень неудобно, т.к. отнимает много дискового пространства и увеличивает время выполнения вашей программы.

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

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

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

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

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

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

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

Система располагается с адреса ¤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), сигнализирующем о невыполненной задаче.

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

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

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

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

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

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

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

Как известно, в стандартном интерпретаторе "Бейсик-Агат 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") и все стандартные драйверы фирмы уже существуют для данной системы.

6] Описание драйверов расширения возможностей ДОС 3.3

6.1 Драйвер управления виртуальной дисковой памятью VIRT128

интегрированный в ДОС 3.3 среды "BASIC-'MASTER'95"

1. Назначение

Драйвер управления виртуальной дисковой памятью VIRT128 (версия 28.04.95) предназначен для эмуляции оперативной памяти модулей дополнительного ОЗУ (при наличии их в ПЭВМ) в качестве дискового устройства хранения информации. При этом память указанных областей будет организована по типу дисковой памяти. Доступ к виртуальному дисковому пространству осуществляется с помощью специальной программы виртуальной RWTS (Read/Write Trek/Sector), входящей в состав драйвера через общую RWTS среды ДОС на уровне сэмулированных треков и секторов. Таким образом ДОС может обращаться к виртуальному диску на всех уровнях своей организации (RWTS, менеджера файловой системы, и уровне команд), выполняя свои обычные функции.

Удобство работы пользователя с виртуальным диском очевидно. При использовании в системе ДОС драйвера управления виртуальной дисковой памятью (минимальным требованием к его использованию является наличие одного модуля ДОП ОЗУ (ячейка ФРГ00170) в составе ПЭВМ) хранение временой информации и ее обмен становится более быстрым и удобным. Например, сразу после загрузки системы ДОС 3.3 и интерпретатора "Бейсик" весьма удобно переписать на виртуальный диск все программы, с которыми в дальнейшем предполагается работать. Последующий обмен информацией с виртуальным диском будет происходить в среднем в 10 раз быстрее чем с обычным НГМД, что особенно удобно использовать при работе с оверлейными программами или базами данных.

2. Положение драйвера в системе.

Драйвер VIRT128 в среде "BASIC-'MASTER'95" интегрирован в систему ДОС 3.3 на адреса ¤DF00-¤DFFF первой половины 8-го банка ДОС и ¤E700-¤E7FF 9-го банка. Кроме того на адреса ¤6EC-¤6FF установлена подпрограмма вызова резидентной части драйвера при старте ДОС. Некоторые изменения (необходимые для работы драйвера) внесены также в служебные подпрограммы ДОС и ее RWTS. При загрузке с системного диска среды "BASIC-'MASTER'95" осуществляется процесс форматирования всех виртуальных дисков (их количество равно количеству модулей ДОП ОЗУ в составе конфигурации ПЭВМ). При этом происходит обнуление всей памяти ДОП ОЗУ, формирование каталога диска и VTOC (таблицы оглавления каталога, VOLUME TABLE OF CONTENTS).

* Примечание: Процесс форматирования может и не выполняться драйвером. Это происходит в том случае, если ранее было произведено форматирование дисков. Такая организация процесса активации драйвера дает возможность сохранения ранее записаннной на виртуальный диск информации и неуничтожения ее в процессе рестарта системы ДОС.

3. Работа с виртуальным диском.

Организация работы с виртуальными дисками, открытыми с помощью драйвера управления виртуальной дисковой памятью, с точки зрения пользователя, ничем не отличается от работы с обычным магнитным диском в НГМД. Доступ к любому виртуальному диску на уровне команд ДОС осуществляется с помощью указания в команде номера разъема S ПЭВМ, в который установлен модуль ДОП ОЗУ. При этом, указание номера привода D и номера тома V является не обязательным (они не используются RWTS виртуального диска). При форматировании виртуальному диску всегда присваивается номер тома V=254 (¤FE).

3.1.Особенности работы команды INIT.

Команда DOS 3.3 INIT filename по отношению к виртуальному диску не производит записи на него Системы DOS и интерпретатора "Бейсик", а аналогична по своим действиям команде INIT без указания имени файла (производит разметку виртуального диска с обнулением всех секторов, создание каталога и VTOC).

Виртуальный диск может быть размечен (отформатирован) на различную емкость (собственно, диск всегда размечается на полную емкость: 32 трека * 16 секторов = 512 секторов (128 кб), однако во VTOC некоторые треки отмечаются занятыми. С этой точки зрения, возможно 4 типа форматирования виртуального диска:

1] Форматирование, производимое при старте DOS 3.3

с системного диска

При этом:

А. Форматируются все виртуальные диски сразу (их кол-во равно кол-ву модулей ДОП ОЗУ в составе ПЭВМ).

Б. Емкость свободной области каждого диска составляет 31 трек * 16 секторов = 496 секторов (17 трек (¤11) занят под каталог).

2] Форматирование командой DOS 3.3 "INIT"

(без указания имени файла).

При этом емкость свободной памяти формируемого диска составляет 30 треков * 16 секторов - 1 сектор = 479 секторов (занятыми во VTOC отмечаются трек каталога (17-й трек), трек 0 и сектор 15 31-го трека (такая карта свободной области диска формируется менеджером файлов системы DOS).

3] Форматирование командой DOS 3.3 "INIT filename".

3А]. filename указано без параметров адреса и длины файла

(формируется файл типа "A" - "Бейсик"-файл).

При таком форматировании, емкость свободной памяти составляет 23 трека * 16 секторов - 1 сектор = 367 секторов (занятыми отмечаются трек 17, треки 0-6 и сектор 15 трека 31).

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

3Б]. filename указано с перечислением параметров стартового

адреса (A) и длины (L)

(в этом случае после форматирования формируется файл

типа "B" - бинарный).

Емкость свободной области в этом случае составит 27 треков * 16 секторов - 1 сектор = 431 сектор; резервируется трек 17, треки 0-3 и 15 сектор трека 31. Записывается бинарный файл с указанным именем (filename) (емкость свободной области указана без учета размера "B"-файла).

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

3.2.Обращение к виртуальному диску на уровне RWTS и некоторые

полезные алгоритмы (для программистов).

Как известно, обращение к RWTS системы DOS 3.3 производится путем обращения к двум подпрограммам:

JSR ¤3E3 - установить адрес управляющей таблицы RWTS

JSR ¤3D9 - обращение к RWTS

Перед этим необходимо заполнить список параметров управляющей таблицы RWTS IOB, располагающейся по адресу ¤557 (ее формат для работы с НГМД ЕС5088 и ЕС 5323 подробно описан в технической документации ПЭВМ "АГАТ-9", однако автор настоящего описания считает нелишним его напомнить (см. ниже)). Обращение к виртуальному диску на уровне RWTS осуществляется точно также. Параметры IOB имеют такое же значение. Предлагаемая таблица RWTS (знаками "*" отмечены параметры, используемые VRWTS (RWTS виртуального диска) аналогична таблице, представленной в техническом описании, но также содержит формат обращения к виртуальным дискам. Остальные параметры при обращении к нему можно не указывать (однако они важны для обращения к RWTS других накопителей информации). В таблице также указаны диапазоны значений, разрешенных для использования при обращении к виртуальному диску и обычным НГМД. При несоответствии в диапазонах, RWTS возвращает код ошибочного завершения обмена (см. таблицу).

Управляющая таблица общей RWTS ДОС 3.3.

(в ДОС располагается по адресу ¤557)

┌──────────┬────────────────────────────────────────────────┐
|  БАЙТ    |             СОДЕРЖИМОЕ                         |
├──────────┼────────────────────────────────────────────────┤
|          |                                                |
|   1      |  тип таблицы = ¤01                             |
|          |                                                |
|*  2      |  S*¤10 (номер разъема НГМД, умноженный на ¤10) |
|          |                                                |
|   3      |  D (номер привода НГМД)                        |
|          |                                                |
|   4      |  V (номер тома НГМД, ¤00-игнорировать)         |
|          |                                                |
|*  5      |  номер трека: ¤00-¤22 для НГМД ЕС5088          |
|          |               ¤00-¤9F для НГМД FD55.F          |
|          |               ¤00-¤7F для НГМД FD55.E и TM65-21|
|          |               ¤00-¤3F для НГМД ROBOTRON        |
|          |*              ¤00-¤1F для виртуального диска   |
|          |                                                |
|*  6      |  номер сектора: ¤00-¤14 для НГМД FD55, ROBOTRON|
|          |                 ¤00-¤0F для НГМД ЕС5088        |
|          |*                ¤00-¤0F для виртуального диска |
|          |                                                |
|*  7      |  действие: 0-немедленное, не 0-отложенное      |
|          |                                                |
|   8      |  не используется                               |
|          |                                                |
|* 9-10    |  адрес буфера для чтения/записи                |
|          |                                                |
| 11-12    |  не используются                               |
|          |                                                |
|* 13      |  код работы:                                   |
|          |  0─включить НГМД, подвести головку             |
|          |* 1─чтение 256 байт в буфер                     |
|          |* 2─запись 256 байт из буфера                   |
|          |* 4─разметка ГМД                                |
|          |                                                |
|* 14      |  код завершения обмена:                        |
|          |* ¤00─нормальное завершение                     |
|          |  ¤10─ГМД защищен от записи                     |
|          |  ¤20─не тот номер тома                         |
|          |* ¤40─сбой в чтении/записи                      |
|          |* ¤80─нет устройства                            |
|          |                                                |
|  15      |  V (номер тома ГМД, предыдущее обращение)      |
|          |                                                |
|* 16      |  S*¤10 (номер разъема предыдущее обращение)    |
|          |                                                |
|  17      |  D (номер привода НГМД, предыдущее обращение)  |
|          |                                                |
└──────────┴────────────────────────────────────────────────┘

* Примечание: знаками "*" отмечены параметры IOB, используемые, возвращаемые или имеющие значение для VRWTS. При форматировании виртуального диска через RWTS, каталог не создается (фактически происходит очистка (обнуление) всей памяти ДОП ОЗУ).

Для обращения к виртуальным дискам из программ может быть полезно знание следующего алгоритма:

Определение разъемов, на которых открыты виртуальные диски

(определение разъемов ДОП ОЗУ).

Для этого достаточно опросить ячейки ¤4F5-¤4FA. Чтение в одной из указанных ячеек константы ¤10, указывает на наличие в разъеме N=A-¤4F4 модуля ДОП ОЗУ, где A - номер ячейки в диапазоне ¤4F5-¤4FA. Можете быть уверены, что драйвер найдет все модули ДОП ОЗУ и откроет на них виртуальные диски.

Обращение к виртуальному диску на уровне менеджера файлов происходит обычным образом (так, как при работе с НГМД) (см. в соответствующих описаниях по ДОС).

5. Рекомендации по эксплуатации интегрированного драйвера.

Надежность работы драйвера гарантируется фирмой "Friends' Software" и автором при соблюдении правил его использования и корректном обращении к виртуальным дискам.

Информация, записанная на виртуальный диск сохраняется на нем при загрузке любых систем и программ не использующих память ДОП ОЗУ. При последующем перезапуске среды DOS 3.3 можно снова получить доступ к записанной ранее информации (т.к. виртуальные диски в этом случае не форматируются; см. примечание к пунту 2). Однако, если Вы использовали системы, пользующиеся памятью модулей ДОП ОЗУ, то записанная на виртуальные диски информация может быть частично, или полностью испорчена (драйвер VIRT128 производит их полное форматирование при загрузке только в том случае, если разрушен VTOC каталога). Это неизбежно приведет к ошибкам в содержащейся на виртуальных дисках файловой информации и возможно, нарушению структуры диска и его каталогов. Во избежание указанных осложнений для уверенности в целостности дисков, рекомендуется их форматирование командой "INIT" DOS 3.3 (прибегайте к этому действию всякий раз при неуверенности в полной сохранности информации на виртуальных дисках).

Если Вы не производили загрузку других сред и операционных систем (то есть постоянно работали в среде DOS 3.3), гарантируется полная сохранность информации на открытых виртуальных дисках (естественно, в том случае, если за период Вашей работы не было отключения питания ПЭВМ).

6.2 Драйвер поддержки перемещаемых файлов RELDRIVE

интегрированный в ДОС 3.3 среды "BASIC-'MASTER'95".

1. Назначение

Драйвер RELDRIVE предназначен для загрузки в оперативную память ПК в среде ДОС 3.3 перемещаемых файлов (тип "R"). Перемещаемым называется файл, содержащий двоичный код исполняемой программы (как обычный бинарный файл типа "B") и специальную таблицу перемещения, содержащую в особом формате ссылки на абсолютные адреса внутри кодовой части. Наличие такой таблицы перемещения и особой программы загрузки файла устраняет связь файла с абсолютными адресами оперативной памяти и дает возможность располагать файл на любых физических адресах не зависимо от логического адреса организации файла. (Создание R-файлов производится Ассемблером ДОК при указании в теле исходного текста программы псевдокоманды "REL".)

Как известно, ДОС 3.3 ИКП-1 (или другого пакета) не обладает возможностями поддержки работы с R-файлами. (Такой возможностью обладала DOS TOOL KIT фирмы APPLE COMPUTER INC., созданная несколько позднее ДОС 3.3.) Настоящий драйвер RELDRIVE вносит расширение в ДОС 3.3, осуществляющее поддержку перемещаемых файлов.

2. Положение драйвера в ДОС 3.3

Драйвер RELDRIVE располагается в ДОС 3.3 на адреса ¤E800-¤E8FF 9-го банка основного ОЗУ. В ДОС внесены также заплаты необходимые для работы драйвера.

3. Организация поддержки перемещаемых файлов.

Поддержка работы с перемещаемыми файлами (R-файлами) реализуется драйвером RELDRIVE путем его подключения к командам "BRUN" и "BLOAD" среды ДОС 3.3. Команда ДОС "BLOAD" с помощью RELDRIVE осуществляет загрузку R-файла в оперативную память. Если адрес загрузки в команде не указан, то загрузка файла производится с его логического адреса (хранится в самом файле). При указании в теле команды произвольного стартового адреса, загружаемый файл располагается в памяти ПЭВМ с указанного адреса. Одновременно производится "настройка" адресов команд R-файла на абсолютные адреса ОП с учетом нового начального адреса. Команда ДОС "BRUN" в отношении R-файлов действует аналогично команде "BLOAD", но осуществляет также запуск файла, передавая управление на его начальный адрес.

4. Примечания (для программистов).

К сожалению, из-за ошибки, допущенной разработчиками системы "Ассемблер ДОК" нельзя использовать в исходном тексте создаваемого R-файла псевдокоманду Ассемблера "DDB". (Иначе настройка R-файлов будет производиться неверно!) Однако драйвер RELDRIVE способен различать атрибут метки для адреса, задаваемого псевдокомандой DDB в таблице перемещения R-файла (равен ¤21), то есть в нем зарезервирована возможность его правильного пересчета. В системе "FAST ASSEMBLER" Громова С., работающего в среде BEST TOOL KIT 5.0 устранена указанная ошибка; поэтому R-файлы, создаваемые в нем не имеют вышеописанного ограничения.

ПРИМЕЧАНИЯ

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

10 IF PEEK(¤E006)=¤AA THEN 30: REM EXEC PROGRAMM
20 PRINT "Программа для среды 'BASIC-MASTER'95":END
30 REM PROGRAMME TEXT

...

В ячейке ¤E006 "BASIC-'MASTER'95" храниться число ¤AA (в стандартном интерпретаторе ¤79, в системе "BASIC-MASTER" - ¤2C). Это и используется в предложенном алгоритме как отличительный признак систем.

2. Программы, созданные для интерпретатора "BASIC-MASTER" будут работать в "BASIC-'MASTER'95" без каких-либо ограничений (т.к. в "BASIC-'MASTER'95" введение новых команд (по сравнению с "BASIC-MASTER" не производилось). Однако указанное замечание не распространяется на драйвера расширения возможностей интерпретатора "Бейсик" фирмы "Friends' software", созданные для "BASIC-MASTER". Эти драйвера в отдельности будут работать в среде "BASIC-'MASTER'95" без каких-либо ограничений, однако не будут поддерживать мультидрайверную систему "Диспетчер" 2.0, интегрированную в новую среду. Вследствие этого Бейсик-программы, использующие несколько драйверов расширения возможностей интерпретатора также работать не смогут. Новые драйвера, создаваемые для системы "BASIC-'MASTER'95" смогут работать только в данной среде. При попытке запустить их на старых системых выдается "ОШИБКА УСТАНОВКИ". Таким образом поддерживается принцип совместимости "снизу вверх".

3. Всвязи с интегрированием в "BASIC-'MASTER'95" новой системы "Диспетчер" (версии 2.0) был изменен адрес начала хранения Бейсик-программы пользователя. В настоящей системе программа пользователя располагается с адреса ¤1A01 (в старых системах с адреса ¤1901). Освободившиеся адреса ¤1900-¤191A заняты таблицей "Диспетчера" (см. выше). Адреса ¤191B-¤191F зарезервированы под вспомагательный сумматор для чисел с плавающей запятой (для будущих драйверов расширения возможностей "Бейсика"), адреса ¤1920-¤1971 отводятся под рабочую область интерпретаторов драйверов (по стандарту от 23.09.95 буферы, флаги и служебные ячейки интерпретаторов драйверов расширения возможностей "Бейсика" располагаются не в теле драйверов, а в указанной рабочей области (что естествено экономит ОП). Адреса ¤1972-¤19FF пока не используются, однако зарезервированы автором для дальнейшего развития системы.

4. Многие программисты уже пытались вносить какие-либо изменения в стандартную систему BASIC A9.1 и DOS 3.3 или строить на их основе свои системы. Считаю почти все эти попытки грубыми и абсолютно некорректными, поскольку все изменения вносились с позиции соображений автора и нисколько не учитывались их последствия на работе среды в целом. Кроме этого существуют среды в которые внесены изменения незаметные "на глаз". Для системного программиста-профессионала несложно отличить основную версию от переделанной. Однако прикладному программисту для этого, как правило, нехватает знаний. Разработчики ДОС 3.3 для АГАТ-9 позаботились о том, чтобы "чайник" не мог внести изменений в системные подпрограммы. Для этого они предусмотрели подпрограмму подсчета контрольной суммы системы, которая работает всякий раз при командах DOS "FP" и "INIT". При внесенных изменениях в систему выдается ошибка "СИСТЕМА ИСПОРЧЕНА". Однако некоторые умельцы нашли способ обойти и этот нюанс при переделках системы. Они просто отключают подрограмму "SYSVRFY" (см. исходный текст DOS) вставляя команду "RTS" в самое ее начало. Вы всегда можете проверить это следующим способом:

}CALL-151

*C118:0

*3EE3L

Если в ячейке ¤3EE3 при этом храниться байт ¤60 (RTS), то Вы работаете с системой, в которую внесены кикие-то изменения. Причем сделал это программист не являющийся специалистом в данной среде. Старайтесь не пользоваться такими средами т.к. никто не знает, что от них можно ждать. Новая система "BASIC-'MASTER'95" имеет нормальную подпрограмму контроля за суммой системы с исправленными таблицами контрольной суммы по сравнению со стандартной системой.

5. Система поставляется на защищенном системном диске

с ускоренной загрузкой в двух версиях:

USER VERSION (в системе запрещена команда "INIT filename")

MASTER VERSION (команда "INIT filename" работает обычно)

Версия "MASTER" предназначена только для узкого круга профессионалов и автора системы. Эта версия позволяет создавать другие системные диски, лишенные защиты от копирования. Версия "USER" предназначена для всех программистов и пользователей и лишена такой возможности.

ОТ АВТОРА

Автор настоящей системы Серков С.В. (он же автор описания, которое Вы читаете, ученик Волкова И.М.) посвятил изучению системы DOS 3.3 и интерпретатора "Бейсик" около пяти лет. Причем для этого были изучены описания соответсвующих "фирменных" систем (APPLE) и их исходных текстов (не говоря уже о том сколько бессонных ночей было проведено при "раскопках" информации методом "научного тыка"). Автор настоящего описания, понимает насколько оно может показаться скупым и непонятным непрофессионалу. Однако чтобы составить доходчивое и очень полное описание потребовалось бы значительное количество времени. За неимением такового автор просит по любым непонятным вопросам, связанным с работой DOS 3.3, "Бейсик", "BASIC-MASTER" и "BASIC-'MASTER'95" обращаться к нему лично, либо в компьютерный центр "USN". Там же Вы можете приобрести пакет прикладных программ "MASTER II PROFESSIONAL PROGRAMMS", переработанный под новую систему "BASIC 'MASTER'95" и (для программистов) - фирменный диск с библиотекой исходных текстов "Системы расширения возможностей интерпретатора "Бейсик" для новой среды.

17.11.95. Friends' software
          Серков С.В.
          (095) 400-6865
[an error occurred while processing this directive]