                        ┌───────────┐
          ┌─────────────┤  D I S K  ├─────────────┐
          │▓▓▓▓▓▓▓▓▓▓▓▓▓└───────────┘▓▓▓▓▓▓▓▓▓▓▓▓▓│
          │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
          │▓▓**▓▓▓**▓▓***▓▓▓****▓*****▓****▓***▓▓▓│
          │▓▓*▓*▓*▓*▓*▓▓▓*▓*▓▓▓▓▓▓▓*▓▓▓*▓▓▓▓*▓▓*▓▓│
          │▓▓*▓▓*▓▓*▓*****▓▓***▓▓▓▓*▓▓▓***▓▓***▓▓▓│
          │▓▓*▓▓▓▓▓*▓*▓▓▓*▓▓▓▓▓*▓▓▓*▓▓▓*▓▓▓▓*▓*▓▓▓│
          │▓▓*▓▓▓▓▓*▓*▓▓▓*▓****▓▓▓▓*▓▓▓****▓*▓▓*▓▓│
          │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
          └───────────────────────────────────────┘

                   Сервисная оболочка ANDOS

                          Версия III


       (C) 1993-97 С.Е.Камнев, А.М.Надежин, Д.К.Крылов
          Программирование  - С.Е.Камнев, Д.К.Крылов
 Идеи, дизайн, описание - А.М.Надежин, С.Е.Камнев, Д.К.Крылов

 РУКОВОДСТВО ПО НАПИСАНИЮ ДОПОЛНИТЕЛЬНЫХ ПОДГРУЖАЕМЫХ МОДУЛЕЙ


    Сервисная оболочка "Disk MASTER v3.30" предусматривает воз-
можность использования  дополнительных   подгружаемых   модулей
(М-файлов), расширяющих ее возможности.
    Эти модули, которые должны иметь расширение "М", могут быть
запущены либо путем выбора их на панели оболочки, либо с коман-
дной строки. При этом соответствующий файл загружается на  свой
адрес загрузки. Затем производится проверка первого слова  фай-
ла. Оно должно быть "104130" (код ЕМТ 130), если  это  так,  то
файл считается дополнительным модулем оболочки и запускается со
второго слова, причем панели оболочки сохраняются на  экране  и
остаются доступными ее внутренние системные запросы и ячейки.
    Адрес загрузки М-файла может быть любым.  Нежелательно  ис-
пользовать адреса ниже 24000 (здесь и  далее  числа  восьмерич-
ные), т.к. это может привести к сбоям при  загрузке  и  запуске
модуля. Целесообразно располагать модули по адресу 137000, пос-
кольку в этом случае они постоянно  сохраняются  в  памяти  (до
загрузки другого модуля, или перезапуска системы) и могут  быть
вызваны в любой момент командой <СУ>+<F> оболочки (команда про-
изводит переход на адрес 137002, если по адресу 137000 находит-
ся слово 104130). Правда,  при  этом  длина  модуля  ограничена
1000.
    Ниже приведены некоторые адреса, используемые оболочкой,  а
также список  системных  ячеек  и  запросов.  Системный  запрос
(разновидность подпрограммы) вызывается  с  помощью  резервного
кода из диапазона 107002-107377, за  кодом  вызова  могут  идти
другие параметры запроса.
    Резервные коды из интервала 7000-7377 или 70000-70377 выво-
дят на экран символ, код которого совпадает  с  младшим  байтом
команды (например, 70101 - буква "A"). Вывод производится  ана-
логично запросу SYMB (см. ниже).
    Для вывода символа на экран можно использовать команду IOT,
при этом корректно будут  выводиться  текстовые  символы,  коды
200-237 будут выглядеть, как строчные латинские буквы,  некото-
рые коды 0-37 будут выглядеть, как в режиме БЛОК РЕД, а некото-
рые в виде своеобразных "иероглифов".
    Прерывание по СТОП (HALT) приводит к перерисовыванию  теку-
щей панели и переходу в режим обычной работы с ней  (аналогично
запросу PAN).

             РАСПРЕДЕЛЕНИЕ АДРЕСНОГО ПРОСТРАНСТВА

500   - буфер строчного редактора
1000  - FAT диска на левой панели
3000  - каталог диска на левой панели
12040 - FAT диска на правой панели
14040 - каталог диска на правой панели


            ДОПОЛНИТЕЛЬНЫЕ БАЙТЫ В ЗАПИСИ КАТАЛОГА
