***************************************************************
*                                                             *
*        С И С Т Е М Н Ы Е   В Ы З О В Ы   H C   D O S        *
*                   v.2.1, сентябрь 1992г.                    *
*                                                             *
***************************************************************

  При работе система располагается в 4-й странице ОЗУ с адреса
110000 (все адреса даны в восьмеричной системе). Ее длина -
около 9 Кбайт, с адреса 132000 располагается системная область
для каталога. При чтении-записи файлов из системы с адреса
40000 подключается 1-я страница. При использовании в програм-
мах пользователя системных прерываний может быть подключена
любая другая страница, но нежелательно подключать 4-ю.
  Часть ОС загружается в 7-ю страницу.
  При запуске программы из системы производится разблокировка
клавиши 'СТОП', устанавливается режим 64 символа в строке и
включается курсор.
  Кроме того, в ячейке 34 хранится адрес обработки TRAP-запро-
сов, а в ячейке 10 - адрес обработки команд расширенной арифме-
тики MUL,DIV,ASH (Примечание: обработчик не устанавливает
признаки N,Z,V,C после выполнения этих команд). Поэтому если
программа не изменяет содержимое этих ячеек для своих нужд,
то для использования системных вызовов должна быть подключена
4-я страница с адреса 100000.
  При вызове TRAP-подпрограмм необходимо, чтобы ячейка 10 сох-
ранила свое старое значение - это прерывание используют, нап-
ример, подпрограммы записи-чтения.
  Обращение к системным подпрограммам возможно и по адресам:
начало таблицы адресов - 110100. По этому адресу содержится
адрес обработки прерывания TRAP 0.
  Адрес 110000 является холодным адресом входа в систему из
программ пользователя. При запуске программы из системы уп-
равление ей передается командой JSR PC, и вход в систему воз-
можен также по команде RET, если значение указателя стека не
изменялось. В любом случае в систему можно войти из монитора
командами 4;1C и 110000G.
  Распределение памяти на дисковом пространстве (по блокам):

0        - начальный загрузчик.
1 - 6    - каталог.
7        - в первом слове блока записана дата.
10       - зарезервирован.
11 - 32  - ОС.
33       - зарезервирован.
34-3077  - файлы.

  Если на диске нет системы и он проинициализирован соответст-
вующим образом, то область кранения файлов начинается уже с
10-го блока.
  По сравнению с версией 2.0 изменено распределение системных
областей на диске, но это не влияет на совместимость.
                        * * * * *

TRAP 0 - установка режимов экрана и клавиатуры: стирание экр.,
       подчеркивающий курсор, выключение звука и отмена режимов
       подчеркивания, инверсии и др.
TRAP 1 - ввод символа с клавиатуры в R0.Во время ожидания ввода
       мигает курсор, при переключении регистров РУС-ЛАТ появ-
       ляется соответствующий индикатор. При нажатии клавиши
       'КТ' происходит выход в систему. Реализован автоповтор.
TRAP 2 - ввод строки с редактированием - R0 - адрес,R1 - длина.
       действие аналогично EMT 35, но дополнительно обрабатыва-
       ются клавиши со стрелками.
TRAP 3 - выключение курсора.
TRAP 4 - включение курсора.
TRAP 5 - добавить в буфер клавиатуры символ в R0.
TRAP 6 - печать восьмеричного числа без знака в R0.
TRAP 7 - печать десятичного числа со знаком в R0, в R1 - фор-
       мат(число знаков).
TRAP 10 - ввод с клавиатуры восм. числа без знака в R0.
TRAP 11 - ввод десятичного числа без знака.
TRAP 12 - не реализовано.
TRAP 13 - установка точки экрана для индикации РУС-ЛАТ, младший
        байт R0 - координата Х, старший - У. Если R0 = -1, то
        индикация не производится.
TRAP 14 - изменение и чтение даты. Если в R0 находится -1, то
        в него помещается текущая дата. Любое другое число рас-
        сматривается как новая дата.
TRAP 15 - чтение каталога с диска по адресу 132000. Формат ка-
        талога приведет в приложении.
ПРИМЕЧАНИЕ. При чтении каталога, если обращение производится к
тому же приводу, что и при предыдущем чтении, считается, что
каталог уже прочитан и никаких действий не производится. Если
обращение производится к каталогу на другом приводе, он загру-
жается в память. Это позволяет сократить число обращений к
диску и ускоряет работу. Кроме того,такая система предполагает,
что установленный диск не меняется. Чтобы в любом случае загру-
зить каталог, служит прерывание TRAP 42.

TRAP 16 - запись каталога по адресу 132000.
TRAP 17 - печать даты, дата - в R0. 15-11 биты - число, 10-7 -
        месяц, 6-0 - год.
