Virtual Worlds #01
31 декабря 1999

Техпомощь - Dos Review: материал по формату дисковой операционной системы IS-DOS.

<b>Техпомощь</b> - Dos Review: материал по формату дисковой операционной системы IS-DOS.
 ┌────────────────────────────┐
░▒▓▓█ DOS REVIEW #00 █▓▓▒░ └────────────────────────────┘

                      (C) Nuts


  Так  называется  цикл  статей,
написанных  Nuts'ом,  в  которых
рассказывается о фарматах разных
DOS  (дисковых операционных сис-
темах).  Здесь  собрано  все то,
 что вы  хотели знать о дисковых
форматах,  но  не  знали, у кого
спросить.

  Сейчас   NUTS  понесет  всякую
чушь об этом, а равно и о многом
другом.

  Долго ли, коротко ли, но из-за
того,  что весьма далеко ли, как
не  возьми  какой компьютер, а у
него  всяк  раз  новый  дисковый
формат.  MICROSOFT  можно только
хвалить     за    то,    что она
унифицировала   дисковый  формат
для  такой уймы компьютеров. Она
также  не  скупилась на информа-
цию,  а если и жмотничала, то ее
быстренько раскололи храбрые ха-
керы. И не надо ныть, что там, в
"стране   МайкроСофтии",  бедные
юзеры  гибнут  без  живительного
информационного потока. Ну а ес-
ли  кому  надо все разжевать и в
рот положить, то пожалуйста.
  Гораздо сложнее обстоит дело с
другими  зарубежными,  а равно и
отечественными  системами.  Если
скажем  о СПЕКЕ говорили уже не-
мало  и  описали  многое, то и у
него  осталась  куча  зарубежной
периферии, так же софта немеряно
под  разные  ОС,  да и то многое
только сейчас доходит до удален-
ных  районов,  ну  а от кое чего
остаются только названия: всякие
там OPUS, D80 и т. д. и т. п.
  Что же говорить о других маши-
нах,  о которых кто-то и не слы-
хал,  а  у  кого-то они валяются
бестолку. А потом, глядишь, а на
них  и  софта  понаписано  воз и
маленька тележка, и народу кучи,
и девайсов напаяли. Словом, что-
то  там  ALIVE  FOREVER. И можно
долго  разводить  приятные тары-
бары  о  том, что RULES, а что -
MUST  DIE.  Все  это из-за того,
что нетушки достоверной справоч-
ки, что есть что и как оно пожи-
вает.

  Начнем все-таки с MS-DOS ...

  Попытки  рассказать  о  сей ОС
были,  и софта для работы с этим
делом писано немало, начиная еще
с  бог  знат какого времени. Но,
скажем,  меня лично не приколола
ни  одна из подобных штучек. Все
это  как-то специализировано для
определенной  области,  часто не
гибко   в  работе  с  различными
разновидностями дисков, как пра-
вило,  только  MS -> TR и дизайн
на уровне 1985 г. Есть, конечно,
и  весьма  приятные исключения и
многое делается, но факт остает-
ся фактом.
  В  общем,  я лично решил поко-
паться  в  литературе, разведать
ситуацию   и  предоставить  ВСЕМ
пользительное  чтиво. Решено это
было  еще  давным  давно, и дело
было    почти    сделано    TIME
KEEPER'ом, так ведь люди тоже не
сидят на месте, тоже пишут, сло-
вом, переписываю.

  Начнем с того, что все параме-
тры диска хранятся в 0-ом секто-
ре  0-ой  дорожки. Только дело в
том,  что  количество информации
наращивалось  вместе  с версиями
MS-DOS,  и  только в 4-ой версии
можно  узнать  все  о диске. Но,
поскольку    форматтер    FLOPPY
FORMAT  Ивана Рощина форматирует
диски  и  записывает в этот, так
называемый  BOOT-сектор  то  же,
что и сама MS-DOS, то забудем об
этой  проблеме  и вернемся к со-
держанию  этого  сектора,  в чем
поможет таблица:

