OldComp.cz
https://oldcomp.cz/

Záludnosti spectrácké pásky (TAP, TZX)
https://oldcomp.cz/viewtopic.php?f=41&t=6460
Stránka 11

Autor:  tomascz [ 30.06.2018, 09:27 ]
Předmět příspěvku:  Záludnosti spectrácké pásky (TAP, TZX)

Zatím se budu držet pouze TAPky.
Před možná dvěma lety jsem četl její specifikaci a zaujal mě typ bloků zvaný "fragmenty". Pokud své povídání začnu běžným blokem, tak ten je v TAPce definován jako:
Kód:
2 bajty délky bloku (data plus flag plus checksum)
1 bajt flag (0 = header, 255 = data, cokoliv jiného = uloženo nestandardní rutinou)
N bajtů dat samotných
1 bajt checksum
Z toho vyplývá, že blok nulové délky bude v TAPce zabírat čtyři bajty (protože N=0). Běžný soubor sestává ze dvou bloků - hlavičky (N=15) a dat, které jsou v TAPce uloženy výše uvedeným způsobem.
Pak je tu ale něco, co se nenazývá blok, nýbrž fragment. Ten je v TAPce definován jako:
Kód:
2 bajty délky bloku (data)
0 až 1 bajtů dat samotných, víc ne
Délka fragmentu tedy může v TAPce zabírat 2 až 3 bajty, víc ne, protože počínaje čtyřmi bajty se jedná o běžný blok s N bajty dat.
Léta jsem nemohl objevit žádnou TAPku, která by obsahovala fragmenty - zaměřoval jsem se především na "dohrávkové" hry, kde jsem předpokládal, že je objevím snáz než u běžných "nedohrávkových" her. Nakonec jsem fragmenty paradoxně objevil u nedohrávkového Cyberun (a letos vydaného Rubicon), jehož obsah TAPky vypadá následovně (přepis z emulátoru SpecEmu):
Kód:
 0: Program: "Cyberun   " Line 1
 1:  --Data:              141
 2: CODE:    "PIC       " 24576,6990
 3:  --Data:              6990
 4: CODE:    "CY        " 24192,40300
 5:  --Data:              40300
 6: Headerless:           0   -\
 7: Headerless:           0    |
 .....                         > uloženo jako fragmenty, nikoliv datové bloky s nula bajty dat
59: Headerless:           0    |
60: Headerless:           0   -/

Teď konečně k mému dotazu - k čemu vlastně slouží ony fragmenty? Je to jenom formalita jak v TAPce zaznamenat určitý copy-protection mechanizmus zaznamenaný na reálné pásce? Pokud ano, jak se např. fragment č.6 (nemá žádná data) zaznamená na pásku?

Hlodá mi to v hlavě, protože pokud smažu všechny fragmenty, Cyberun se vpohodě nahraje a spustí - nevidím proto jejich význam, a zvažuju, že bych je ve své implementaci TAPky naprosto vypustil, resp. ignoroval. Bohužel jsem zatím neobjevil TAPku s fragmentem o jednom bajtu dat, jehož vypuštěním bych mohl pozorovat (změněný) chod programu v emulátoru. Proto se ptám, k čemu vlastně jsou dřív než je chybně vypustím/ignoruju :-)

Autor:  Panda38 [ 30.06.2018, 09:59 ]
Předmět příspěvku:  Re: Záludnosti spectrácké pásky (TAP, TZX)

Podle popisu jsem to pochopil tak, že fragmenty jsou jen vedlejší produkt generátoru TAP souboru - má připraveno X datových "slotů" a které zůstanou prázdné, tak uloží jen prázdnou hlavičku, aby ji emulátor mohl přeskočit (pro případ kdyby se chtělo využít pořadí bloků, např. že 5. blok obsahuje xxx), ale na pásku se takový blok neuloží. Tj. když se vypustí, tak se to nijak neprojeví, nejsou potřebné.

Autor:  baktra [ 30.06.2018, 12:48 ]
Předmět příspěvku:  Re: Záludnosti spectrácké pásky (TAP, TZX)

To určitě není kvůli generátorům TAP souborů.

Je to prostě způsob, jakým formát TAP dovoluje uložit následující záznam:
1. Zaváděcí tón
2. Synchronizační pulz
3. Žádný nebo jeden byte dat.

Normální blok totiž vždy začíná hlavičkovým bytem a končí kontrolním součtem. Minimální délka normálního bloku je tedy dva byty (pokud nenese žádná uživatelská data). 1bytový blok tedy není možné v TAP formátu normálně popsat, proto byl zaveden fragment.

Takové bloky měly speciální význam - již zmíněná ochrana proti kopírování, rozlišení čísla části u vícedílných her, případně prázdný blok čistě na naměření přenosové rychlosti u programů, které využívaly jinou než standardní přenosovou rychlost.

Autor:  tomascz [ 30.06.2018, 17:19 ]
Předmět příspěvku:  Re: Záludnosti spectrácké pásky (TAP, TZX)

Skvělé, moc díky za vyčerpávající odpověď!! :-)
Nebudu je tedy vypouštět ani ignorovat.

Autor:  Busy [ 01.07.2018, 20:50 ]
Předmět příspěvku:  Re: Záludnosti spectrácké pásky (TAP, TZX)

Obecna definicia TAPky je ze je to mnozina blokov, kde prve dva bajty bloku su vzdy pocet nasledujucich bajtov a nasledujuce bajty presne exaktne zodpovedaju tomu, ake bajty su ulozene na realnej fyzickej paske za uvodnym tonom a sync-pulzom. To ze prvy z nich sa zvykne nazyvat flagbajt a posledny parita, je uz "logicky" format ktory (obvykle) pouziva load-save rutinka v romke - flagbajt aby odlisila hlavicku od tela a paritu pre detekciu chyb pri nahravani.

Vela programov spracovavajich tapku pocita rovno s tymto "logickym" formatom a ak udaj o dlzke v prvych dvoch bajtoch (pocet nasledujucich datovych bajtov) mensi ako 2, tak to povazuju bud za koniec tapky alebo chybu formatu.

Autor:  tomascz [ 02.07.2018, 17:01 ]
Předmět příspěvku:  Re: Záludnosti spectrácké pásky (TAP, TZX)

Busy píše:
Obecna definicia TAPky je ze je to mnozina blokov, kde prve dva bajty bloku su vzdy pocet nasledujucich bajtov a nasledujuce bajty presne exaktne zodpovedaju tomu, ake bajty su ulozene na realnej fyzickej paske za uvodnym tonom a sync-pulzom. To ze prvy z nich sa zvykne nazyvat flagbajt a posledny parita, je uz "logicky" format ktory (obvykle) pouziva load-save rutinka v romke - flagbajt aby odlisila hlavicku od tela a paritu pre detekciu chyb pri nahravani.
Taky skvělá odpověď, díky :-)
Busy píše:
Vela programov spracovavajich tapku pocita rovno s tymto "logickym" formatom
No, a to já už od předvčerejška nepočítám :-) Před-předchozí (původní) implementace s tím počítala; ta předchozí zahlásila, že "Tapka obsahuje fíčury, které nejsou momentálně podporovány", a současná už umí konverzi mezi všemi typy souborů/bloků (Program, Code, Numbers, Chars, Headerless, Fragment - fragment samozřejmě pouze, pokud délka dat je nula až jeden bajt) :-)

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/