TRAP 20 - запись файла на диск. R0 - адрес блока параметров:

         смещение
            0    адрес файла в памяти
            2    длина
            4    адрес файла для чтения - заносится в каталог.
            6    имя
            10   имя
            12   имя
            14   имя
            16   имя
            20   имя
            22   расширение
            24   расширение
            26   0 - добавить файл,
                 1 - записать на старое место, если такой файл
                 уже существует, если нет - создается новый.
            30   0 - записать под текущей датой
                 не 0 - установить другую дату.


   При ошибке в ячейке 52, кроме описанных в руководстве
   системного программиста, может быть значение 20 - мало
   памяти. Если ошибки нет, заносится 0. При ошибке записи
   ошибки не возникает, но сбойные блоки каталога помечаются.

TRAP 21 - чтение файла. R0 - номер файла в каталоге, R1 :
        0 - чтение по адресу в каталоге,
        не 0 - чтение по этому адресу.

   Ошибки: 20 - неправильные параметры файла - он перекрывает
   системную область.
           21 - файл с таким номером не найден.
TRAP 22 - определение номера файла в каталоге. В R0 - адрес
        блока параметров (см. выше), значащими являются толь-
        ко 6-25 байты с именем. Если на диске два файла с оди-
        наковыми именами, находится последний.
        На выходе:
        В R0 - или номер,или число 377, что означает отсутст-
        вие файла.
        В R1 - адрес блока данных о файле в каталоге, формат
        см в приложении 2.
TRAP 23 - чтение с клавиатуры имени файла для чтения - записи
        в блок параметров (см. выше), адрес которого в R0.
        При вводе расширение от имени отделять пробелами необя-
        зательно - оно автоматически сдвигается.

  Следующие команды связаны с обработкой командной строки. При
вызове файла с системного диска НЕ командой RUN, можно ставить
после его имени операнды. Например, при вызове ассемблера мож-
но указать имя файла:

ASSD B:PROBA.TXT

  Набранная команда размещается в буфере длиной 100 байт, текст
заканчивается 0. Текст в буфере условно делится на фразы:"ASSD"
является первой фразой, "B:PROBA.TXT" - второй. Фразы отделяют-
ся пробелами.

TRAP 24 - загрузить адрес командного буфера в R0.
TRAP 25 - найти адрес следующей фразы. Применимо к вышеуказан-
        ному примеру, даст адрес фразы "B:PROBA.TXT", если 
        перед этим было TRAP 24.
