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

Virtual Worlds #01
 ┌────────────────────────────┐
░▒▓▒▓█ FILE FORMATS █▓▒▓▒░ └────────────────────────────┘

                (C)Time Keeper


  В последнее время Спектрум все
больше и больше "разрастается" в
сети  Интернет.  Если  составить
список  всех сайтов, посвященных
Спектруму,  всех ftp-серверов, с
которых  сегодня  можно  скачать
программы      для     спектрум-
совместимых  машин, то их набра-
лось  бы  никак не меньше сотни.
Но  форматы хранения спектрумов-
ской  информации  никак не стан-
дартизированы.  Даже  в пределах
одного  сайта  можно  найти все:
хобетные файлы, trd-образы, fdi-
образы,  tap'ы,  snapshot'ы и т.
п.

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

  Цель  этой статьи - дать чита-
телям  максимум знаний о различ-
ный  форматах  хранения спектру-
мовской информации на IBM-PC и в
сети Интернет, с которыми наибо-
лее часто приходится сталкивать-
ся на сегодняшний день.

--------------------------------


       Формат TRD-файла.

  Данный   формат   используется
эмуляторами Спектрума в качестве
образа  дискеты. Т. е. когда при
работе  в  эмуляторе  происходит
обращение к TR-DOS, эмулятор ра-
ботает с этим файлом, считая его
дискетой.  Формат образа *.trd -
один  из  самых простых. Это, по
сути, обыкновенный двухсторонний
80-трековый    TR-DOS   диск   с
шестнадцатью секторами на дорож-
ке,  по 256 байт каждый. Т. е. в
файле  данного  формата  целиком
хранится  содержание TR-DOS дис-
кеты ( вместе с каталогом ). Для
декодирования в формат реального
Спектрума  необходимо просто за-
писать содержащиеся в нем данные
на чистую TR-DOS дискету начиная
с нулевой дорожки. Размер файлов
*.trd  чаще  всего  равен 655360
байт  (  2544+16 tr-dos секторов
),  но  иногда встречаются обре-
занные   *.trd   образы  (меньше
655360  байт),  а также "резино-
вые" (больше 655360 байт).

  Но за простоту приходится пла-
тить.   На  таком  образе  диска
нельзя   создать   нестандартный
формат, в следствии чего появил-
ся еще один, довольно распостра-
ненный сегодня, формат *.fdi.



       Формат FDI-файла.

  Описание  написано самим авто-
ром данного формата:

------------- Cut. -------------

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

  Не   могу  гарантировать,  что
расширение *.FDI не используется
еще  кем-то  для  других  целей;
поэтому  оговорюсь,  что  данное
описание  актуально  только  для
файлов,  создаваемых  программой
MAKEFDI  и используемых програм-
мой  SP_EMU (Spectrum debugger).



Смещение  (длина поля) описание:
  ┬         ┬           ┬
 ┌┘  ┌──────┘           │
 │   │       ┌──────────┘
 ┴   ┴       ┴
+00 (3) Ключевая метка 'FDI'.

+03 (1) Флаг  защиты записи (0 -
write   enabled,   1   -   write
disabled).

+04 (2) Число цилиндров.

+06 (2) Число поверхностей.

+08 (2) Смещение текста ( корот-
кий комментарий к диску ).

+0A (2) Смещение данных.

+0C (2) Длина дополнительной ин-
формации  в  заголовке.  В  этой
версии = 0.

+0E "Длина дополнительной инфор-
мации".  Формат еще не определен
( резерв для дальнейшей модерни-
зации ).

+0E   +   "длина  дополнительной
информации".

+??  Область  заголовков треков.
Здесь  собрана  вся информация о
формате   дискеты.  Эта  область
должна содержать не меньше "Чис-
ло  цилиндров"*"Число поверхнос-
тей"  заголовков. Заголовки идут
в  порядке  Cyl  0 Head 0, Cyl 0
Head  1,  Cyl  1  Head 0 и т. д.
Формат заголовка описан ниже.

"Смещение текста"

+??  Комментарий  к диску. Конец
комментария  -  нулевой  символ.
MAKEFDI при создании нового фай-
ла позволяет вводить комментарий
не  более  64  символов с завер-
шающим  нулем,  но  при работе с
файлом  длина  этого  поля будет
определяться по положению завер-
шающего нулевого символа.

