ZX-Files #01
29 декабря 2000

         Несколько слов о MS-DOS.

 Немало времени прошло с тех пор когда я
написал свой MSCOM v0.0 . Вообще задумка
была  неплохая,  но как известно, первый
блин комом. Вообще главной отличительной
чертой  моего  MSCOM'а было то, что она,
согласно идее, должна была учитывать все
особенности MSDOS, и в частности сегмен-
тацию файлов. (Этим кстати и об'ьясняет-
ся тормознутость дисковых операций как в
IS-DOS'е так и в MSCOM'е.) И по сей день
ни  одна программа конвертящая с писюка,
кроме этих двух, не поддерживает сегмен-
тацию  файлов.  Поскольку я еще не скоро
возьмусь  за переписывание MSCOM'а, то я
решил  выдать  информацию по MSDOS, дабы
если  найдется  молодец  который захочет
написать очередной конвертор,я хочу что-
бы он пр принял все к сведению и не сот-
ворил  очередной  лейм.  Да, кстати, все
пишу  по  памяти, и по этому 100%-ю точ-
ность не гарантирую.

        1.1 Общая информация.

Оговорюсь сразу: Вся информация приведе-
на  для  формата MSDOS диска на 720, как
единственно  пригодного  для  чтения  на
спектруме.
  Итак: формат MSDOS диска имеет следую-
щую структуру:

  1. Размер сектора:  ....... 512 байт.
  2. Кол-во секторов в треке: 9
  3. Кол-во треков:  ........ 80 (160)

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

       1.2 Системный сектор.

  Нулевой  сектор на нулевом треке явля-
ется  системным.  В  нем записана важная
информация  о  структуре  диска в целом,
фаиловой и физической структуре оного.
  Эта    информация   называется   Block
Parametrs of BIOS (BPB). Вот ее вид:

 +12 SectSiz : Word;

  Количество  байт в секторе. Всегда со-
держит 512.

 +14 ClustSize : Byte;

  Количество секторов в кластере (см.ни-
же). Для формата 720 всегда содержит 2.

 +15 ResSect : Word;

  Кол-во секторов перед FAT. (см. ниже)

 +17 FatCnt : Byte;

 Кол-во копий FAT. обычно 2 для диска.

 +18 RootSiz  :  Word;

  Кол-во элементов корневого каталога.

 +20 TopSecs : Word;

  Кол-во секторов на диске.

 +22 Media : Byte;

  Дескриптор носителя.

 +23 FatSize : Word;

  Размер FAT в секторах.

  Поле Media определяет тип носителя ин-
формации:

 ╔════╤═════════════════════════════╗
 ║ Бит│       Признак               ║
 ╟────┼─────────────────────────────╢
 ║  0 │ Двух/односторонний носитель.║
 ╟────┼─────────────────────────────╢
 ║  1 │ 8/не 8 секторов на треке.   ║
 ╟────┼─────────────────────────────╢
 ║  2 │ Винчетер/Дисковод           ║
 ║    │                             ║
 ╚════╧═════════════════════════════╝

  Сразу  за BPB содержится следующая ин-
формация:

  +25 TrkSecs : Word;

  Кол-во секторов на дорожке;

  +27 HeadCnt : Word;

  Кол-во головок устройства;

  +29 HidnSecs : Word;

  Кол-во спрятанных секторов.

 Дальнейшая  структура  относится к вин-
честеру,  и  здесь описывать ее не имеет
смысла.



       1.3  FAT - структура.

 За  загрузочным  сектором располагается
так  называемая FAT-структура. Начало ее
можно  узнать,  отступив от начала диска
количество  секторов, которое содержится
в поле ResSecs (из BPB).
 FAT (File Allocation Table) - важнейшая
структура  на диске. Как следует из наз-
вания,  FAT содержит информацию о распо-
ложении файлов.
 Теперь позвольте мне сделать лирическое
отступление.  Весь диск в формате MS-DOS
делится   на  так  называемые  кластеры.
Кластер  представляет собой группу смеж-
ных  секторов (1 или более, в нашем слу-
чае, при формате на 720, - 2). Кластер -
это   элементарная   единица  в  системе
MS-DOS,  т.е. это меньшее что вы сможете
считать  с  диска.  Кластер определяется
его  абсолютным номером и при формате на
720 этот номер задается 12-и битным чис-
лом.
 Вернемся к FAT. Итак, из всего вышеска-
занного  следует что FAT определяет при-
надлежность  кластеров к своим файлам, и
вот  как это устроено: FAT-структура со-
держит цепочки ссылок: где-то в описате-
ле  файла  содержится  номер его первого
кластера,  программа  берет  этот номер,
считывает  в  память соответствующий ему
кластер,  и  дальше заглядывает в ячейку
FAT  с  этим же номером, а в этой ячейке
содержится  номер  следующего  кластера,
одновременно  являющийся  ссылкой далее.
Так  программа потихоньку считывает файл
пока  вместо  номера очередного кластера
не достанет из FAT управляющий код конца
чтения.