┌────────┬─────┬───────────────────────────────────────────────┐
│СМЕЩЕНИЕ│ДЛИНА│НАЗНАЧЕНИЕ                                     │
├────────┼─────┼───────────────────────────────────────────────┤
│0       │3    │Команда перехода на код загрузчика.            │
│        │     │                                               │
│3       │8    │Имя  программы-форматера.                      │
│        │     │                                               │
│0b      │2    │Длина сектора в байтах.                        │
│        │     │                                               │
│0d      │1    │Количество секторов в кластере.                │
│        │     │                                               │
│0e      │2    │Количество зарезервированных секторов (начиная │
│        │     │с начала диска)                                │
│        │     │                                               │
│10      │1    │Количество FAT.                                │
│        │     │                                               │
│11      │2    │Максимально возможное количество файлов  в     │
│        │     │корневом каталоге.                             │
│        │     │                                               │
│13      │2    │Общее количество секторов на диске.            │
│        │     │                                               │
│15      │1    │Байт-описатель типа диска.                     │
│        │     │                                               │
│16      │2    │Число секторов в одной FAT.                    │
│        │     │                                               │
│18      │2    │Количество секторов на одной дорожке.          │
│        │     │                                               │
├────────┼─────┼──────────────────────────────────────> DOS 3.0│
│        │     │                                               │
│1a      │2    │Количество головок на диске.                   │
│        │     │                                               │
│1c      │2    │Количество спрятанных секторов.                │
│        │     │                                               │
│20      │4    │Если размер диска >32MB, то его размер в       │
│        │     │секторах находится уже тут.                    │
├────────┼─────┼───────────────────────────────────────>DOS 4.0│
│24      │1    │Номер диска (только винчестера) - его номер в  │
│        │     │BIOS.                                          │
│        │     │                                               │
│25      │1    │Резерв.                                        │
│        │     │                                               │
│26      │1    │Сигнатура расширенного сектора, т.е. только то │
│        │     │что пишет DOS 4.0 и выше, содержит здесь #29   │
│        │     │                                               │
│27      │4    │Серийный номер - пишется при форматировании    │
│        │     │диска, содержит индивидуальный номер и дату    │
│        │     │                                               │
│26      │11   │Имя диска.                                     │
│        │     │                                               │
│26      │8    │Содержит "FAT12   " или "FAT16   ".            │
└────────┴─────┴───────────────────────────────────────────────┘

 Что же обозначают эти цифры...

  В  начале  скажу,  что  я буду
старательно  умалчивать о работе
с  винчестером.  Это  не потому,
что  я,  по каким-либо соображе-
ниям, хочу это утаить. Наоборот,
ситуация  с  винчестером  весьма
поучительна  для  установки  его
под другие системы, но и гораздо
более  сложна  для  того,  чтобы
описывать  ее в обзоре дискетных
форматов - там ведь тебе и проб-
лемы наращивания объема, и глав-
ный загрузочный раздел с возмож-
ностью   размещения   нескольких
операционных систем, и куча фор-
матов  при  работе с уплотненным
диском...

  Для  начала  - немного теории.
Операционные  системы в большин-
стве своем оперируют не с секто-
рами  и  дорожками,  а со смеще-
ниями  в абсолютных секторах. Т.
е. понятие "дорожка", практичес-
ки   не   употребляется,   а су-
ществует  куча секторов, начиная
с нулевого и до какого-то конеч-
ного,  может быть, стотысячного.
Если, скажем, на диске 10 секто-
ров на одной логической дорожке,
считая с нулевого, то на нулевой
логической  дорожке  будут нахо-
дится сектора с 0-го по 9-ый, на
1-ой  логической дорожке с 10-го
по 19-ый и так далее.

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

  В MS-DOS такие блоки называют-
ся кластерами. Количество секто-
ров,  приходящихся на один клас-
тер, можно узнать из загрузочно-
го  сектора.  Номер  логического
сектора, на котором располагает-
ся  нулевой  кластер, приходится
подсчитывать на основе данных из
загрузочного сектора, но об этом
позже.

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

  Чтобы знать место расположения
