В продолжение поста о тапках. Итак, из .tzx я получил .tap, в котором есть 15 файлов. Хотелось бы извлечь файлики быстро. Вот только "быстрых" утилит не нашлось, я решил написать подобную программу. Набрал доков, и стал разбираться. Общий вид файла выглядит так:
BBBBB FB HH NNNNNNNNNNNNN IIIIIIIIIIIIIIIII cc LLLLL fb ddddd CC
|------ Spectrum-generated data -------| |---------|
13 00 00 03 52 4f 4d 7x20 02 00 00 00 00 80 f1 04 00 ff f3 af a3
len adr par1
Если разобрать непонятную диаграмму, то назначение блоков такое:
B-first block is 19 bytes (17 bytes+flag+checksum)
FB-flag byte (A reg, 00 for headers, ff for data blocks)
H-first byte of header, indicating a code block 3(0-basic,1-array,2-string,3-code)
N-file name
I-header info length of data blocks len,adr,par1
^If the file is a Program file, parameter 1 holds the autostart line number (or a number >=32768 if no LINE parameter was given) and parameter 2 holds the start of the variable area relative to the start of the program. If it's a Code file, parameter 1 holds the start of the code block when saved, and parameter 2 holds 32768. For data files finally, the byte at position 14 decimal holds the variable name.
c-checksum of header
SECOND BLOCK
L-length of second block
fb-flag byte
d-first two bytes of rom
C-checksum (checkbittoggle would be a better name!)
Еще одна заморочка случилась с подсчетом контрольной суммы, в которую не входит длина блоков. И контрольный - неясен тип данных для массивов/строк. Тут просто - сохранил из Бейсика готовые данные и сравнил дамп с картинкой. Но хранение переменных для меня осталось загадкой.
Комментарии
Отправить комментарий