TRAP 26 - занести все встретившиеся ключи в буфер. Ключ ставит-
        ся либо без пробелов после имени команды, либо в самом
        конце. В буфер побайтно заносятся все встретившиеся
        первые буквы ключей. Буфер состоит из 40 байт, каждый
        из которых устанавливается или сбрасывается в соответст-
        вии с указанными ключами. Нулевому байту соответствует
        ключ '/@'` 37-му - '/_'. Набор ключей не зависит от ре-
        гистра. R0 при выполнении операции НЕ используется.
TRAP 27 - занести в R0 адрес буфера ключей.
TRAP 30 - определение нужного привода и изменение соответст-
        вующих переменных в системе. Пример: в R0 находится
        адрес фразы "B:PROBA.TXT". После выполнения команды
        значение в R0 увеличится на 2, а в качестве дисковода
        будет установлен дисковод B. Если в операнде нет имени
        дисковода ("PROBA.TXT"), значение R0 не изменится,
        в качестве дисковода будет установлен текущий.
TRAP 31 - занесение имени файла в буфер маски. После выполнения
        R0 указывает на байт,следующий за именем. В имени могут
        быть символы '*','?', символ отрицания.
TRAP 32 - найти в каталоге адрес следующего файла по маске.
        В начале в R1 должен быть адрес #KATALOG+1440-26, где
        KATALOG=132000. Первые 1440 байт в каталоге отведены
        под карту диска, далее следуют данные о файлах, каждый
        файл отбирает 26 байт. Если после окончания операции в
        R1 находится адрес #KATALOG+5670, то поиск окончен.
        В вышеуказанном примере после операций:

  KATALOG=132000
  .......
  TRAP 24
  TRAP 25
  TRAP 30
  TRAP 15 ; каталог читается с указанного в команде привода.
  TRAP 31
  MOV #KATALOG+1412,R1
  TRAP 32

        В R1 будет адрес в каталоге файла PROBA.TXT, или число
        #KATALOG+5670.

TRAP 33 - занесение в R3 адреса блока параметров для дисковода.
        Не рекомендуется использовать свой блок, т.к. при выхо-
        де в систему может произойти сбой.
TRAP 34 - выключение двигателя. Не забывайте выключать двига-
        тель - это экономит электроэнергию и бережет дисковод!
TRAP 35 - определить, есть ли в масе знаки '?' или '*'. Если
        нет, то в R0 - ноль, иначе другое число. Присутствие
        одного из этих знаков означает, что задана групповая
        операция над файлами.
TRAP 36 - занесени в R0 адреса маски. Длина буфера маски - 20
        байт.
TRAP 37 - переслать параметры из каталога (адрес в R1) в блок
        параметров для записи-чтения (адрес в R0). Пересылаются
        адрес, длина, дата и имя файла. Признак записи на ста-
        рое место обнуляется. Может применятся для операций
        записи.
TRAP 40 - занести в R0 номер файла в каталоге, причем R1 ука-
        зывает на файл в каталоге. Может применятся для опера-
        ций чтения.
TRAP 41 - занести в R0 адрес системной переменной SYSUNIT.
        Вслед за этой переменной идут переменные NOWUNIT I
        MAINUNIT. Они принимают значения 0 и 1:

        SYSUNIT - номер дисковода для операций записи и чтения.
                  Привод 0 - устройство A:, 1 - B:.
        NOWUNIT - номер текущего привода.
        MAINUNIT- номер системного привода.

TRAP 42 - чтение каталога с диска (см. в описании TRAP 15).

  Работа с принтером через TRAP - запросы осуществляется с ис-
пользованием загруженного драйвера.

TRAP 43 - печать символа в R0.
TRAP 44 - печать строки, адрес в R0, конец строки - 0.
        Если после выполнения этой или предыдущей команды в
        байте 52 находится ненулевой число, то при использова-
        нии штатных драйверов это означает, что была нажата
        клавиша 'КТ'. После этого операции с печатью лучше все-
        го прекратить.
TRAP 45 - печать восьмеричного числа.
TRAP 46 - печать десятичного числа со знаком, аналогично TRAP 7
TRAP 47 - печать даты.
TRAP 50 - чтение массива с диска.
TRAP 51 - запись. R0 - номер блока,R1 - длина массива,R2 -адрес
         чтение и запись производятся с текущего устройства,
         возможно даже с электронного диска.
TRAP 52 - возврат в систему с печатью сообщения об ошибке.
        Адрес текста - в R0.

  Следующие прерывания предназначены для работы с последователь
ной записью-чтением файлов на диск. Одновременно может быть
открыто не более чем по одному файлу на запись и на чтение.
Один файл может быть открыт одновременно на запись и чтение.Все
операции производятся с учетом установленной переменной NOWUNIT
Если производится чтение с одного привода и запись на другой,
необходимо своевременно изменять значение этой переменной,
иначе при записи возможы сбои.
  В операциях используются два внутренних буфера по 1 Кбайт.

TRAP 53 - открыть файл для чтения. В R0 - адрес блока парамет-
        ров. Если файл не найден, в ячейке 52 ошибка (не 0).
TRAP 54 - открыть файл для записи. В R0 - адрес блока парамет-
        ров. Не играют роли параметры длины и адреса для запи-
        си.
TRAP 55 - прочитать очередной байт открытого файла в R0. Если
        конец файла, ошибка 20, файл не открыт - ошибка 21.
TRAP 56 - запись очередного байта из R0 в открытый для записи
        файл. Переполнение диска - ошибка 20, файл не открыт -
        21.
TRAP 57 - закрыть файл для чтения.
TRAP 60 - закрыть файл для записи. После этих опций выключает-
        ся двигатель диковода. При последовательной записи
        можно создавать файлы большой длины - до 64 Кбайт.
        Прочитать файлы длиной более 35.5 Кбайт можно только
        с помощью последовательного чтения.

TRAP 61 - 67 - зарезервированны.

TRAP 70 - число дорожек в R0 - 40 или 80.


  При написании собственных драйверов принтера следует учиты-
вать, что начинаться он должен словами 240,241 и иметь длину не
более 350 байт. Желательна обработка клавиши 'КТ', при нажатии
на которую в байт 52 заносится 1 - признак ошибки. Драйвер дол-
жен заканчиваться кодом 207 (RET). Адрес для драйвера не важен.
Прдедполагается, что на вход подается в R0 - код символа,
в R1 - число 177714. Содержимое остальных регистров необходимо
сохранять.
  Штатные драйверы также приостанавливают печать при нажатии
любой клавиши, кроме 'КТ'.
  При написании драйвера диска Е длина его не должна превышать
310 байт, начинаться он должен с кодов 240,242. Выполнять драй-
вер должен функции, описанные для TRAP 50 и 51. При вызове под-
программы в R5 помещается код: 1-запись, 0-чтение. Содержимое
регистров сохранять не обязательно.
  Возможно также написание драйвера дисков C и D, его признаки-
240,243. Длина его - не более 400 байт.


ПРИЛОЖЕНИЕ. Формат хранения каталога.

   смещение (от адреса 132000)
   0-     карта диска; каждый байт определяет состояние
   1437   2-х блоков, т.е 1 Кбайт на дисковом пространстве.

   1440-  разбито на 26-байтные области для каждого файла;
   5670   файл с номером 0 занимает адреса 1440 - 1465.

   Формат байта состояния 2-х блоков:
            0 - свободные блоки
            1-177 - номер файла, занимающий эти блоки.
            200  - плохие блоки.
            201  - системные блоки.

  Блок считается свободным, если соответствующий байт равно 0.
Таким образом обеспечивается оптимальное хранение файлов на 
дисках.

  Формат блока параметров файла:
  смещение
  0-13 - имя
  14-17- расширение (14 байт - точка, расширение необязательно)
  20-21- адрес (если нечетный - файл защищен).
  22-23 -длина.
  24-25 -дата.

***************************************************************

                                Борисенко М.А., 27.09.92 г.
                                Ростов-на-Дону,
                                тел. 33-18-02.







