Среда, 28.06.2017, 11:59

..



Главная Регистрация Вход
Приветствую Вас, Гость · Браузер: « v»
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Всё об «Электроника БК0010(-01), БК0011(М)»! » Программы | Утилиты | ДОСы » Дисковые Операционные Системы (DOS) » «ANDOS v3.1» » Техническое руководство (Часть 3) («ANDOS v3.1» [ANTECH3.EDP])
Техническое руководство (Часть 3)
-=RUS=-Дата: Вторник, 22.04.2014, 22:00 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 350
Репутация: 1
Статус: Offline

                    RWBLOK - Чтение/запись

 Вызов:     CALL @120226
 Параметры: R0 - Номер блока на диске, R2 - Адрес,
            R1 - Длина в словах

     Подпрограмма производит чтение с диска или запись на диск.
Если длина, указанная в R1, отрицательна  -  происходит  запись
(длина берется по модулю). При ошибках во время операции проис-
ходит перепозиционирование головки (только для устройств 0,1) и
повтор операции; если ошибка не устранилась, на экран выводится
сообщение "ANDOS - Disk error #{номер ошибки}" и ожидается  на-
жатие любой клавиши, после которого операция повторяется.  Фун-
кция используется при любом обмене с диском.

      RWBUF - Чтение/запись в буфер ANDOS с кэшированием

 Вызов:     CALL @120222
 Параметры: R0 - Номер блока на диске, R1 - Длина в словах
 Портит:    R2

     Подпрограмма производит чтение с диска в буфер ANDOS с кэ-
шированием (если читаемый  блок  был  прочитан  в  буфер  ранее
(номер блока в буфере хранится в ячейке TEKBLK) чтение не  про-
изводится), и запись информации из буфера на диск. Если  длина,
указанная в R1, отрицательна происходит запись  (длина  берется
по модулю, а номер блока переписывается в TEKBLK). Длина никог-
да не должна превышать размера буфера (500 слов).

            RWBUF1 - Чтение в буфер без кэширования

 Вызов:     CALL @120224
 Параметры: R0 - Номер блока на диске, R1 - Длина в словах
 Портит:    R2

     Операция отличается от RWBUF тем,  что в ячейку TEKBLK на-
сильственно  заносится номер читаемого блока,  независимо от ее
старого содержания,  и чтение производится всегда.  Эта функция
нужна при смене диска. Допустимо применение функции для записи.

                 RDBLOK - Чтение блока в буфер

 Вызов:     CALL @120304
 Параметры: R0 - Номер блока на диске

     Подпрограмма читает с кэшированием указанный блок в буфер.

                WRBLOK - Запись блока из буфера

 Вызов:     CALL @120306
 Параметры: R0 - номер блока на диске

     Подпрограмма записывает содержимое буфера ANDOS в  указан-
ный блок диска.

               DIRENT - Поиск элементов каталога

 Вызов:     CALL @120212
 Параметры: Перед первым запуском очистить R0
 Результат: R4 - Адрес начала элемента (R4=0 - конец каталога)
            бит "Z" - конец каталога
 Не портить R0, R4

     Перед запуском  функции  должна  быть  выполнена  операция
INIDRV. Функция позволяет поэлементно считывать каталог  диска.
Перед первым запуском R0 должен быть очищен. При первом запуске
DIRENT считывает в буфер первый блок каталога (далее она  авто-
матически будет подчитывать блоки каталога). В R4  возвращается
адрес первого элемента каталога в буфере. При втором запуске  в
R4 будет возвращен адрес второго элемента, и так далее пока ка-
талог не кончится - в этом случае R4 будет очищен и  установлен
бит "Z". Функция не различает элементы  каталога  (заполненные,
удаленные и пустые). С первого до последнего вызова функции ре-
гистры R0 и R4 не должны портится. В R0 хранится номер текущего
блока каталога.

         DIREN2 - Поиск заполненных элементов каталога

 Вызов:     CALL @120214
 Параметры: Перед первым запуском очистить R0
 Результат: R4 - Адрес начала элемента
            бит "Z" - конец каталога
 Не портить R0, R4

     Функция отличается от DIRENT тем, что она не выдает адреса
