ZART-TCH.DOC
Код:
ZART
File Transfer Utility for ZX Spectrum / IBM PC Computers
(C) Rick Murray, 1994, Chelyabinsk
Структуры всяких штук.
┌───────────────────────────────────┐
│ Стандартный заголовок файла, │
│ записанного на пленке. │
└───────────────────────────────────┘
typedef struct {
unsigned char type; тип файла
char name[10]; имя файла
unsigned int length; длина файла
unsigned int start; стартовый адрес
unsigned int blen; длина бейсика
} tHEADER;
┌───────────────────────────────────┐
│ Стандартный элемент каталога │
│ TR-DOS │
└───────────────────────────────────┘
typedef struct {
char name[8]; имя файла
char type; тип ('C','B', итд)
unsigned int start; стартовый адрес
unsigned int length; длина
unsigned char sex; количество секторов
unsigned char sector; стартовый сектор
unsigned char track; стартовая дорожка
} trHEADER;
Если это бейсиковский текст, то как правило start == length, а номер
стартовой строки вычисляется следующим способом:
- Берется буфер, куда считаны сектора, к-во которых берется из sex,
- От вершины буфера отсчитывается start байт,
- Следующими после этого должны идти 2 байта AA80h,
- Сразу за этими байтами - число int, обозначающее стартовую строчку.
┌───────────────────────────────┐
│ Заголовок файла, который │
│ понимает HOBETA. │
└───────────────────────────────┘
typedef struct {
char name[8]; имя для TR-DOS
char type; тип ('C','B',...)
unsigned int start; стартовый адрес
unsigned int length; длина
unsigned char temp; всегда 0
unsigned char sex; количество секторов
unsigned int checksum; контрольная сумма заголовка
} dHEADER;
Сразу вслед за этим заголовком следуют данные собственно файла, имеющие
размер sex * 256 байт.
Контрольная сумма рассчитывается следующим образом:
int dhcheck()
{
unsigned int i,j,k;
for(j=i=0; i<0x0F; ++i){
k = *((char *)&Dhead+i); k &= 0xFF;
j += (k * 0x0101 + i);
}
return j;
}
Здесь Dhead - переменная типа dHEADER содержащая сформированный
заголовок.
┌──────────────────────────────┐
│ Формат файла TAPE_ZX.SPC │
└──────────────────────────────┘
Файл состоит из циклически повторяющихся блоков:
Pазмер Тип Hазначение
─────────────────────────────────────────
2 unsigned int Pазмер блока данных
1 unsigned char Тип блока (0-заголовок, FF-данные)
?? ... Блок данных
1 unsigned char Контрольная сумма блока данных
Поле размера блока включает только размер самого блока данных.
Контрольная сумма считается как xor всех байт блока данных.
┌──────────────────────────┐
│ Формат TAP файла │
└──────────────────────────┘
Аналогично файл состоит из повторяющихся кусков:
Pазмер Тип Hазначение
─────────────────────────────────────────
2 unsigned int Pазмер всего, что надо считать относящегося к файлу.
(иными словами - размер блока данных + 2, т.е. плюс
байт типа и байт crc)
1 unsigned char Тип блока (аналогично SPC)
?? ... Блок данных
1 unsigned char Контрольная сумма блока данных вместе с байтом типа.
Поле размера включает размер блока данных + 2.
Контрольная сумма считается как xor фсех байт блока данных и байта типа.
TAP файл является точным отображением структуры записи на кассете за
исключением первых двух байт, вместо которых на пленке записан
лидер-сигнал и синхроимпульс.
┌────────────────────────────────────┐
│ Стандартный элемент какталога │
│ MS-DOS │
└────────────────────────────────────┘
Стандартный элемент какталога MS-DOS располагается в области таблицы
партиций и занимает по крайней мере первую половину диска MS-DOS. Для
того чтобы прочитать этот элемент необходимо по меньшей мере 12 минут,
для того чтобы направляющий ролик смог обнаружить межсекторное
пространство, а для того чтобы гарантировать правильное чтение данного
сектора, вы должны быть уверены, что сам какталог находится на диске, а
не под ним.