SPM
ZXNet эхоконференция «zx.spectrum»
От Vova Hex → Кому All 09.02.1998
Dear Andrew!
Есть ли конвертор FDI в SPM'овские образы? Anadisk у меня не работает, а
хотелось бы посмотреть на iS-DOS-диск размером более 800К. Или посоветуй как это
сделать.
Yours truly, Hexman/BYTEX.
[Team ZX ASM] [Team Metallica] [Team Art Works]
От Andrew MOA → Кому All 12.02.1998
В день 09 Feb 98 Vova Hex имел счастье писать к Andrew MOA:
VH> Есть ли конвертор FDI в SPM'овские образы?
Видимо нет.
VH> Anadisk у меня не работает, а хотелось бы посмотреть на iS-DOS-диск
VH> размером более 800К.
А структура у этого диска какая (сколько и каких секторов на дорожку)?
VH> Или посоветуй как это сделать.
Либо переслать мне формат FDI, и я его встрою, либо воспользоваться форматом
FDD и написать конвертор самому.
=== Cut ===
/* --------------------------------------*/
/* SPM (c) 1995-1998 MOA */
/* --------------------------------------*/
/* эмулятор образа дискеты (image.fdd) */
/* ------------------------------------- */
// параметры "дискеты"
#define versionLength 30
#define TRACKMAX (85*2)
#define SECTMAX 30 // число секторов на дорожке
/* формат файла образа диска */
/* заголовок */
struct diskHEADER {
char head[versionLength]; /* сигнатура */
byte trkMax; /* число треков, всего без учета головок */
byte headMax; /* число головок (1 или 2) */
long diskIndex = 0l; /* unused */
long trkIdx[TRACKMAX]; /* смещение в файле к структурам заголовков */
/* треков */
};
/* местоположение остальной информации в файле не фиксировано */
/* информация о дорожке */
struct diskTRACK {
byte trkType = 0; /* unused */
byte sectNum; /* число секторов на треке */
struct {
/* заголовок сектора */
byte trk; /* номер трека */
byte side; /* номер стороны */
/* 7 бит этого байта указывает бит a */
byte sect; /* номер сектора */
byte size; /* размер сектора (код) */
long sectPos; /* смещение в файле к данным сектора */
} sect[SECTMAX];
=== Cut ===
Сигнатуру надо "выдрать" из любого файла FDD созданого эмулятором.
Andrew
От Vova Hex → Кому All 12.02.1998
AM> Либо переслать мне формат FDI, и я его встрою, либо воспользоваться
AM> форматом FDD и написать конвертор самому.
Лучше переслать формат FDI. :) Мылом не рискую, так что...
=== Cut ===
##############################################################################
# #
# Формат FDI-файла #
# #
##############################################################################
Поскольку по ряду причин существующие форматы файлов-образов дискет
не подходили (отсутствие документации, а главное - невозможность расширения
формата для записи полных образов треков, областей с физическими дефектами
и т.п.), то пришлось создать свой собственный формат. Hе могу гарантировать,
что расширение *.FDI не используется еще кем-то для других целей; поэтому
оговорюсь, что данное описание актуально только для файлов, создаваемых
программой MAKEFDI и используемых программой SP_EMU (Spectrum debugger).
------------------------------------------------------------------------------
Смещение Длина поля Описание
------------------------------------------------------------------------------
0 3 Ключевая метка 'FDI'
3 1 Флаг защиты записи (0 - write enabled, 1 - write disabled)
4 2 Число цилиндров
6 2 Число поверхностей
8 2 Смещение текста (короткий комментарий к диску)
A 2 Смещение данных
С 2 Длина дополнительной информации в заголовке. В этой версии - 0
E "Длина дополнительной информации"
Формат еще не определен (резерв для дальнейшей модернизации)
E+"длина дополнительной информации"
???
Область заголовков треков. Здесь собрана вся информация о
формате дискеты. Эта область должна содержать не меньше
"Число цилиндров"*"Число поверхностей" заголовков. Заголовки
идут в порядке Cyl 0 Head 0, Cyl 0 Head 1, Cyl 1 Head 0 и т.д.
Формат заголовка описан ниже.
"Смещение текста"
???
Комментарий к диску.Конец комментария - нулевой символ.
MAKEFDI при создании нового файла позволяет вводить комментарий
не более 64 символов с завершающим нулем,но при работе с файлом
длина этого поля будет определяться по положению завершающего
нулевого символа
"Смещение данных"
???
Здесь лежат собственно данные из секторов. Сколько здесь будет
секторов, их длина и порядок следования - зависит от формата.
-------------------------------------------------------------------------------
Формат FDI-файла допускает пропуски между областями заголовков треков,текстовым
комментарием и областью данных.
Формат заголовка трека
------------------------------------------------------------------------------
Смещение Длина поля Описание
------------------------------------------------------------------------------
0 4 Смещение трека - начало области данных этого трека
относительно "Смещения данных"
4 2 Всегда содержит 0 (резерв для модернизации)
6 1 Число секторов на треке
7 (Число секторов)*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 ===
Это всё...