┌────────┬────────────────────────────────────────────────────┐
│Смещение│                 Назначение                         │
├────┬───┴────────────────────────────────────────────────────┤
│ 16 │признак пометки, если не =0, то данный файл или подката-│
│    │лог помечен.                                            │
│ 24 │номер подкаталога, если не =0, то данный объект - под-  │
│    │каталог с соответствующим номером.                      │
│ 25 │признак  принадлежности  подкаталогу.  Указывается номер│
│    │подкаталога, которому принадлежит данный файл или подка-│
│    │талог, если =0, то прижадлежит корневому каталогу.      │
└────┴────────────────────────────────────────────────────────┘
                РЕЗИДЕНТНЫЕ  ФЛАГИ И ПАРАМЕТРЫ
┌───────┬──────┬──────────────────────────────────────────────┐
│  Имя  │Адрес │                 Назначение                   │
├───────┼──────┼──────────────────────────────────────────────┤
│COLORB │126504│ режим оцветнения (0 - черно/белый)           │
│PRIB   │126505│ номер драйвера принтера                      │
│ILLP   │126506│ инициализирующая строка (1-й  байт  -  длина │
│       │      │ строки), выводимая  на принтер подпрограммой │
│       │      │ ANDOS INIPRN (120314)                        │
│NLIN   │126524│ количество строк для печати из режима VIEW   │
│OTSTUP │126525│ левый отступ при печати                      │
│TSS    │126531│ задержка включения хранителя экрана          │
│HSTEP  │126532│ шаг горизонтального скроллинга во VIEW       │
└───────┴──────┴──────────────────────────────────────────────┘
                      1.  АКТИВНАЯ ПАНЕЛЬ
┌───────┬──────┬──────────────────────────────────────────────┐
│  Имя  │Адрес │                 Назначение                   │
├───────┼──────┼──────────────────────────────────────────────┤
│DAB    │126540│ устройство                                   │
│DIRB   │126541│ номер текущего подкаталога                   │
│AFAT   │126542│ адрес FAT активной панели                    │
│ADR    │126544│ текущий адрес                                │
│Y      │126546│ текущая вертикальная координата указателя    │
│CWO    │126550│ контрольное слово (=@ADR)                    │
│ILIB   │126552│ индикатор режима прозрачности (0 - реж.откл.)│
│XB     │126553│ горизонтальное координата панели (1 или 41)  │
│DATEB  │126554│ режим "ДАТА/ДЛИНА" (0 - "ДЛИНА")             │
└───────┴──────┴──────────────────────────────────────────────┘
                      2. ПАССИВНАЯ ПАНЕЛЬ
┌───────┬──────┬──────────────────────────────────────────────┐
│  Имя  │Адрес │                 Назначение                   │
├───────┼──────┼──────────────────────────────────────────────┤
│DAPB   │126556│ устройство                                   │
│DIRPB  │126557│ номер текущего подкаталога                   │
│AFATP  │126560│ адрес FAT пассивной панели                   │
│ADRP   │126562│ текущий адрес                                │
│YP     │126564│ текущая вертикальная координата указателя    │
│CWOP   │126566│ контрольное слово (=@ADR)                    │
│ILIPB  │126570│ индикатор режима прозрачности (0 - реж.откл.)│
│XPB    │126571│ горизонтальное координата панели (1 или 41)  │
└───────┴──────┴──────────────────────────────────────────────┘

     ФЛАГИ И ПАРАМЕТРЫ, СБРАСЫВАЕМЫЕ ПРИ ВХОДЕ В ОБОЛОЧКУ

                      1. АКТИВНАЯ ПАНЕЛЬ
┌───────┬──────┬──────────────────────────────────────────────┐
│  Имя  │Адрес │                 Назначение                   │
├───────┼──────┼──────────────────────────────────────────────┤
│FILT   │126370│ фильтр                                       │
│NFIL   │126404│ количество помеченных файлов                 │
│NCL    │126406│ и занимаемых ими кластеров                   │
│TDA    │126410│ таблица параметров привода                   │
│FRECL  │126412│ свободно кластеров                           │
│ADR0   │126414│ базовый адрес начала каталога                │
│ADR1   │126416│ адрес начала каталога (с учетом "..")        │
│ITEGB  │126420│ индикатор режима вывода помеченных файлов    │
│ITTB   │126421│ -//- текущий (0 - режим неактивен)           │
│IMDOS  │126422│ индикатор DOS (0 - ANDOS, иначе - MicroDOS)  │
└───────┴──────┴──────────────────────────────────────────────┘
                      2. ПАССИВНАЯ ПАНЕЛЬ

