OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 17:48

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 20 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
PříspěvekNapsal: 30.06.2018, 09:27 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
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 :-)

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 30.06.2018, 09:59 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1972
Bydliště: Most, Praha
Has thanked: 864 times
Been thanked: 697 times
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é.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 30.06.2018, 12:48 
Offline
Profík
Uživatelský avatar

Registrován: 31.08.2014, 16:27
Příspěvky: 994
Bydliště: Praha
Has thanked: 63 times
Been thanked: 372 times
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.


Nahoru
 Profil  
 
PříspěvekNapsal: 30.06.2018, 17:19 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Skvělé, moc díky za vyčerpávající odpověď!! :-)
Nebudu je tedy vypouštět ani ignorovat.

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 01.07.2018, 20:50 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.07.2018, 17:01 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
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) :-)

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 02.05.2021, 16:38 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Ak tomu správne rozumiem, "fragment" v TAPke sú tri byty. Prvé dva sú klasicky dĺžka dát (v tomto prípade 1), tretí byt sú dáta:
1,0,n.

Mám dotaz: Existuje aj iný fragment, s 0,0 na začiatku? Za ním by už nenasledovalo nič, lebo dĺžka dát je daná nulou. To by prezentovalo zavádzací signál, synchronizačný impulz, a nič za ním.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.05.2021, 17:02 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Ešte k LOAD rutine v ROM. Ten takzvaný fragment s 1 bytom sa dá normálne nahrať. Možnosti LOAD sú tieto:

pri DE=0 sa nahrá 1 byt do CRC (register H),
pri DE>=1 platí:
pri NZ sa nahrá 2+DE bytov (flag, DE*data, CRC),
pri Z sa nahrá 1+DE bytov (DE*data, CRC).

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.05.2021, 17:10 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
PotPalo píše:
Ak tomu správne rozumiem, "fragment" v TAPke sú tri byty. Prvé dva sú klasicky dĺžka dát (v tomto prípade 1), tretí byt sú dáta:
1,0,n.
Ano, velmi spravne.
PotPalo píše:
Mám dotaz: Existuje aj iný fragment, s 0,0 na začiatku? Za ním by už nenasledovalo nič, lebo dĺžka dát je daná nulou. To by prezentovalo zavádzací signál, synchronizačný impulz, a nič za ním.
Ano, tento "fragment" 0,0 sa zvykol pouzivat vo vyzname ako koniec platnych dat v tap subore.

Napriklad clovek si na nejakom mnohobitovom filesysteme (FatXX, extX, ntfs ...) vytvori dostatocne dlhy subor, do ktoreho bude system na ZX Spektre emulujuci pasku zapisovat ukladane subory ako do tapky. Subor je v materskom filesysteme uz alokovany, takze nejaky osembitovy system na ZX (fatware,demfir...) sa uz nemusi starat o tuto alokaciu (co by napr. na FAT16 nemusel byt problem, ale pri takom NTFS by to uz bolo asi prilis velke susto), ale podla fragmentu 0,0 pozna, pokial su v tejto tapke platne data a odkial je uz volne miesto pre nejake nasledujuce SAVE.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.05.2021, 17:27 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Busy píše:
..."fragment" 0,0 sa zvykol pouzivat vo vyzname ako koniec platnych dat v tap subore.

Rovnako to mám v TAPaTAPa, na konci TAPky je 0,0 alebo 255,255. (keď dorobím SAVE, bude 255,255 začiatkom voľného miesta na zápis, a 0,0 bude pevný koniec, niečo ako softvérová ochrana proti zápisu)

Zvykol sa fragment 0,0 používať aj inak? Napríklad na vymazanie jedného súboru z TAPky? Hromada 0,0.... akurát by ten súbor musel mať párnu dĺžku. Alebo ako pauza?

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.05.2021, 18:05 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
PotPalo píše:
Busy píše:
..."fragment" 0,0 sa zvykol pouzivat vo vyzname ako koniec platnych dat v tap subore.
Rovnako to mám v TAPaTAPa, na konci TAPky je 0,0 alebo 255,255. (keď dorobím SAVE, bude 255,255 začiatkom voľného miesta na zápis
255,255 by som uricte nepouzival, pretoze SAVE "xxx" CODE 0, 65533 je normalny regulerny prikaz ktory vygeneruje prave takyto 255,255 blok.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.05.2021, 20:27 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Kto už ukladá 65533 bytov? A pokiaľ aj, tak normálne to aj tak nenahrá, iba ak vlastným loaderom, takže rutina v ROM sa nevyužije. Navyše LOAD by už nefungoval správne, lebo D musí byť menšie ako 255 (dĺžka<65280), podľa neho sa nastavuje NZ.

Ozaj, a čo SAVE "xxx" CODE 0, 65535? To už ani do TAPky nejde dať. (o ..4 viem tiež)

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
PříspěvekNapsal: 14.05.2021, 13:45 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Chci se zeptat, jak je to s povolenou délkou hlavičky? V některých páskách má totiž hlavička kromě standardních sedmnácti bajtů i něco navíc, a program se přesto vpořádku načte. Například Dizzy 3.5 z Paverovo stránek. V oprásku níže je navíc poslední bajt 0x1C (díky čemuž ji aplikace nerozpozná jako hlavičku, ale brž jako bezhlavičkový blok s flagem 0).

Co s tím? :)


Obrázek

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 14.05.2021, 13:56 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Z princípu LOAD rutiny je hlavičkou čokoľvek, čo má značkový byt 0 a XOR po 18 bytoch je 0 (18. byt je CRC). A ešte prvý byt musí byť od 0 do 3, určuje typ hlavičky (Program, Character array, Number array, Bytes). Takže na samotnej dĺžne bloku hlavičky nezáleží. Schválne, blok so značkovým bytom 0 a následne kopou (1k+) núl sa nahrá ako Program: ??????????. Totiž značkový byt je 0, nasleduje 0 ako "Program", meno sú samé nuly čo sa interpretuje ako otáznik, dĺžku a autoštart zasa nuly, a CRC je nula, čo aj sedí, veď keď sa XORujú iba nuly... S týmto sa akosi nepočítalo.

K tomu predošlému obrázku: ono je tam zrejme dlhší každý blok o jeden byt, chyba kopírovania alebo čo. V hlavičke je totiž uložená dĺžka 65 ale vo výpise vidíme 66.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Naposledy upravil PotPalo dne 14.05.2021, 14:02, celkově upraveno 1

Nahoru
 Profil  
 
PříspěvekNapsal: 14.05.2021, 14:01 
Offline
Profík
Uživatelský avatar

Registrován: 20.02.2017, 01:17
Příspěvky: 800
Has thanked: 19 times
Been thanked: 48 times
Jestli se dobře orientuji, tak TAP je takový základní formát co nesleduje charakteristiku zvuku, zatímco TZX je věrná kopie audia na pásce(?). Osobně upřednostňuji TAP, protože se tak nahrávky dají "normalizovat" na standardní rychlost a zaváděcí tóny a pauzy, a reálné Spectrum to pak lépe hltá z reálné kazety...


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 20 ]  Přejít na stránku 1, 2  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 5 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz