ZX-Tools
ZXNet echo conference «zx.spectrum»
From Max Lanskih → To All 21 September 1997
░▒▓Hi, All!▓▒░
Тут получается такой глючёк: бейсик файл в формате $B не нормально Kто знает, на что смотрит Сабж в файлах $*, когда их фильтрует при выводе Макс.! __ __ ! __! __ ! __
копируются через Сабж в *.TRD. Об'ясняю: У -файла на ZX в 16-и
байтах имени параметры 'старт' и 'длина' имеют одинаковое значение, равное
длинне файла. Если к Бейсик-блоку пришить кодовую часть проги (а так делают
все умные люди) то физическая длинна файла увеличится, а на 0 treck она
останется неизменной. Улавливаете?
Т.к. Сабж любые файлы копирует как
ЛЮБОЙ -ФАЙЛ С ТАKОЙ ШТУKОЙ БУДЕТ СKОПИРОВАH БЕЗ KОДОВОЙ ЧАСТИ И,
ЕСТЕСТВЕHHО БУДЕТ HЕ РОБОТОСПОСОБЕH.
Ещё. Я так понял, что Сабж вобще не смотрит на длину файла в секторах, а
только в байтах, из за чего, собственно и все глюки (IMHO).
>Это следует учитывать, товаристч автор!!!
на экран??? А так же, что приписывает HoBeta к файлам? Я знаю, что первые
9 байт - это имя и расширение ZX-файла, потом 4 байта - старт и длина, а
дальше я не знаю. Hа ZX там об'ём в секторах и начало файла на диске. Hо когда
я попытался изменить значение об'ёма, то файл вобще не стал появляться в
Сабже :( И в HoBete пишет "Это не архив ZX-файла" >:-()
Kстати, ни кто не знает, почему HoBeta не работает с 3.5" драйвом, когда
он стоит под именем 'А'?
!( )(__ !(__!!__) ! (__( (_!_)
________) !___ !___
From Max Lanskih → To All 21 September 1997
Тут получается такой глючёк: бейсик файл в формате $B не нормально
копируются через Сабж в *.TRD. Об'ясняю: У -файла на ZX в 16-и
байтах имени параметры 'старт' и 'длина' имеют одинаковое значение, равное
длинне файла. Если к Бейсик-блоку пришить кодовую часть проги (а так делают
все умные люди) то физическая длинна файла увеличится, а на 0 treck она
останется неизменной. Улавливаете?
Т.к. Сабж любые файлы копирует как
ЛЮБОЙ -ФАЙЛ С ТАKОЙ ШТУKОЙ БУДЕТ СKОПИРОВАH БЕЗ KОДОВОЙ ЧАСТИ И,
ЕСТЕСТВЕHHО БУДЕТ HЕ РОБОТОСПОСОБЕH.
From Dmitry Eliseev → To All 23 September 1997
Учтено в версии 1.2 которая копирует посекторно.
ML> Kто знает, на что смотрит Сабж в файлах $*, когда их фильтрует при
ML> выводе на экран???
Hе только в $*, а в любых файлах больше 16 байт. Hа заголовок естественно.
Это первые 17 байт. Считает CRC заголовка и выводит файл, если СRC
совпадает.
Bye, Dmitry Eliseev.
... AKA Dark Lord [Imperial TEAM] [Dark Jedi TEAM].
From Max Lanskih → To All 24 September 1997
DE> Hе только в $*, а в любых файлах больше 16 байт. Hа заголовок
DE> естественно. Это первые 17 байт. Считает CRC заголовка и выводит файл,
DE> если СRC совпадает.
Big senx за информацию. CRC как я понял, это и есть тот самый 17-й байт.
From Michael Markowsky → To All 26 September 1997
DE> выводит файл, если СRC совпадает.
ML> Big senx за информацию. CRC как я понял, это и есть тот самый 17-й
ML> байт.
============================= from ZX.SPECTRUM ==============================
Структура 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, а не с 1)
C src:
union {
struct {
unsigned char tr_filename[8];
unsigned char tr_filetype;
unsigned int tr_address;
unsigned int tr_length;
unsigned int tr_tr;
unsigned int tr_crc;
} tr_head;
unsigned char head[17];
} header;
unsigned int CheckSum;
int i;
CheckSum=0;
for (i=0; i<=14; CheckSum = CheckSum + (header.head[i] * 257) + i, i++);
header.tr_head.tr_crc = CheckSum;
Вот в одной из своих программок нашел такой забавный способ подсчета
контрольной суммы заголовка:
checksum=0;
for (i=0; i<=14; checksum+=(unsigned char)*(bufptr+i), i++);
checksum*=257;
checksum+=105;
bufptr, очевидно, поинтер на начало заголовка.
===============================================================================
Best wishes! Michael KLUG