FILTP=126424    фильтр пассивной панели.
Остальные ячейки аналогично активной панели.

                    3.  СПЕЦИАЛЬНЫЕ ЯЧЕЙКИ

FLAG=126460     флаг запоминания фрагмента экрана.

┌──────┬──┬──────┬─┬──────────────────────────────────────────┐
│126604│ 2│IMAST │P│Вход в оболочку. Сделать JSR R5,@RUNNER   │
│      │  │      │ │.WORD IMAST, установить свой вектор 4.    │
│      │  │      │ │После этого можно пользоваться подпрограм-│
│      │  │      │ │мами оболочки (как в М - файлах).         │
├──────┼──┼──────┼─┼──────────────────────────────────────────┤
│126606│ 2│MASTI │P│Выход из оболочки. Сделать CALL @MASTI.   │
│      │  │      │ │Восстанавливаются вектора, установленные  │
│      │  │      │ │до входа в оболочку.                      │
└──────┴──┴──────┴─┴──────────────────────────────────────────┘

     Используя эти  ячейки  можно во время работы программы по
мере необходимости входить в оболочку и выходить  из  нее,  но
надо  помнить,  на  какие  адреса загружает оболочка каталог и
FAT,  и что подпрограммы с кодом вызова 107200 и выше загружа-
ются  на  23200 и не использовать такие подпрограммы,  которые
погубят Вашу программу. Некоторые испортят Вам стек.
    Подпрограммы чтения кода с клавиатуры (INPUT,  INPC) имеют
таймер включения "звездочек",  выдающий код 5 (СУ+E),  который
надо как-то перехватывать и не использовать для других целей.


                      СИСТЕМНЫЕ ЗАПРОСЫ

Знак "*" указывает на то, что все регистры сохраняются (за ис-
ключением тех, в которые записываются результаты  работы  под-
программы)
──────────────────────────────────────────────────────────────
INPUT   (107002*)
    Прием символа с клавиатуры в R0.
──────────────────────────────────────────────────────────────
INPUT1  (107107*)
    Прием символа с клавиатуры в R0 без задержки при автоповто-
ре.
──────────────────────────────────────────────────────────────
SYMB    (107003*)
    Вывод символа из R0 на экран.
──────────────────────────────────────────────────────────────
LINE    (107004*)
    Вывод текста на экран, текст в виде ASCII  должен  распола-
гаться за кодом вызова, признак конца - 0-байт, если количество
символов нечетное, или 0-слово, если четное.
──────────────────────────────────────────────────────────────
LF      (107006)
    Перевод строки для печатающего устройства.
──────────────────────────────────────────────────────────────
TYP10   (107007*)
    Десятичный вывод содержимого R2. ( R2<1000. )
──────────────────────────────────────────────────────────────
DISK    (107010*)
    Вызов ANDOS-овской подпрограммы RWBLOK.
──────────────────────────────────────────────────────────────
FMET    (107011*)
    Поиск помеченного файла начиная с адреса в  R1.  Если  файл
найден, то адрес его записи в каталоге помещается  в  R1,  если
нет, то устанавливается бит Z (=0)
──────────────────────────────────────────────────────────────
SPA     (107014*)
    Смена активной панели
──────────────────────────────────────────────────────────────
FIL     (107015*)
    Проверка совпадения имени файла (подкаталога) (адрес записи
в R1) и фильтра. Если имя не соответствует фильтру, то устанав-
ливается бит "C", если   обнаружен   признак   конца   каталога
(@R1=0), то бит "Z".

Пример использования:

;       ПОИСК ФАЙЛОВ НА БУКВУ "А", СРЕДИ ВЫВЕДЕННЫХ НА ПАНЕЛЬ

        MOV ADR0, R1    ;загрузка адреса начала каталога
        BR 1$
2$:     ADD #40, R1     ;переход к следующей записи
1$:     .WORD FIL
        BEQ 3$          ;проверка конца каталога
        BCS 2$          ;проверка на соответствие фильтру
                        ;если не соотв., то переход к
                        ;следующей записи
        CMPB @R1, #'A   ;проверка первого символа записи
        BNE 2$
;       ФАЙЛ НАЙДЕН
        ...
3$:
;       КОНЕЦ КАТАЛОГА - ФАЙЛ НЕ НАЙДЕН
        ...

