Описание ПрофПЗУ Scorpion 256 1996 г.

Новые функции дискового интерпретатора - К существующим функциям дискового интерпретатора (BIOS) добавлены подпрограммы, работающие с файловой системой TR–DOS


Новые функции дискового интерпретатора

К существующим функциям дискового интерпретатора (BIOS) добавлены подпрограммы, работающие с файловой системой TR–DOS. После их вызова установленный флаг CY обычно указывает на ошибку, при этом в Akk передаётся код ошибки (заметьте, только для файловых функций!). В случае, если значение Akk равно 80h, это указывает на физическую ошибку, её код, в свою очередь, доступен через функцию RST 8, код 82, DE=04, BC=+1eh.

Для каждого файла в памяти должна быть отведена специальная 28-ми байтная область — дескриптор управления файлом (fcb) и буфер как минимум на один сектор (256 байт). Все операции по поддержанию записей в дескрипторе управления обеспечивают подпрограммы монитора.

«Открывает» файл и создает управляющие структуры подфункция f_open (20). Входными параметрами являются: адрес строки спецификации файла (HL), адреса буфера управления (IX) и буфера обмена (DE). Файл может быть открыт в двух различных режимах (по содержимому регистра B) — байтового и блочного (секторного) обмена. Можно указать вид допустимых операций с файлом: чтение/модификация/запись.

В зависимости от режима открытия файла для передачи данных можно воспользоваться следующими подпрограммами. Подфункции f_read (22) и f_save (23) предназначены для считывания или записи одного байта, при этом файл рассматривается как файл последовательного доступа. Позиционирование внутри файла осуществляется с помощью подфункций putpos (32) и getpos (33), позволяющих соответственно задать и считать текущую позицию в файле. Подпрограммы монитора следят за достоверностью данных в буфере обмена, который выступает здесь как кеш-память на один сектор (256 байт). Для файлов блочного обмена предназначены подфункции r_sec (28) и w_sec (29), которые соответственно считывают и записывают один очередной целый сектор, либо подфункции r_ms (30) и w_ms (31) — для работы с несколькими последовательно расположенными секторами за одну операцию. Байтовые и блочные подфункции обмена данными, в принципе, можно совмещать. Для операций чтения и записи сектора, если предварительно был обработан байт (т. е. счётчик текущей позиции находится не на границе целого сектора) будет «пересчитан» текущий сектор.

Закрывает файл и освобождает буфер обмена (с дозаписью файла в случае необходимости) подфункция f_close (21).

Предусмотрены подфункции для поддержания файловой системы TR-DOS. fcbint (27) позволяет построить управляющую структуру файла без его открытия. Эта структура может использоваться для подфункций fndname (25) — поиск файла, и fndnext (26) — поиск следующего совпадающего файла. В имени файла, помещенного в fcb, символы ‘?’ рассматриваются как «заменители», что позволяет подфункции «поиск следующего» искать файлы по получившемуся шаблону. Наконец, для удаления файла с диска может быть применена подфункция delfil (24).

Следующие функции доступны с версии 2.70 (код 8 от 09.02.94)

f_open   equ         20           ;открыть файл

Параметры:

вх.:      С=20;

            ix — адрес буфера для fcb;

            hl — адрес строки, содержащей имя и тип файла в asciz;

            de — адрес буфера dma;

            b — способ открытия:

                  2 — «физический» файл (если сброшен — «логический»);

                  1 — файл для записи;

                  0 — файл для чтения;

                  установка 0 и 1 бит указывает файл для модификации.

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе:

            Akk=71 файл существует;

            72 файл не существует;

            73 нет места для создания нового файла;

            + все ошибки создания fcb и поиска файла;

            bc — длина файла в байтах.

Действие: открыть файл для последующих операций с ним.

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

[Drive:]filename[.type]

Отсутствие указания имени устройства (Drive) приводит к поиску файла на текущем дисководе. Тип файла по умолчанию <C>. Строка спецификации должна заканчиваться нулевым байтом. Режим работы с файлом определяется содержимым регистра B: 2-й бит определяет буферезацию, и должен быть установлен если предполагается обмен целыми секторами («физический» файл), и сброшен, если обмен будет вестись байтами («логический» файл). Кроме этого биты 0 и 1 задают режим доступа к данным, установка обоих бит открывает файл для модификации, то есть, как для записи, так и для чтения.

В случае, если указанный файл не найден и режим доступа задан «для записи» или «для модификации» — файл будет создан.

f_close   equ         21           ;закрыть файл

Параметры:

вх.:      C=21;

            ix — адрес буфера fcb;

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе:

            см. коды ошибок функции f_save (23).

Действие: закрыть файл, открытый функциями f_open (20).

При закрытии файла происходит дозапись (при необходимости) информации из открытых буферов.

f_read   equ         22           ;чтение байта

Параметры:

вх.:      C=22;

            ix — адрес буфера fcb;

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе:

            Akk=74 неверный тип операции (попытка читать из файла «только для записи»);

            70 конец файла (end of file);

            Akk (при CY=0) очередной считанный байт.

Действие: чтение очередного байта из файла.

Файл должен быть открыт как «логический».

f_save    equ         23           ;запись байта

Параметры:

вх.:      C=23;

            ix — адрес буфера fcb;

            Akk — байт для записи в файл;

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе:

            Akk=73 попытка записи после конца файла;

            74 неверный тип операции (попытка записать в файла «только для чтения»);

Действие: запись байта в файл.

Файл должен быть открыт как «логический».

delfil      equ         24           ;удаление файла

Параметры:

вх.:      C=24;

            ix — адрес буфера для fcb;

            hl -- имя и тип в asciz;

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе:

            Akk=72 файл не найден

Действие: удаление файла, адрес спецификации которого задан в регистрах HL.

Следующие функции доступны из ПЗУ Теневого монитора, начиная с версии 3.0c, код 64 от 05.11.94

fndname               equ         25           ;поиск файла на диске

Параметры:

вх.:      C=25;

            ix — адрес буфера fcb (в имени файла допустимы заменители '?');

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе или флаге Z:

            Akk=63 дискета не TR-DOS;

            Z=1 — файл не найден.

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

Буфер fcb должен быть построен подфункцией fcbint (27). В имени файла допустимы заменители — '?', вместо них при поиске файла подставляется «любой символ», таким образом подфункция fndname возвращает в fcb параметры для первого из найденных файлов.

fndnext  equ         26           ;поиск следующего совпадающего файла

Параметры:

вх.:      С=26;

            остальные параметры и выход те же, что и у подфункции fndname (25).

Действие: продолжает поиск файла, указанного в fcb.

Эта подфункция может использоваться при поиске следующего, совпадающего с «маской» файла. Под «маской» подразумевается наличие в имени файла (при создании fcb подфункцией fcbint (27)) заменителей ‘?’.

ВНИМАНИЕ! Подфункция fndnext использует внутренние ячейки монитора, поэтому, скажем, между вызовами функции нельзя смотреть каталог из монитора.

fcbint     equ         27           разбор имени файла, создание fcb

Параметры:

вх.:      C=27;

            hl — адрес строки имени файла в asciz;

            ix — адрес буфера создаваемого fcb;

            de — адрес буфера dma;

            b — способ открытия;

вых.:   CY=1, если были ошибки, код ошибки возвращается в аккумуляторе:

            Akk=74 неверный тип файла;

            68 несуществующий номер устройства;

            69 ошибка в имени файла;

            ix — адрес буфера fcb.

Действие: разбор спецификации файла и построение на ее основе блока управления (fcb).

Спецификация файла и способ открытия задаются так же, как и для подфункции f_open (20).

r_sec      equ         28           ;чтение очередного сектора в область dma

Параметры:

вх.:      C=28;

            ix — адрес буфера fcb;

вых.:   CY=1, если были ошибки, коды ошибок, возвращаемые в аккумуляторе, такие же, как для функций f_read (22) и f_save (23).

Действие: последовательное чтение очередного сектора из файла, содержимое сектора размещается в памяти с адреса, указанного полем dma в блоке управления файлом (fcb).

Для обеспечения максимальной скорости выполнения операции Файл должен быть открыт как «физический». Если файл был в режиме «логический» и если предварительно был считан байт (т. е. счетчик указывает не на границу целого сектора) подфункцией будет «пересчитан» текущий сектор. Максимальный номер сектора — 254.

w_sec     equ         29           ;запись очередного сектора из области dma

Параметры:

вх.:      C=29;

            ix — адрес буфера fcb;

вых.:   CY=1, если были ошибки, коды ошибок, возвращаемые в аккумуляторе, такие же, как для функций f_read (22) и f_save (23).

Действие: последовательная запись одного сектора из памяти с адреса, указанного полем dma в блоке управления файлом (fcb), в файл.

r_ms      equ         30           ;«мультисекторное» чтение начиная с dma

Параметры:

вх.:      C=30;

            ix — адрес буфера fcb;

            b — число считываемых секторов;

вых.:   CY=1, если были ошибки, коды ошибок, возвращаемые в аккумуляторе, такие же, как для функций f_read (22) и f_save (23).

Действие: последовательное считывание заданного количества целых секторов.

Подфункция r_ms подобна многократному выполнению подфункции r_sec (28), с той лишь разницей, что значение, указанное в поле dma не изменяется. В случае ошибки полагается, что все сектора не считались.

w_ms     equ         31           ;«мультисекторная» запись начиная с dma

Параметры:

вх.:      C=31;

            ix — адрес буфера fcb;

            b — число записываемых секторов;

вых.:   CY=1, если были ошибки, коды ошибок, возвращаемые в аккумуляторе, такие же, как для функций f_read (22) и f_save (23).

Действие: последовательная запись заданного количества секторов.

Подфункция w_ms подобна многократному выполнению подфункции w_sec (29), с той лишь разницей, что значение, указанное в поле dma не изменяется. В случае ошибки полагается, что все сектора, принимавшие участие в операции получили случайные значения.

putpos    equ         32           ;установить значение указателя в файле

Параметры:

вх.:      C=32;

            ix — адрес буфера fcb;

            de — новое значение указателя;

вых.:   CY=1, если были ошибки, коды ошибок, возвращаемые в аккумуляторе, такие же, как для функций f_read (22) и f_save (23).

Действие: устанавливается новое значение указателя в файле.

getpos    equ         33           ;считать значение указателя в файле

Параметры:

вх.:      C=33;

            ix — адрес буфера fcb;

вых.:   CY=1, если были ошибки, коды ошибок, возвращаемые в аккумуляторе, такие же, как для функций f_read (22) и f_save (23).

            bc — текущее значение указателя.

Действие: возвращение текущего указателя.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обо всём - подробный отчет с Funtop'98 от MMA (глава 1-4).
SOFTWARE - Обзор новинок демок: Iris UltraDemo, Lazarus Trackmo, Russian Fields of Experiments, Pressure Trackmo.
Юмор - Сленг современной молодежи.
Игромания - Wolf 2004: Мир увидел то, над чем трудился Alone Coder целых 8-мь лет!!
Образование - решения конкурсных задач.

В этот день...   18 апреля