удаленных элементов каталога и подкаталогов,  а при первом пус-
том элементе останавливается,  устанавливая бит "Z". DIREN2 ис-
пользуется при поиске файла и выводе каталога на экран.

                DIRFIN - Поиск файла в каталоге

 Вызов:     CALL @120216
 Параметры: R1 - Адрес буфера имени
 Результат: R2 - Адрес начала элемента (бит "C" - файла нет),
            R0 - Номер блока в буфере (блок каталога).
 Портит:    R0, R2, R5

     Перед запуском  функции  должна  быть  выполнена  операция
INIDRV. Подпрограмма ищет в каталоге файл с именем, адрес кото-
рого записан в R1 (имя в формате: 8 байт имени, 3 байта  расши-
рения). Адрес элемента каталога в буфере помещается в R2.  Если
в каталоге нет файла с таким именем происходит выход с установ-
ленным битом "C". В R0 помещается номер блока,  находящегося  в
буфере (один из блоков каталога).

      DIRFI2 -  Поиск файла в каталоге по имени из NAMBUF

 Вызов:     CALL @120260
 Параметры: Имя в NAMBUF
 Результат: R2 - Адрес начала элемента (бит "C" - файла нет),
            R0 - Номер блока в буфере (блок каталога).
 Портит:    R0, R1, R2, R5

     От DIRFIN отличается тем, что имя берется из NAMBUF.

         DIRFI1 - Поиск файла в каталоге (с файлером)

 Вызов:     CALL @120302
 Параметры: Имя в NAMBUF
            R3 - Адрес блока параметров EMT36 (для файлера)
 Результат: R2 - Адрес начала элемента (бит "C" - файла нет),
            R0 - Номер блока в буфере (блок каталога).
 Портит:    R0, R1, R2, R5

     От DIRFI2 отличается тем, что когда имя (первые 8 символов
буфера NAMBUF)  содержит одни пробелы, вызывается файлер.  Если
файлер отключен или испорчен, вызывается функция вывода катало-
га на экран.

       FIND - Поиск файла в каталоге с выдачей сообщения

 Вызов:     CALL @120300
 Параметры: Имя в NAMBUF
            R3 - Адрес блока параметров EMT36 (для файлера)
 Результат: R2 - Адрес начала элемента (бит "C" - файла нет),
            R0 - Номер блока в буфере (блок каталога).
 Портит:    R0, R1, R2, R5

     От DIRFI1 отличается тем,  что в случае, если файл не най-
ден, - на экран выдается сообщение "{имя файла} not found" (имя
берется из NAMBUF).

          DIRFRE - Поиск свободного элемента каталога

 Вызов:     CALL @120220
 Результат: R2 - Адрес начала элемента (бит "C" - нет эл-та).
 Портит:    R0

     Перед запуском  функции  должна  быть  выполнена  операция
INIDRV.  Подпрограмма ищет в каталоге первый свободный (удален-
ный или пустой) элемент и помещает его адрес в буфере в R2. Ес-
ли каталог заполнен полностью (112 имен файлов и подкаталогов),
происходит выход с установленным битом "C".  В R0 - номер блока
в буфере.

                   RDFAT - Чтение FAT с диска

 Вызов:     CALL @120230

     Подпрограмма читает с диска в буфер ANDOS таблицу FAT.

                   WRFAT - Запись FAT на диск

 Вызов:     CALL @120232

     Подпрограмма записывает на диск две копии FAT  из  буфера
ANDOS. Сначала записывается вторая, а потом первая копия FAT.

                GETFAT - Распаковка ячейки FAT

 Вызов:     CALL @120234
 Параметры: R0 - Номер ячейки FAT
 Результат: R0 - Содержимое ячейки

     Перед вызовом подпрограммы должна быть выполнена  операция