Сравнение производится по нескольким признакам:
1. При включенном режиме вывода помеченных файлов -  ТОЛЬКО  по
признаку пометки.
2. По принадлежности текущему подкаталогу (в "прозрачном" режи-
ме игнорируется).
3. Сравнение 11-и символов имени с фильтром (адрес  FILT),  при
этом 0-байты фильтра соответствуют ЛЮБОМУ символу имени.
──────────────────────────────────────────────────────────────
SR1     (107020*)
    R1=ADR0-40
──────────────────────────────────────────────────────────────
BLS     (107021*)
    Блокировка прерывания по клавише СТОП
──────────────────────────────────────────────────────────────
MARK1   (107023*)
    Гашение указателя текущего файла (в  R2  должна  находиться
вертикальная координата - содержимое ячейки Y)
──────────────────────────────────────────────────────────────
CUR     (107024*)
    Вкл./откл. курсора
──────────────────────────────────────────────────────────────
INPC    (107025*)
    Ввод с клавиатуры в R0 с включением курсора и гашением пос-
ле ввода
──────────────────────────────────────────────────────────────
EOF     (107026*)
    Контроль конца каталога (адрес записи в R5). Если @R5=0, то
происходит HALT-прерывание.
──────────────────────────────────────────────────────────────
CMDOS   (107027*)
     Контроль MicroDOS (если MicroDOS, то HALT)
──────────────────────────────────────────────────────────────
NAMER   (107030)
    Преобразование имени файла из формата каталога ANDOS (адрес
записи в R5) в формат блока параметров EMT 36 (с точкой, разде-
ляющей имя и расширение, и т.п.). Преобразованное имя записыва-
ется на адрес в R0.
──────────────────────────────────────────────────────────────
DIR     (107031)
    Поиск подкаталога с номером, находящемся в DIRB, адрес  за-
писи помещается в R1. Если таковой не найден, то R1=0.
──────────────────────────────────────────────────────────────
DIR0    (107032*)
    -//- с номером в R0 -//-
──────────────────────────────────────────────────────────────
FIMDI   (107033*)
    Поиск помеченного подкаталога (аналог. FMET)
──────────────────────────────────────────────────────────────
SIGNAL  (107034)
    Звуковой сигнал
──────────────────────────────────────────────────────────────
DICL    (107036*)
    Кластерная операция: R3 - номер кластера, R1 - длина, R2  -
адрес (после операции к R2 прибавляется абсолютная величина R1)
──────────────────────────────────────────────────────────────
FREE    (107037)
    Рассчет количества свободных кластеров (результат в R2)
──────────────────────────────────────────────────────────────
MFAT    (107040)
    Копирование FAT с адреса AFAT в буфер ANDOS
──────────────────────────────────────────────────────────────
FATM    (107041)
    Операция, обратная MFAT
──────────────────────────────────────────────────────────────
CMPD    (107042*)
    Сравнение приводов (если =0, значит приводы одинаковые)
──────────────────────────────────────────────────────────────
AES     (107043*)
    Установка режима кеширования по  чтению/записи  каталога  и
FAT (соответствующие блоки будут обрабатываться не на диске,  а
в каталоге оболочки)
──────────────────────────────────────────────────────────────
AER     (107044*)
     Сброс режима кеширования
──────────────────────────────────────────────────────────────
GOR     (107047)
    Горизонтальное меню. За кодом вызова располагаются несколь-
ко байтов, содержащих буквенные символы, по которым будут вызы-
ваться пункты меню (их количество  определяет  число  пунктов),
признак конца - 0. В ячейке 160 - базовый адрес  экрана,  R2  -
адрес таблицы параметров, R3 - номер текущего пункта меню. Таб-
лица параметров имеет следующую структуру (для каждого пункта):
слово - смещение относительно базового адреса
байт  - высота маркера (точек)
байт  - длина маркера (символов)
Подпрограмма помещает в R3 номер выбранного пункта меню.
──────────────────────────────────────────────────────────────
VERT    (107050)
    Вертикальное меню (аналогично GOR)
──────────────────────────────────────────────────────────────
UNBLS   (107052*)
    Отмена блокировки СТОП
──────────────────────────────────────────────────────────────
DOS     (107054*)
    Проверка DOS (если ANDOS, то =0)
──────────────────────────────────────────────────────────────
RAMKA   (107064*)
    Вывод текста в рамке. За кодом вызова идут 4 байта парамет-