"Смещение данных"

+??  Здесь лежат собственно дан-
ные  из  секторов. Сколько здесь
будет секторов, их длина и поря-
док следования - зависит от фор-
мата.

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

    Формат заголовка трека:

Смещение  (длина поля) описание:
  ┬         ┬           ┬
 ┌┘  ┌──────┘           │
 │   │       ┌──────────┘
 ┴   ┴       ┴
+00 (4) Смещение  трека - начало
области   данных   этого   трека
относительно "Смещения  данных".

+04 (2) Всегда  содержит 0 ( ре-
зерв для модернизации ).

+06 (1) Число секторов на треке.

+07  (Число секторов * 7) Инфор-
мация  о секторах на треке. Каж-
дый  сектор описывается 7 байта-
ми.  Первые 4 байта - стандарные
параметры  C,H,R,N  из адресного
маркера. Следующий байт - флаги:

bit 7=0 - маркер нормальных дан-
ных, 1 - удаленных данных;

bit  0-5:  флаги  CRC. Единица в
одном  из разрядов означает, что
при  считывании этого сектора на
длину  128,  256, 1024, 2048 или
4096 байт, получается правильная
контрольная  сумма. Если во всех
разрядах  0  -  сектор записан с
ошибкой  контрольной  суммы.

bit 6: В данной версии всегда 0.
Возможно, 1 в данном разряде бу-
дет  обозначать  адресный маркер
без области данных.

  Последние  2  байта - смещение
данных этого сектора относитель-
но  начала области данных трека.
Чтобы  получить абсолютный адрес
в  файле, к этому числу надо до-
бавить "Смещение данных" и "Сме-
щение трека".

7*(Число секторов+1) длина заго-
ловка трека.

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

                  ( Углеков К. )

------------ Cut. --------------



    Формат хобетных файлов.

  Данный   формат  придуман  для
хранения  отдельных  спектрумов-
ских файлов на IBM-PC и передачи
их  по Интернету. Берется содер-
жимое  TR-DOS  файла,  впереди к
нему добавляется заголовок из 17
байт и все это сохраняется в MS-
DOS  файл. Обычно хобетные файлы
имеют  вид  *.$X,  где  вместо X
стоит  символ, являющийся расши-
рением tr-dos файла, хотя это не
всегда так.

Структура 17-байтного заголовка,
добавляемого   к  TR-DOS  файлам
программой HoBeta.exe:

00-07 - имя файла
08    - тип файла
09-0A - Start
0B-0C - Length
0D-0E - Length в 256-байтных за-
писях  (байт  0E - pазмеp в сек-
тоpах)
0F-10 - Контрольная сумма

Таким  образом,  первые  14 байт
копируются из TR-DOS'овского ка-
талога.

Вычиление   контрольной   суммы:
S=S+257*Di+i, где

S начальное = 0
Di - значение байта
i  - порядковый номер байта (на-
чиная с 0).

  Но  когда  по Интернет пересы-
лается   программа  состоящая из
нескольких   файлов,  и  порядок
файлов  на  TR-DOS  диске  имеет
значение, то необходимо посылать
сопроводительный текстовый файл,
в  котором  описывается  порядок
следования  файлов.  Многие  это
забывают,  и  иногда  приходится
потратить несколько часов, чтобы
восстановить  правильный порядок
файлов  на TR-DOS диске. В связи
с   этим   был   придуман  более
совершенный формат *.scl.



       Формат файлов SCL.

  Текст  взят  из  руководству к
программе  AMD  Copier (IBM_PC).
Это первая программа, поддержав-
шая данный формат.


------------ Cut. --------------


 +00 (08) - надпись 'SINCLAIR'

 +09 (01) - число TR-DOS файлов,
содержащихся в SCL файле. <fnum>

 +0A (0E*fnum)  -  по 14 байт из
TR-DOS каталога на каждый TR-DOS
файл ( кроме дорожки/сектора )

+0A+0E*fnum   (??)  -  непосред-
ственно содержимое секторов.

+??    (04)   -   4-х   байтовая
контрольная  сумма  ( сумма всех
предыдущих байт SCL файла ).

------------- Cut. -------------


              to be continued...