чтения FAT - RDFAT.  Функция распаковывает содержимое 12-битной
ячейки FAT,  номер которой указан в R0 и помещает его в тот  же
регистр.

                  SETFAT - Запись в ячейку FAT

 Вызов:     CALL @120236
 Параметры: R0 - номер ячейки, R1 - содержимое
 Результат: R0 - старое содержимое ячейки

     Перед запуском функции  должна  быть  выполнена  операция
RDFAT. Подпрограмма запаковывает  содержимое  R1  в  12-битную
ячейку FAT, номер которой записан в R0. Старое значение ячейки
помещается в R0. Подпрограмма используется при записи и удале-
нии файла.

               ERASE2 - Удаление цепочки из FAT.

 Вызов:     CALL @120310
 Параметры: R0 - кластер начала цепочки
 Портит:    R0, R1

     Перед запуском  функции  должна  быть  выполнена процедура
INIDRV. Функция считывает FAT с диска,  удаляет цепочку и запи-
сывает на диск две копии FAT.

                    ERASE1 - Удаление файла

 Вызов:     CALL @120210
 Параметры: R0 - номер блока в буфере,
            R2 - адрес записи о файле (в буфере)
 Портит:    R0, R1, R2

     Перед выполнением ERASE1 должны  быть  выполнены  функции
INIDRV и DIRFIN. Функция удаляет файл, адрес записи о  котором
помещен в R2 (запись о файле должна быть найдена в каталоге  и
соответствующий  блок  каталога  загружен  в  буфер   функцией
DIRFIN). После выполнения операции в буфере - FAT.

               FRCLAS - поиск пустого кластера.

 Вызов:     CALL @120202
 Результат: Номер пустого кластера -> R0 (бит "C" - нет)

     Перед вызовом процедуры должны быть выполнены подпрограммы
INIDRV и RDFAT. Процедура ищет первый свободный кластер и поме-
щает в R0 его номер. Если свободных кластеров на диске нет, ус-
танавливается бит "C".

    FRCLA1 - Поиск пустого кластера, начиная от указанного

 Вызов:     CALL @120276
 Параметры: R4 - кластер начала поиска
 Результат: Номер пустого кластера -> R0 (бит "C" - нет)

     В отличие от FRCLAS ищет пустой кластер не с начала,  а от
указанного кластера.

               RWCLAS - чтение/запись кластера.

 Вызов:     CALL @120200
 Параметры: R4 - номер первого обрабатываемого кластера
            R0 - признак чтения/записи (R0=0 - чтение)
            R2 - адрес начала обрабатываемого участка.
            R5 - сумма длин обрабатываемых кластеров
            R1 - ограничитель (остаток) длины
 Результат: R1 - длина остатка файла (R1<=0 - файл кончился)
            R2 - адрес остатка файла в памяти
 Портит:    R0, R4

     Подпрограмма предназначена  для  чтения/записи  одного или
нескольких кластеров.  RWCLAS позволяет  обрабатывать  за  одну
операцию несколько последовательных кластеров файла.  В R0 дол-
жен быть указан тип операции (R0=0 - чтение,  иначе запись).  В
R4 указывается номер первого, участвующего в операции кластера.
В R2 указывается адрес в памяти информации из первого обрабаты-
ваемого кластера. В R5 - суммарная длина обрабатываемых класте-
ров.  В R1 - ограничитель длины,  необходимый для  того,  чтобы
последний кластер файла читался или записывался не целиком, а в
соответствии с реальной длиной файла. После выполнения операции
в  R1  помещается  длина  оставшейся необработанной части файла
(если она оказывается меньшей или равной нулю  -  файл  обрабо-
тан), в R2 записывается адрес в памяти оставшейся части файла.

              ENAME - Поиск конца строки и точки

 Вызов:     CALL @120262
 Параметры: R3 - начало строки, R1+22. - конец
 Результат: Адрес последнего символа строки -> R0
            Адрес символа после "точки" -> R4
            Адрес последнего символа перед точкой -> R2
            бит "C" - нет имени и расширения
            бит "Z" - нет имени, есть расширение
            R4 > R0 - есть имя, нет расширения
 Портит:    R0, R2, R4

     Подпрограмма используется  при обработке имени.  Пробелы и