ров рамки:
B1 - горизонтальная координата левого верхнего угла (X0),
B2 - вертикальная координата (координаты по стандарту EMT 24),
B3 - высота рамки (точек),
В4 - длина (символов).  Затем  идет  текст  (аналогично  LINE).
Текст может быть разбит кодами "12" на отдельные строки, каждая
строка будет иметь горизонтальное смещение X0. Фрагмент  экрана
под рамкой сохраняется в специальном буфере, если FLAG не равен
"0".
──────────────────────────────────────────────────────────────
EDIT    (107065)
    Строчный редактор. За кодом вызова идет байт, равный 300+х,
где х - левый отступ для текста, выводимого в рамке  редактора,
затем сам текст (аналогично LINE). Редактируемая строка  должна
начинаться с адреса 500 и состоять   не   более   чем   из   12
(десятично) символов (признак конца - 0).
──────────────────────────────────────────────────────────────
ENDER   (107070)
    Запись текущего каталога на диск и перерисовка панелей
──────────────────────────────────────────────────────────────
UNFILD  (107072*)
    Фрагмент, сохраненный подпрограммой RAMKA, из памяти на эк-
ран
──────────────────────────────────────────────────────────────
YN      (107073*)
    Меню YES/NO, если "YES", то программа продолжается, иначе -
прерывание по HALT
──────────────────────────────────────────────────────────────
IPR     (107074)
    Инициализация принтера (ПУ). Если принтер отключен -  выво-
дит соответствующий текст
──────────────────────────────────────────────────────────────
PRINT   (107075*)
    Печать содержимого R0 на ПУ
──────────────────────────────────────────────────────────────
INIT1   (107077*)
    Инициализации диска. Если не ANDOS, то устанавливается  бит
"С".
──────────────────────────────────────────────────────────────
DISK1   (107100)
    Дисковая операция, за кодом вызова идут: Сл.1 - номер блока
(если <0, то блок берется из R0, Сл.2 -  длина,  Сл.3  -  адрес
(если 0, то адрес берется из R2). При дисковой ошибке  устанав-
ливается бит "С".
──────────────────────────────────────────────────────────────
OTS     (107102)
    Генерация отступа при печати
──────────────────────────────────────────────────────────────
UFILD   (107103*)
    UNFILD всех запомненных фрагментов экрана
──────────────────────────────────────────────────────────────
ASC2    (107104)
    Десятичный двузначный ввод в @R3
──────────────────────────────────────────────────────────────
OTSL    (107111)
    Отступ с переводом строки печатающего уст-ва
──────────────────────────────────────────────────────────────
DONAM   (107116)
    ANDOS-овская подпрограмма DONAM
──────────────────────────────────────────────────────────────
FIFA    (107117)
    ANDOS-овская подпрограмма DIRFI2
──────────────────────────────────────────────────────────────
DRIV    (107200)
    Меню "выбор привода"
──────────────────────────────────────────────────────────────
PAG     (107202)
     Вывод панели на экран
──────────────────────────────────────────────────────────────
INIT    (107203)
    Инициализация диска (с установкой индикатора IMDOS)
──────────────────────────────────────────────────────────────
PAN     (107204)
    Переход в режим работы с панелью.  Можно  использовать  как
выход в оболочку.
──────────────────────────────────────────────────────────────
TEST    (107207)
    Проверка совпадения FAT диска с FAT текущей панели. Необхо-
димо для обнаружения подмены диска перед записью каталога.
──────────────────────────────────────────────────────────────
SAVE    (107214)
    Запись каталога активной панели на диск
──────────────────────────────────────────────────────────────
WPAN    (107216)
    Перерисовка обеих панелей (выход в режим работы с  панелями
оболочки)
──────────────────────────────────────────────────────────────
WDP     (107217)
    Дублирование панелей (выход в режим работы с панелями  обо-
лочки)
──────────────────────────────────────────────────────────────
INF     (107222)
    Вывод на экран параметров диска (files, clust., free)
──────────────────────────────────────────────────────────────
LCAT    (107223)
    Инициализация диска и чтение каталога для активной  панели.
Автоматическое преобразование каталога из формата MicroDOS.
──────────────────────────────────────────────────────────────
INDDIR  (107231)
    Вывод пути подкаталогов
──────────────────────────────────────────────────────────────
    Автор оставляет за собой право  изменять  адреса  системных
ячеек и коды системных вызовов при создании новых  версий  обо-
лочки, но будет стараться этого не делать...

                Тел.: 387-00-62, Сергей Камнев.