┌───────┬┬───┬┬┬┬┬┬┬┬┬───┬───┬──┬─────┐
│ Myfile  txt        │tim│dat│02│Длина│
└───────┴┴───┴┴┴┴┴┴┴┴┴───┴───┴╫─┴─────┘
       ╔══════════════════════╝
┌──┬──┬──┬──┬──┬──┬──┬─────┐
│ID│FF│03>04>05>08│1E│09>FF│
└──┴──┴──┴──┴──┴─║┴──┴ ^ ──┘
                 ╚═════╝

 В  структуре FAT используются следующие
управляющие коды:

  от #FFO до #FFб - Кластер зарезервиро-
ван.

     #FF7 - Сбойный кластер.

  от #FF8 до #FFF   конец файла.

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

       1.4 Структура каталогов.

 Сразу  за последней копией FAT располо-
гается корневой каталог, содержащий опи-
сатели зарегестрированных в нем подката-
логов  и файлов. Каждый элемент каталога
описываетя  32-х байтной структурой дан-
ных:


╔═══╤═══════╤═════╤════════════════════╗
║См.│ Поле  │Длина│  Смысл             ║
╟───┼───────┼─────┼────────────────────╢
║+00│ Name  │  8  │ Имя файла.         ║
╟───┼───────┼─────┼────────────────────╢
║+08│ Ext   │  3  │ Расширение.        ║
╟───┼───────┼─────┼────────────────────╢
║+11│ Fattr │Byte │ Атрибуты файла.    ║
╟───┼───────┼─────┼────────────────────╢
║+12│Reserv │ 10  │ 10 байт Бреда.     ║
╟───┼───────┼─────┼────────────────────╢
║+22│ Time  │Word │ Время создания.    ║
╟───┼───────┼─────┼────────────────────╢
║+24│ Date  │Word │ Дата создания.     ║
╟───┼───────┼─────┼────────────────────╢
║+26│FistC  │Word │Номер 1-го кластера.║
╟───┼───────┼─────┼────────────────────╢
║+28│Size   │4    │Разм. файла в байтах║
║   │       │     │                    ║
╚═══╧═══════╧═════╧════════════════════╝

 Следующая таблица отражает значение по-
ля Fattr.

    ╔════╤════════════════════════╗
    ║бит │      Смысл             ║
    ╟────┼────────────────────────╢
    ║ 0  │ Защита от изменений.   ║
    ║ 1  │ Скрытый файл.          ║
    ║ 2  │ Системный файл.        ║
    ║ 3  │ Идентификатор тома ??? ║
    ║ 4  │ Подкаталог             ║
    ║ 5  │ Признак архивации      ║
    ║    │                        ║
    ╚════╧════════════════════════╝

 Поле   FirstC  содержит  номер  первого
кластера файла или каталога. Подкаталоги
имеют ту же структуру что и корневой ка-
талог. Байт #00 в начале описателя файла
указывает  на  конец каталога, а #120 на
то что этот файл стерт. Для каждого под-
каталога  элемент  с именем "." содержит
ссылку  в  корневой каталог, а ".." - на
предыдущий уровень.

            1.5 Заключение.

 Вот  пожалуй и все что необходимо знать
синклеристу о системе MSDOS. Еще не могу
не  сказать о пришедшей ко мне недавно в
голову  идее, относительно ускоения опе-
раций  с MSDOS диском. Очень часто клас-
тера файла лежат друг за другом и поэто-
му,  чтобы  не читать кластеры по одному
(а  это  и  есть  главный тормоз), можно
посмотреть FAT таблицу, вычленить группы
смежно лежащих кластеров и считывать эти
группы  как пачки секторов. По моей при-
кидке скорость должна возрости в 3-4 ра-
за,  так  как диск не будет делать левые
обороты там где не надо.
 Вобщем,  я думаю, информации достаточно
чтобы написать грамотный конвертер. Если
необходима дополнительная информация или
какие  либо исходники обращайтесь ко мне
(KotSoft'у).  Засим расшаркаюсь...

 При   написании  статьи  использовались
справочные материалы из книги В.В. Фара-
онова.  "Turbo  Pascal  7.0  - Практикум
программирования"

  (C) KotSoft 31.08.00



Other articles:


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

Similar articles:
Life outside the Spectrum - UFOs: Are there other civilizations?
Vedem - Description, prohodilka games: Dizzy 3: Fantasy World.
Entry - the contents of rooms.
TOP TEN - Desyatochka best games.

В этот день...   21 November