каждого куска файла, служит таб-
лица FAT. Каждый ее элемент, на-
чиная с первого, содержит ссылку
на тот элемент этой таблицы, где
продолжается   тот  файл,  номер
кластера  которого соответствует
тому  элементу  таблицы, где со-
держится ссылка на этот файл. То
есть, если мы узнали, что начало
файла  находится, скажем, на пя-
том  кластере,  то  мы загружаем
его  и  смотрим на пятый элемент
таблицы  FAT.  А  там, значится,
положим,  число  25. Ну тогда мы
спокойно  читаем 25-ый кластер и
смотрим 25-ый элемент таблицы. А
он указывает на номер следующего
кластера ( он же номер следующе-
го  элемента  в  таблице ), или,
что  этот  кластер является пос-
ледним  для этого файла и больше
ничего  читать не надо. Он может
также  указывать на то, что дан-
ный  сектор свободен или помечен
как дефектный.

  Проблема  лишь  в  том, что на
дисках,  размер  одного элемента
равен 12 битам ( полтора байта )
и  половинки  каждого 2-го байта
относятся   одна  к  предыдущему
байту,  а другая - к следующему.
Для    определения   содержимого
элемента таблицы, нужно умножить
данный  номер  кластера  на 1.5,
получим  смещение до пары байтов
в  таблице, которая содержит но-
мер  следующего  кластера.  Если
предыдущий кластер имел нечетный
номер ( определяется по нулевому
биту в номере кластера ), то на-
до использовать 12 младших битов
этой  пары,  иначе - 12 старших.
Если  полученное  значение равно
0, то этот кластер свободен. Ес-
ли #FF8 - #FFF, то это последний
кластер файла. #FF0 - #FF7 - за-
резервированные  сектора,  в том
числе #FF7 - сбойный кластер.

  Только  0-ой элемент этой таб-
лицы   является  исключением. Он
содержит  копию  байта описателя
данного   диска.  Например,  для
дисков,  которые можно прочитать
на Спектруме:

┌──────┬────────────────────────────────┐
│Байт: │         Тип диска:             │
├──────┼────────────────────────────────┤
│ #f9  │ 3'5   720 kb 2SD 9_SEC 80_TRKS │
│ #fa  │ 5'25  320 kb 1SD 8_SEC 80_TRKS │
│ #fb  │ 5'25  640 kb 2SD 8_SEC 80_TRKS │
│ #fc  │ 5'25  180 kb 1SD 9_SEC 40_TRKS │
│ #fd  │ 5'25  360 kb 2SD 9_SEC 40_TRKS │
│ #fe  │ 5'25  160 kb 1SD 8_SEC 40_TRKS │
│ #ff  │ 5'25  320 kb 2SD 8_SEC 40_TRKS │
└──────┴────────────────────────────────┘

  Но  такие байты имеют и многие
другие  диски,  в том числе и не
со стандартной разбивкой.

  На  самом деле, в этих байтах-
описателях   типа,  используются
только младшие 3 бита, а старшие
биты всегда равны нулю.

  В этом байте:

0-ой  бит: 1 - двухсторонний
           0 - односторонний
1-ый  бит: 1 - 8 сект. на дор.
           0 - не 8
2-ой  бит: 1 - постоянный,
           0 - сменный диск

  Для  определения начала FAT, в
загрузочном  секторе указывается
число    зарезервированных     и
загрузочных   секторов.   Там же
можно  найти и количество таблиц
FAT   -  для  надежности  делают
несколько  копий. Нетрудно будет
подсчитать  общее количество за-
нятых  в начале диска секторов и
определить   тот,   на   котором
начинается 0-ой кластер.

  Первые два кластера всегда за-
нимает   корневой   каталог,   и
максимальное количество файлов в
нем  определяется размером клас-
теров. Но это число содержится и
в загрузочном секторе, и для оп-
ределения   размера  каталога  в
секторах   достаточно  разделить
его на 16.

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

 Описатель   любого   файла  или
каталога занимает 32 байта:

┌─────────┬────────────────────────────────────────────────────┐
│СМЕЩЕНИЕ:│                   НАЗНАЧЕНИЕ:                      │
├─────────┼────────────────────────────────────────────────────┤
│         │0-7  Имя  файла или каталога, большие буквы, остаток│
│         │заполнен пробелами. Если 0-ой байт равен #E5 то файл│
│         │удален,   если   #05   то  код  первой  буквы  файла│
│         │действительно   #E5.  Если  0  -  место  никогда  не│
│         │использовалось - конец каталога.                    │
│         │                                                    │
│8-10     │Расширение.                                         │
│         │                                                    │
│11       │Атрибуты  файла.  Биты:  0  - только для чтения; 1 -│
│         │скрытый  файл;  2  - системный файл; 3 - имя диска в│
│         │первых  11-ти  байтах,  только в корневом  каталоге,│
│         │начального сектора и длины не имеет; 4 - подкаталог,│
│         │не   использует  поле  длины,  5  -  архивный  файл,│
│         │заархивировали его для сохранности или нет.         │
│         │                                                    │
│12-21    │Резервируются.                                      │
│         │                                                    │
│22-23    │Время   создания   или  последней  коррекции  файла,│
│         │содержит  как 16-ти битное слово: биты 15-11 - часы,│
│         │биты  10-5  - минуты, биты 4-0 секунды/2. 24-25 Дата│
│         │создания   файла   или   его   последней   коррекции│
│         │содержит  как  16-ти  битное  слово: биты 15-9 - год│
│         │начиная  с  1980  и  кончая  2099  (!!!); биты 8-5 -│
│         │месяц, биты 4-0 - день.                             │
│         │                                                    │
│26-27    │Номер  первого  кластера  файла,  начиная с младшего│
│         │байта.   Первые   два   кластера  занимает  корневой│
│         │каталог, и все файлы начинаются со второго кластера.│
│         │                                                    │
│28-31    │Размер  файла  в  байтах.  Первая пара байт содержит│
│         │младшие разряды значения, обе пары байт начинаются с│
│         │младшего  байта.  Всего  длина  может достигать до 4│
│         │гигабайт,  ну а на формате 830KB используется 20-бит│
│         │- максимум.                                         │
└─────────┴────────────────────────────────────────────────────┘

  Вот и все, что надо для работы
с диском. Для перехода от номера
кластера  к  абсолютным секторам
нужно прибавить к номеру класте-
ра, умноженному на два, смещение
до  нулевого кластера в абсолют-
ных  секторах.  Затем полученное
число  нужно  поделить  на коли-
чество  секторов  на  дорожке. В
результате   получим  логическую
дорожку,  где находится кластер,
а  в  остатке  - сектор. Замечу,
что  в большинстве виденной мною
литературы, предлагалось считать
корневой  каталог  (  т. е. нес-
колько  самых первых кластеров )
вроде  бы  не и не кластерами, а
вводилось  понятие начала данных
- следующий после каталога клас-
тер считается вроде как нулевым,
ну и, соответственно, все номера
кластеров  считаются от него при
помощи  приплюсоания-минусования
размера каталога. Словом, только
лишние    вычисления.   На   мой
взгляд, если каталог лежит в ну-
левом  кластере,  то его и нужно
считать  за  начало данных, а не
за что-то особенное.

  Остается  только  сказать, что
иногда недостаточно бывает прос-
то  перегнать  файл на Спектрум,
если   он  находится  в  формате
HOBETA ( расширение начинается с
"$"  ),  SCL-формате ( программа
AMD  )  или в файле может содер-
жаться  образ  всего спектрумов-
ского  диска  - ".TRD" и ".FDI".
Для  этого  надо  знать  форматы
этих файлов.


 Теперь речь пойдет об IS-DOS.


  Как  свидетельствует программа
FLOPPY  FORMAT Ивана Рощина, эта
DOS поддерживает восемь разбивок
диска,  которые могут очень даже
сильно отличаться друг от друга,
т.  к. размер сектора может быть
как 256, так и 1024 байта (у за-
пускаемых   дисков).  Количество
секторов при этом будет 16 или 5
соответственно.

  Диск  при  этом может быть как
односторонним  так и двухсторон-
ним.

  Внимания  заслуживает  порядок
секторов  на  дорожке. Поскольку
диск  может быть автозапускаемым
то, хотя на них и находится по 5
секторов  на  дорожке, последний
из них имеет номер 9.

  Теперь   рассмотрим  структуру
диска.  Ее описание находится на
диске  с  ассемблером IS-DOS. Но
оно  рассчитано  на программиста
работающего    непосредственно в
этой  DOS. Здесь же я изложу ос-
новные факты из этого описания.

  "Внутри"  IS-DOS абсолютно ВСЕ
устройства  хранения  информации
представляются набором блоков по
256  байт каждый с номерами от 0
до  некоего максимального. Поло-
жение  любого файла и вообще лю-
бого   нужного  места  на  диске
задается  смещением относительно
начала  диска  -  0-го  блока. И
измеряется  это  смещение в этих
же  блоках по 256 байт. Т. е. не
так  важен размер сектора, - для
определения  дорожки  и  сектора
можно воспользоваться формулами:

ДОР. = INT(СМЕЩ./ 5120)
             (или 4096)

СЕКТ.=INT((СМ.-ДОР.*5120)/1024)
                    (4096  256)

  А  остаток  от  разности между
смещением до сектора и смещением
до нужного блока даст нам смеще-
ние  внутри 1024-байтного секто-
ра.
  0-ой блок - это 0-ой сектор 0-
ой дорожки.

       В нем содержится:

┌────────┬─────┬───────────────────────────────────────────────┐
│СМЕЩЕНИЕ│ДЛИНА│НАЗНАЧЕНИЕ                                     │
├────────┼─────┼───────────────────────────────────────────────┤
│0       │2    │Резерв                                         │
├────────┼─────┼───────────────────────────────────────────────┤
│2       │8    │Имя устройства (диска)                         │
├────────┼─────┼───────────────────────────────────────────────┤
│10      │3    │Признак IS-DOS:"DSK" По нему можно определить  │
│        │     │принадлежность диска к этой системе.           │
├────────┼─────┼───────────────────────────────────────────────┤
│13      │5    │Резерв                                         │
├────────┼─────┼───────────────────────────────────────────────┤
│18      │2    │Обьем диска в блоках                           │
├────────┼─────┼───────────────────────────────────────────────┤
│20      │2    │Номер 0-го блока главного каталога. Для дисков │
│        │     │80TR/DS обычно 3-ий, т.е. тот же 0-ой сектор   │
│        │     │для 1024 байтовых секторов. Или же 3-ий -      │
│        │     │для 256 байтовых.                              │
├────────┼─────┼───────────────────────────────────────────────┤
│22      │1    │Количество цилиндров на устройстве             │
│        │     │- это для HDD.                                 │
├────────┼─────┼───────────────────────────────────────────────┤
│23      │1    │Тип диска - биты (0/1):                        │
│        │     │0-ой - 40/80 дорожек                           │
│        │     │1-ый - 1/2 стороны.                            │
├────────┼─────┼───────────────────────────────────────────────┤
│24      │1    │Размер сектора:                                │
│        │     │1/2/4: 256/512/1024 байта                      │
├────────┼─────┼───────────────────────────────────────────────┤
│25      │1    │Количество секторов на дорожке.                │
├────────┼─────┼───────────────────────────────────────────────┤
│26      │1    │Резерв                                         │
├────────┼─────┼───────────────────────────────────────────────┤
│27      │1    │Контрольная сумма файла ????_dos.sys Это нечто │
│        │     │вроде MAGICK'а - копия памяти компьютера с     │
│        │     │системой. Загружается и разгружается он особыми│
│        │     │программами, а его параметры хранятся в особом │
│        │     │месте.                                         │
│        │     │???? - четыре любых символа.                   │
├────────┼─────┼───────────────────────────────────────────────┤
│28      │2    │Резерв                                         │
├────────┼─────┼───────────────────────────────────────────────┤
│30      │2    │Дата (чего ???)                                │
├────────┼─────┼───────────────────────────────────────────────┤
│32      │32   │Описатель ????_dos.sys                         │
│        │     │См. выше.                                      │
├────────┼─────┼───────────────────────────────────────────────┤
│64      │16   │Таблица номеров секторов.                      │
│        │     │                                               │
└────────┴─────┴───────────────────────────────────────────────┘


  1-ый  блок  содержит бит-карту
устройства:  каждый ее бит соот-
ветствует     своему    блоку на
устройстве - 1 бит/блок
             0-свободен
             1-занят

  Подобная   таблица  -  битовая
карта диска, - часто применяется
в  различных операционных систе-
мах.

  Теперь  поговорим  о  файлах и
каталогах.

  Мы  уже  знаем  где  находится
главный  каталог. Полезно вспом-
нить,  что файлы в IS-DOS бывают
не только сегментированными, как
в MS-DOS, но и непрерывными, как
в  TR-DOS.  Т.е. файл может быть
разбросан  кусками-сегментами по
всему  диску,  долго  грузится и
восстановить его после того, как
запись  в  каталоге  о нем будет
испорчена,  крайне затруднитель-
но.  Но  забот о чистке диска от
удаленных  файлов  почти не ста-
нет.

  Также  файл  может быть непре-
рывным,  грузится  он быстро, но
проблемы  с  командой  MOVE, или
точнее,    SQUEEZE   (   так она
называется   она  в  HOBET'е  на
ПЦ  ), всем спектрумщикам ( если
они  не  работают  под  эмулято-
ром ). Правда, по некоторым све-
дениям,  эта  проблема разрешима
(  см.  ниже  ),  но  как - пока
неизвестно.  Большинство (ВСЕ ?)
конверторы IBM <> ZX работают по
принципу условной последователь-
ности секторов файла, а если пи-
сать свой конвертер IS <> TR, то
можно   сделать   этот   файл  и
несегментированным,  но для пол-
ноты картины надо рассказать ка-
ким образом система IS-DOS соби-
рает  сегменты  своих  файлов  с
диска.

  Так  вот, в каталоге описатель
такого  файла содержит ссылку не
на   начальный   блок  файла как
такового,  а  ссылку  на  особый
блок - Таблицу Размещения Секто-
ров  Файла или, как его называют
в  фирменном описании, Блок Опи-
сателя Сегментов Файла. 0-ой его
байт содержит количество сегмен-
тов файла - на сколько частей он
разбит.  Остальные  255 байт со-
держит  85 трехбайтовых записей,
каждая из которых описывает свой
сегмент  файла. Первые два байта
каждой  содержат  номер нулевого
блока  этого сегмента, ну а тре-
тий - число блоков в сегменте.

  И  для  чтения  нужного  файла
нужно  сначала определить начало
этого  Описателя,  затем считать
его.  Потом организуется цикл по
количеству  сегментов. По первым
двум    байтам   каждой   тройки
определяется  начало конкретного
сегмента  и обыкновенным образом
считывается   последовательность
секторов  содержащих блоки этого
сегмента. При необходимости нуж-
но   позаботится  об  исключении
ненужных   остатков   первого  и
последнего секторов. Для послед-
него  блока  это  можно  сделать
простой  манипуляцией  с адресом
загрузки  следующего сегмента. А
вот  с  первым сложнее. Придется
делать перемещения командой LDIR
или читать сектора в промежуточ-
ный  буфер.  Но  в любом случае,
размер 1024 байт придется учиты-
вать.

  Для сохранения файлов придется
также побеспокоить битовую карту
диска.  Нужно  искать  незанятые
блоки  -  соответствующий им бит
будет сброшен. Его нужно устано-
вить, затем заполнить нужную за-
пись в Блоке Описателя или доба-
вить блоков к старой записи. Де-
лать эти операции лучше в ОЗУ.

  Каталоги,   как   ни  странно,
