Программирование в среде IS-DOS 1993 г.

Список функций функции через 4-ый канал - описание уровня DOS.SYS (продолжение). Файловая служба.


8.1.2 ОПИСАНИЕ УРОВНЯ DOS.SYS

КАНАЛЫ

Канал - именованная (нумерованная от 0 до 255) непрерывная область памяти, предназначенная для временного
хранения или передачи данных от одной программы в другую. Каналы находятся в специально отведенном месте памя-
ти, так называемой "области каналов". Область каналов имеет фиксированную длину (обычно 2000 байт) и распола-
гается между кэшем блочных устройств и резидентами. Адреса области каналов: g_cnfg(#10)-HL'+32..37. При добав-
лении/удалении резидентных программ из памяти область каналов смещается. Доступ к каналам из программ возможен
только с помощью специальных обращений к ядру. Функции работы с каналами: #16..#19.

Структура канала

смещение имя длина комментарий

0 1 логическое имя (номер)

1 CHLEN 2 длина канала
3 CHLEN тело канала

В области каналов каналы лежат друг за другом по номерам головой к хвосту. Т.о. вся область каналов описыва-
ется всего тремя адресами: начала, конца и указателя (см. ПРИЛОЖЕНИЕ 3).

Каналы с определенными номерами имеют следующее жестко фиксированное предназначение:

00..07 - описывают каналы F0..FE блочных устройств

08..OF - E0..EF символьных устройств вывода

10..17 - D0.. символьных устройств ввода

18..D7 - каналы пользователя /newchn(#19)/

D8..E7 - описывают установленные резидентные задачи /fndev(#51)/

E8..EF - описывают драйверы символьных устройств ввода

F0..F7 - символьных устройств вывода

F8..FE - блочных устройств

FF - электронный диск (часть памяти компьютера, как правило дополнительная, используемая как быстрое
блочное устройство. Обычно с упаковкой).

Каналы 00..17 называют "каналами, описывающими устройства" или "каналами устройств" или "устройствами". Они
ссылаются на каналы, описывающие драйверы (E8..FE), называемые в свою очередь "каналами драйверов". Последние
содержат гораздо больше информации чем устройства. Так, на пример, их можно находить по именам /функция
fndev(#51)/. Структура (тел) каналов 00..17 приведена в ПРИЛОЖЕНИИ 7, а каналов E8..FE - в ПРИЛОЖЕНИИ 8.

Схема перемещения информации о тек. состоянии при работе с драйверами и устройствами:

ДРАЙВЕРЫ И РЕЗИДЕНТНЫЕ ПРОГРАММЫ

Резидентная задача - программа, обращение к которой явно состоит из двух (трех) этапов:

1. Установка (загрузка) в память с диска, настройка на адрес и инициализация.

2. Основная работа

3. Удаление задачи из памяти

1-ый и 3-ий этапы осуществляются процедурой SET.com. Она же создает 18-байтовый канал, описывающий резидента

(см. ПРИЛОЖЕНИЕ 8).

Структура резидентной задачи:

О 2 Адрес процедуры инициализации. Она вызывается при ее перемещении (на вход задачи подается A=FF) или удале-
нии (A=FE) программой SET.com. Если 0, то не вызывается. Эта программа должна подключать, если это необхо-
димо, резидента к цепочке прерываний (IM 2) или к другой программе, перехватывать рестарты и восстанавли-
вать их.

2 2 Адрес главного входа, т.е. процедуры запуска по имени /exbat(#44),run(#48)/ или по номеру канала /ехе-
res(#53)/ Если 0, то программа запускается с 4-го байта.

4 R Тело задачи (структура произвольная)

R+4 2 #FFFF - разделитель

R+6 2п таблица настраиваемых адресов - 1 (см. примеры программирования). Смещения от начала вычисляются по
LSA. Единица вычитается для пущей простоты настройки таких команд как: CALL, JP, LD HL, LD A,(nn), наи-
более часто встречающихся в программе.

ДРАЙВЕРЫ

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

Установленный в систему драйвер имеет только 8-буквенное имя (тип в канале не хранится), typ от 1рг можно
отличить по 0-му биту в 13-ом байте драйвера (5-ый байт в g_typ(#12)).
В начале каждого драйвера располагается вектор стандартной структуры:

О 2 INST - Программа, вызываемая как и для всех резидентов программой SET.com, а также при каждом пере-
ключении устройства, обслуживаемого драйвером. (При этом А=номер устройства).

2 2 ENTRY-1
4 2 ENTRY-2
6 2 ENTRY-3
8 8 STATUS-VECTOR

КЭШ БЛОЧНЫХ УСТРОЙСТВ

Кэш представляет собой быстродоступную копию некоторых наиболее часто используемых блоков блочных уст-
ройств. Он размещается в памяти ниже области каналов и имеет следующую структуру:

О EDSIZ*4 каталог кэша, состоит из 4-байтовых описателей блоков:

О 4 описатель блока
4 4 описатель блока
8 4 описатель блока

EDSIZ*4 256 блок
256 блок
256 блок

EDSIZ - Размер кэша (количество блоков) задается в 0-м уровне ядра.
Описатель блока имеет следующую структуру:

Смещ. Кол.байт

0 1 регистр состояния блока, совмещенный с номером устройства. Биты:

7 - блок модифицирован (1) или нет (0);
6 - блок защищен (1) или нет (0);
5 - блок существует (1) или нет (0);
4 - резервный;

3..0 - номер устройства, которому принадлежит блок.

1 1 счетчик обращений к блоку;

2 2 (мл.,ст.) - номер блока на устройстве.

Минимальный размер Кэша равен 6 блокам. Кэш создается системой автоматически, т.к. он необходим для работы
файловой службы.

8.2.1 #20. ФАЙЛОВАЯ СЛУЖБА

= DUD.SYS =

32(20):open - Открытие уст-ва и главного каталога. Выход: с обр.оы.

33(21):openl - Открыть каталог по номеру начального блока каталога в DE.

34(22):empty - Не используется

35(23):crfil - Создание файла по имени. HL = адрес заполненного описателя. (Имя, тип, CSR, длина - обязатель-
но, по желанию: LSA и прочие) (см. ПРИЛОЖЕНИЯ 9,4.). Файл созд-ся непрерывный или односегмент-
ный (в зависимости от CSR ). Старший байт длины игнорируется. Проверяет наличие файла с таким
именем и типом.

36(24):erfil - Удаление файла по имени. HL - адрес описателя (имя, тип), отсутствие файла - не ошибка.

37(25):fopen - Поиск и открытие файла или каталога по имени и типу. HL - адрес описателя (имя, тип), (подката-
лог открывается, т.е. его описатель (19 байт) считываются в сис. область описателя каталога.
(Структуру описателей см. в ПРИЛОЖЕНИЯХ 9.) Выход: если ошибок нет: и если В1Т5=0, то файл отк-
рыт, в А - регистр состояния файла (FSTAT), в HL' - адрес 32-байтового описателя файла (FNAME)
если В1Т5=1, то функция F0PEN открыла внутренний подкаталог

38(26):opnum - Открытие файла по номеру в текущем каталоге. Номер файла - в регистре А. Выход: HL'=FNAME.

39(27):gname - Возвращает описатель файла, не открывая его на входе в рег.Е - номер файла. Выход: если O.K.,

то HL' - адрес описателя файла в электронном диске.

40(28):putf - Закрытие файла (сохраняет описатель текущего файла в каталоге). Необходима пользователю для за-
щиты файлов и инициализации резервных байтов в описателе. Номер в $FNUMB.

41(29):rpart - Чтение части файла. A,HL - указатель, IX - адрес в памяти, DE - длина в байтах. Пользуется

эл.диском. (Обращается к JMLTRD и JQRVBL)

42(2А):wpart - Запись части файла. A,HL - указатель, IX - адрес в памяти, DE - длина в байтах,выход: с обр.ош.

Пользуется эл.диском (обращается к JM0DWR или JWRITE, и JQRVBL,JM0D0)

43(2В):rifle - Чтение файла в блоках. В - количество блоков, DE - номер блока начала, HL - куда читать.

44(2С):wifle - Запись файла в блоках. В - количество блоков, DE - номер блока начала, HL - откуда записывать.

Эти 2 процедуры эл.диском не пользуются (обращаются к $DREAD и JWRITE)

45(2D):qrvbl - Возврат адреса виртуального блока на электронном диске. Вход: DE - номер блока в файле. Выход:

HL' - адрес блока в эл.диске, DE' - адрес заголовка блока в каталоге эл.диска, А = 0, если
блока не было на эл.диске (чтение с устройства); возвращается 1, если блок был.

46(2Е):тю6о - Модифицирование (квазизапись) блока, считанного в эл.диск процедурами qrvbl или quard. Вход: DE=

адрес заголовка блока в каталоге эл.диска (выдается процедурами quard и qrvbl в DE'). Рекоменду-
ется модифицировать только что считанный блок, т.к. любое обращение к вирт.диску может повлиять
на расположение блоков в нем.

47(2F):fadd - Добавление блоков к файлу. А - число блоков, DE - указатель в блоках. Выход: с обр.ош.

48(30):fcut - Удаление блоков из файла. А - число блоков, DE - указатель в блоках. Выход: с обр.ош.

49(31):еadd - Добавление к концу файла DE байт.

50(32):еcut - Удаление от конца файла DE байт.

51(33):gcat - Возврат номера 0-го блока текущего каталога в HL' и номера устройства в А, Е' - количество всех

файлов в каталоге (существующие + удаленные), D' - вложенность подкаталога, в ВС'- N начального
блока старшего каталога.

52(34):find - Поиск и открытие файла или каталога по имени и типу как файла. HL - адрес описателя (имя,

тип).HL'=FNAME.

53(35):bkfcb - Возврат адреса описателя файла в HL'(=FNAME) (см. ПРИЛОЖЕНИЕ 9)

54(36):pstat - Сохраняет в канале номер А(А<>0) текущее состояние системы. А=0: среда сохраняется по адресу

IX. Выход с обр. ош. Если O.K., то А(<>0) сохраняется, HL' - адрес канала.

55(37^:gstat - Восстановление среды из канала с номером в регистре А(А=0,А<>0: аналогично pstat). Выход: с

обр.ош. Состояние системы мо^ет иметь любую длину. Первые 4 байта инициализируются функцией
pstat: 0(1) номер канала устройства, 1(2) каталог, 3(1) номер файла в данном каталоге.

56(38j:distr - Захват блоков на устройстве .А = размер требуемой непрерывной области на устройстве. Выход: ВС'

= номер 1-го блока области ( с обр. ош. )

57(39):retrn - Перенастройка резидентной программы или драйвера. ВА = длина,HL = старый адрес ,DE = новый ад-
рес.

58(ЗА):empty - Не используется

59(ЗВ):erf_ - Создание файла по имени в HL без проверки на существование (с обр. ош)

60(3C):erf_ - Удаление открытого файла ( с обр. оы.)

61(3D):rvblk - Чтение блока номер DE (виртуального, т.е. от начала тек. открытого файла) в буфер по адресу HL
62(ЗЕ):wvblk - Запись виртуального блока номер DE из буфера по адресу HL.
63(3F):free - Открепить на текущем блочном устройстве А блоков начиная с DE-ro.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Rants & Raves - О новой сокращенной кличке Paracels'a.
Программистам - Ассемблер для рукомойников.
Ответ Sоkоl'a ламеру - Продолжение, начало в РLUTONIUМ#6.
События - правила предстоящего Ростовского демопати Paradox 2002.
Под звуком "ПИ" - Ars/Fatality о Borndead'e, Unbeliever'e, Демосцене и будущем спектрума.

В этот день...   23 ноября