недопустимые символы (0-37, 200-237) не учитываются как в конце
всей строки, так и в конце имени (перед точкой).

       CONNAM - Перепаковка и логическая обработка имени

 Вызов:     CALL @120274
 Параметры: R3 - начало строки, R1+22. - конец
 Результат: Имя -> NAMBUF
 Портит:    R0, R2, R3, R4, R5

     Имя перепаковывается,  логически  обрабатывается (если имя
содержит более 8 символов,  берутся первые  семь  и  последний,
аналогично если  расширение содержит более 3 символов,  берутся
первые два и последний) и помещается в буфер имени NAMBUF.  Не-
допустимые символы (0-37, 200-237) в конце имени или расширения
не учитываются,  а  в  середине заменяются на пробелы.  Русская
заглавная буква "Е" в начале имени заменяется на аналогичную по
начертанию латинскую "E".

           DONAME - Поиск команд и перепаковка имени

 Вызов:     CALL @120272
 Параметры: R1 - адрес блока параметров EMT36
 Результат: Имя -> NAMBUF
            Бит "С" - операция с магнитофоном
 Портит:    R0, R2, R3, R4, R5

     Производится поиск  команд в строке имени,  при этом может
изменяться устройство текущей операции (DEVTEK) и устройство по
умолчанию (DEVICE), текущий режим записи (TEKWRT) и режим запи-
си по умолчанию (WREGIM), а также текущий код команды (COMAND),
который может принимать значение 200 при удалении, и значение 0
при выводе каталога на экран.  Далее  производится  перепаковка
имени (вызывается функция CONNAM).

     EXIST - Открытие файла для записи (Перезапись/Дубль)

 Вызов:     CALL @120270
 Параметры: Имя в NAMBUF
 Результат: Бит "C" - файла нет
 Портит:    R0 - R5

     Перед вызовом  функции  должна  быть  выполнена  процедура
INIDRV. Функция ищет в каталоге указанный файл, и если он обна-
ружен,  выдает на экран запрос "{имя файла} exist P/D:" (если в
ячейке TEKREG значение,  отличное от кода букв "P" и "D" на лю-
бом регистре) или выполняет действие,  соответствующее  коду  в
этой ячейке ("P" на любом регистре - файл удаляется, "D" на лю-
бом регистре - расширение файла заменяется  на  ".BAK",  причем
старый .BAK файл, если он конечно был, удаляется). То же проис-
ходит и при вводе соответствующего символа с клавиатуры.

             DOUBLE - Переименование файла в .BAK

 Вызов:     CALL @120264
 Параметры: Имя в NAMBUF
 Портит:    R0, R1, R2, R5

     Фрагмент предыдущей функции, меняющий расширение указанно-
го файла на ".BAK" с удалением старого BAK-файла (если он был).

                    ENDWRT - Закрытие файла

 Вызов:     CALL @120266
 Параметры: Имя в NAMBUF
            ATTRIB - аттрибут
            SUBDIR - номер родительского подкаталога
            ADRDIR - адрес
            R1 - младшая часть 32-битной длины
            R3 - старшая часть длины (обычно 0)
            R2 - дата
            R4 - стартовый кластер
 Портит:    R0 - R5

     Функция применяется при завершении записи файла.  Происхо-