представляют из себя почти обыч-
ные файлы, но у них два описате-
ля:    внешний,    в   каталоге-
родителе,  и  внутренний,  в нем
самом.  У главного каталога есть
только  внутренний  описатель  -
его  0-ой  файл. Именно во внут-
реннем  описателе содержится ин-
формация  о  количестве файлов и
уровне  вложенности. Кроме того,
запись о файле/каталоге содержит
определяющую метку, показывающую
принадлежность  файла  к опреде-
ленной  группе  (см. ниже). Сле-
дует  также помнить об ограниче-
ниях: кол-во файлов в каталоге -
до 128, уровень вложенности - до
6.  Каталог тоже может быть сег-
ментированным  или несегментиро-
ванным.

  Теперь  подробнее  о структуре
описателя  файла.  Замечу, что в
описании     структуры    записи
внутреннего  описателя  каталога
мне не все стало ясно.


┌────────┬─────┬───────────────────────────────────────────────┐
│СМЕЩЕНИЕ│ДЛИНА│ОПИСАНИЕ                                       │
├────────┼─────┼───────────────────────────────────────────────┤
│0       │8    │Имя файла                                      │
├────────┼─────┼───────────────────────────────────────────────┤
│8       │3    │Тип файла                                      │
├────────┼─────┼───────────────────────────────────────────────┤
│11      │1    │Регистр состояния файла                        │
│        │     │бит(0/1):                                      │
│        │     │0 - удален/существует                          │
│        │     │2 - защищен от чтения(1)                       │
│        │     │3 - защищен от записи(1)                       │
│        │     │4 - видимый/скрытый файл                       │
│        │     │5 - файл/каталог (корневой файл)               │
│        │     │6 - сегментированный / несегментированный      │
│        │     │7 - защищен от удаления(1)                     │
├────────┼─────┼───────────────────────────────────────────────┤
│12      │2    │Адрес загрузки по умолчанию                    │
├────────┼─────┼───────────────────────────────────────────────┤
│14      │3    │Длина                                          │
├────────┼─────┼───────────────────────────────────────────────┤
│17      │2    │Номер Блока Описателя Сегмента или 0-го блока  │
│        │     │файла - если файл непрерывен                   │
├────────┼─────┼───────────────────────────────────────────────┤
│19      │1    │"Special"                                      │
├────────┼─────┼───────────────────────────────────────────────┤
│20      │6    │Резерв                                         │
├────────┼─────┼───────────────────────────────────────────────┤
│26      │2    │Контрольная сумма файла                        │
├────────┼─────┼───────────────────────────────────────────────┤
│28      │2    │Время                                          │
├────────┼─────┼───────────────────────────────────────────────┤
│30      │2    │Дата                                           │
└────────┴─────┴───────────────────────────────────────────────┘

  Дата  и время кодируются как в
MS-DOS.  Контрольная сумма, воз-
можно, тоже.

  Вот  что известно про внутрен-
ний  описатель ( используются 23
байта ):

┌────────┬─────┬───────────────────────────────────────────────┐
│СМЕЩЕНИЕ│ДЛИНА│ОПИСАНИЕ                                       │
├────────┼─────┼───────────────────────────────────────────────┤
│0       │8    │Имя текущего каталога                          │
├────────┼─────┼───────────────────────────────────────────────┤
│8       │3    │Его тип (пробелы)                              │
├────────┼─────┼───────────────────────────────────────────────┤
│11      │1    │CSR (???) каталога                             │
├────────┼─────┼───────────────────────────────────────────────┤
│12      │2    │CBNN (похоже начальный блок) каталога -        │
│        │     │прародителя                                    │
├────────┼─────┼───────────────────────────────────────────────┤
│14      │2    │Размер каталога (в байтах)                     │
├────────┼─────┼───────────────────────────────────────────────┤
│16      │1    │Уровень вложенности каталога.                  │
├────────┼─────┼───────────────────────────────────────────────┤
│17      │2    │Номер блока описателя сегмента. (Это интересно.│
│        │     │Каталог может быть непрерывным, тогда здесь    │
│        │     │может быть и номер первого блока. Но тогда для │
│        │     │определения в CSR должны быть биты состояния)  │
├────────┼─────┼───────────────────────────────────────────────┤
│19      │2    │Номер 0-го блока каталога (Это тогда зачем ?)  │
├────────┼─────┼───────────────────────────────────────────────┤
│21      │1    │Общее число файлов                             │
│        │     │(включая сам каталог и удаленные)              │
├────────┼─────┼───────────────────────────────────────────────┤
│22      │1    │Число файлов                                   │
│        │     │(чисто без каталога, ну и удаленных)           │
└────────┴─────┴───────────────────────────────────────────────┘

