Shodou okolností si pro sebe vyrábím program v Perlu, který má umět z několika MZF souborů sestavit obraz QD, či naopak z obrazu vyextrahovat program do MZF (už jsem to tu zmiňoval někdy kolem Vánoc, ale pořád se nějak nemůžu dostat k tomu to dodělat do publikovatelné podoby
), takže jsem se zajímal o strukturu MZQ souborů a můžu vám dát pár informací ke třetí otázce.
Tady je popis struktury MZQ souboru (mám to jako komentář na začátku programu):
# Struktura MZQ souboru:
# 00 16 16 A5 aa 43 52 43 00 16 16 A5 bb cc cc ...
# SYNC aa CRC SYNC bb cc cc hlavicka CRC SYNC dd ee ee data CRC SYNC ... CRC
#
# SYNC 4 byty: 00 16 16 A5
# CRC 3 byty: 43 52 43
# aa 1 byte: pocet datovych bloku v souboru (= pocet souboru / 2)
# bb 1 byte: priznak datoveho bloku s hlavickou (mel by byt 00)
# cc cc 2 byty: delka datoveho bloku (hlavicka by mela byt 40 00)
# dd 1 byte: priznak datoveho bloku s daty (mel by byt 05)
# ee ee 2 byty: delka datoveho bloku
#
# Struktura hlavicky:
# ff jmeno gg gg hh hh ii ii komentar
#
# ff 1 byte: typ souboru
# nazev 19 bytu: jmeno souboru ukoncene 0D
# gg gg 2 byty: velikost souboru (mela by byt shodna s delkou nasledujiciho datoveho bloku = ee ee)
# hh hh 2 byty: zavadeci adresa
# ii ii 2 byty: spousteci adresa
# komentar 38 bytu, pry se nepouziva
V odkazovaném popisu je chyba v popisu hlavičky "DATA 40 length of the following data", kde je jen jeden byte, ale délka hlavičky je uložena ve dvou, stejně jako délka dat. Dále je tam udedeno, že datový blok má type byte 01, ale já všude našel 05.
Pak je tam ještě zrada v tom, že některé MZF soubory jsou delší, než udává délka v hlavičce. Už jsem to tu taky řešil a vzniká to prý tak, že když se soubor protáhně přes CP/M, tak to ho zarovná na násobek tuším 128 bytů. Tahle chyba/vlastnost se přenáší i do do MZQ soubrů, takže občas je datový blok delší než uvádí hlavička. Kupodivu nejen hlavička programu, ale dokonce i záhlaví samotného datového bloku - u mě byty označené ee ee. To už mi fakt přijde jako chyba, ale mají to téměř všechny MZQ, které jsem zkoumal, a emulátorům ani unikartě to nevadí. Plyne z toho, že při čtení se nedá spoléhat, že za koncem dat je hned další synchronizační sekvence, ale je třeba ji hledat.
S těmito informacemi jsem byl schopen vyrobit program, který mi spolehlivě přečte a rozebere všechny MZQ soubory, které jsem na Internetu našel, případně jinými programy vyrobil, takže další záludnosti tam snad nejsou (je fakt, že zatím nemám dodělanou tvorbu MZQ, takže na ně možná narazím, až začnu produkovat MZQ, které mi emulátory budou odmítat
).
Ještě dvě poznámky: Některé MZQ mají fixní délku 64 KB bez ohledu na obsah (ty vyrábí např. odkazovaný MZQDTool), jiné jsou kratší, končí za posledním datovým blokem. Zdá se, že emulátorům je to jedno.
Čísla typů souborů se kupodivu u nekterých typů liší pro kazeťák a QD, z nejpoužívanějších je to snad jen BSD, který má pro CMT 04 a pro QD 03 a BTX - CMT = 05, QD = 02 (nevím, jestli to pro Vás má význam).
Snad jsem Vám trochu pomohl, ať se práce daří!
AZ