дит  запись FAT на диск,  поиск места в каталоге (если место не
найдено,  - из FAT удаляется цепочка и выдается сообщение  "DIR
full"), создание записи о файле (дополнительные поля очищаются)
и запись каталога на диск.

      RUNNER - Вызов подпрограммы с проверкой целостности

 Вызов:     CALL @120312 .WORD {адрес ячейки с адресом подпр.}
 Результат: Бит "C" - подпрограмма отключена или уничтожена
 Портит:    R0, R5

     Функция проверяет содержимое ячейки,  адрес которой указан
после вызова,  и если там не 0, - сравнивает первое слово вызы-
ваемой  подпрограммы,  адрес  которой и лежит в этой ячейке,  с
константой 104130,  и, если они равны, вызывает подпрограмму со
следующего адреса.  В противном случае происходит выход с уста-
новленным битом "C".

                 PRT1 - Вывод строки на экран

 Вызов:     CALL @120330
 Параметры: R4 - Адрес строки.

     На экран выводится строка, адрес которой указан в R4,  при
этом вместо кода 1 выводится имя файла из NAMBUF.  Ограничитель
строки - код 0. При выводе учитывается ячейка SCREEN.

                    3.4.3. Обработка ошибок

     В ANDOS предусмотрена  обработка  всех  ошибок  программой
пользователя, для этого имеется ячейка USRERR (120146). Пока  в
этой ячейке 0 система сама обрабатывает ошибки, выдавая на  эк-
ран сообщения и принимая  коды  с  клавиатуры.  Если  в  ячейку
USRERR записать адрес пользовательской подпрограммы, при  любой
ошибке (здесь и далее запросы на  перезапись/дубль  и  удаление
так же называются ошибками), -  происходит  вызов  подпрограммы
пользователя, при этом в R3 передается код ошибки, а в R4 адрес
текстового сообщения об ошибке (код 1 в текстовом сообщении при
выводе на экран должен заменяться на имя файла из  NAMBUF,  по-
этому для вывода строки рекомендуется использовать подпрограмму
PRT1). Если ошибка предполагает ввод кода с клавиатуры, он дол-
жен помещаться пользовательской подпрограммой обработки  ошибок
в (SP). Выход из подпрограммы осуществляется командой RTS R5.

                          Коды ошибок
              ┌─────┬──────────────────────────┐
              │  1  │  Non-DOS disk            │
              │  2  │  Disk full               │
              │  3  │  DIR full                │
              │  4  │  {имя файла} not found   │
              │  5  │  Disk error #n           │
              │  6  │  {имя файла} exist P/D:  │
              │  7  │  {имя файла}, delete?    │
              └─────┴──────────────────────────┘

                  3.5. Системный буфер ANDOS

     Системный буфер ANDOS используется  для хранения загрузчи-
ка,  таблицы размещения файлов и частей каталога при выполнении
дисковых операций. В принципе область буфера может быть исполь-
зована программами пользователя для хранения каких-либо данных,
необходимо  только  учитывать,  что при любом обращении к диску
информация пользователя, находящаяся в буфере, будет потеряна.
     Кроме того,  начиная  с версии ANDOS V3.1,  стала возможна
загрузка файлов в буфер (естественно при этом нужно  учитывать,
чтобы файлы не превышали размер буфера - 1200 байт).  Это может
пригодиться,  например, для подгрузки оверлея резидентной прог-
раммой.

                      3.6. Область ключей

     Область ключей  предназначена  для хранения текстов прог-
раммируемых ключей ANDOS.  Для хранения текстов ключей исполь-
зуется следующий формат:

            .BYTE <количество символов в ключе 0>
            .ASCII /Символы ключа 0/
            .BYTE <количество символов в ключе 1>
            .ASCII /Символы ключа 1/
                         . . .
            .BYTE <количество символов в ключе 9>
            .ASCII /Символы ключа 9/

     Например, если в области ключей размещены байты:

                   0,0,0,2,101,12,0,0,0,0,0,0

запуск третьего ключа будет приводить к вводу буквы "A" и кода
возврата каретки.

                  3.7. Стековая область ANDOS

     При работе ANDOS не использует основной стек, а пользуется
собственной стековой областью.  Так же,  как и системный буфер,
стековая область может использоваться программами пользователя,
однако необходимо принять во внимание ограничения,  описанные в
пункте 3.5.


 
Всё об «Электроника БК0010(-01), БК0011(М)»! » Программы | Утилиты | ДОСы » Дисковые Операционные Системы (DOS) » «ANDOS v3.1» » Техническое руководство (Часть 3) («ANDOS v3.1» [ANTECH3.EDP])
Страница 1 из 11
Поиск:

-=RUS=-
ICQ: 320867225