Ну вот, с IS-DOS разобрались.







Другие статьи номера:

От редакции - история создания журнала.

Путеводитель - подробное содержание номера.

Описание оболочки - описание оболочки и методов ее правильной эксплуатации.

Авторы - об авторах.

Ассемблер - Z80 Flags: недокументированные комманды процессора Z80.

Ассемблер - Оверлеи для JC: Описание методов создания утилит работающих под управлением Jemmini_Commander 4.0T.

Ассемблер - Секреты TR-DOS: о методах пределения наличия дисководов.

Ассемблер - Круги на воде: Алгоритмы имитации эффекта известного на других платформах, под названием "круги на воде".

Ассемблер - Поиск пути. Решение задачи "статического" поиска наикратчайшего маршрута между двумя точками.

Отдохни - Механический эффект. История о том, что бывает, если использовать презервативы сомнительного происхождения.

Железо - Глюки клавиатуры: почему в играх для двух игроков, при игре вдвоем, компьютер не слушается вашего управления и информация о том, как этого избежать.

Железо - Прерывания: Кое-что непонятное о прерываниях второго рода.

Техпомощь - Мысли вслух. Интересно письмо из конференции fido7.zx.spectrum на тему "К вопросу о стандартизации".

Техпомощь - File FAQ. Полный разбор форматов файлов, наиболее часто встечающихся в Интернет, и не только; а также способы их конвертации в "нормальный" вид.

Техпомощь - Dos Review: материал по формату дисковой операционной системы IS-DOS.

Техпомощь - Dos Review 2: материал по формату дисковых операционных систем ПК "АГАТ", Радио-86РК, SP-DOS, БК-0011М.

Техпомощь - Dos Review 3: материал по формату дисковых операционных систем CP/M, ASC SOUND MASTER, RT11, СМ ЭВМ РАФОС.

Техпомощь - Dos Review 4: материал по формату дисковой операционной системы от неизвестного автора.

DI:HALT:99 - Анализ DH:99. Наконец-то вся правда о прошедшей летом, в г.Дзержинске пати, от самих организаторов.

DI:HALT:99 - Hidden Parts. Жизнь дзержинских (и не только) спектрумистов в период проведения DI:HALT:99.

DI:HALT:99 - Результаты. После прошествия DH:99, чуть ли не каждая вторая газета, считала своим долгом придумать новый вариант результатов. Данная статья направле- на на то, чтобы окончательно поставить все точки над "И".

Программы - Alien: описание и прохождение игры по фильму "Чужой".

Программы - описание Universal AntiProtector 0.01 (программа для автоматического раскалывания ряда популярных защитных систем).

Программы - редактор игровых экранов "Белые Пятна".

Программы - Exhumator: программа для "эксгумации дисков".

Программы - чанковый графический редактор: Hard Core ver 3.01

Программы - Глаз Вопиющего: програмка позволяющая смотреть картинки, спрайты, слушая при этоммузыку.

Отдохни - Стих о Sysop'e. Поэзия однако...

Отдохни - Секс в Фидо. Юмористический расказ о том, как же на самом деле занимаются любовью заядлые фидошники.

Отдохни - Анекдоты. Подборка анекдотов с компьютерной тематикой.


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

Похожие статьи:
Новости - состояние дел в Сочинской группе Accept Corp.
FIDO слухи - UNIQUE GROUP из Екатеринбурга пишет МЕГАдемо; IBM vs Speccy.
CHA0TIC - CC'99 - воспоминания о Питерском демопати.
Millenium - результаты виртуального виртуального соревнования.
Смех один - Рассказ "Вредные задачи".

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