neděle 14. prosince 2014

Přenos souborů z 8bitového Atari do PC

XRZDISK komplet ke stažení viz. [0]
Nezbytnost nezbytná. Aneb jak po pětadvaceti letech konečně zazálohovat staré programy, zdrojové kódy a texty uložené na 5.25" disketách[1]. Je třeba je přenést z osmibitového Atari do PC, ať mám čím krmit emulátor. A třeba opět nahlédnout to tajů Turbo Basicu[2], Kyan Pascalu[3], Actionu[4] a Atmasu[5].
Prográmek pro přenos se jmenuje XRZ na počest slavné románové kódové tabulky[6].

XRZ 4B ATARI -> PC CABLE 
[ CANON 25 MALE ]       [ CANON 9 FEMALE ] JOYPORT 0
       2 .................... 6 trigger 0    $378, bit 0
      13 .................... 1 output bit 0              
      12 .................... 2 output bit 1
      10 .................... 3 output bit 3
      11 .................... 4 output bit 4
      25 .................... 8 GND      

                        [ CANON 9 FEMALE ] JOYPORT 1
      15 .................... 1 output bit 5 $379, all output bits

Paralelní port PC, z Atari jsou použity 4 bity joy portu 0 a 1. bit joy portu 1 jako řídící. PC potvrzuje příjem na trigger 0 joyportu 0.

Řízení přenosu 5. bit – každý půlbajt <16 obsahuje přenesená data; půlbajt > 15 je řídící příkaz.
      16 ... další bude vysílán vyšší půlbajt
      17 ... další bude vysílán nižší půlbajt
      18 ... přenos souboru dokončen
      19 ... přenos jména souboru dokončen
      20 ... všechno přeneseno, konec
      21 ... chyba čtení, poškozený soubor

Struktura programu je hrubá přesně tak, že mohla být použita k výuce. Třeba někdy dojde k následné optimalizace jak přenosu, tak programu.
XRZ4BO.ENT[7] v Turbo Basicu XL řeší přenos jednoho souboru - čte soubor po jednom bajtu
XRZ4B.PAS[8] pro PC v Turbo Pascalu pro příjem
XRZDISK2.ENT[9a] pro odesílání více souborů - používá 512B buffer pro čtení souboru
XRZDISK5.ENT[9b] odešle více souborů z Atari, ptá se na vypnutí zobrazování. Poslední verze.
XRZDISK.PAS[10] pro příjem více souborů

První chybná domněnka byla, že rychlost přenosu je limitovaná více rychlostí vstupně výstupních operací disketové mechaniky Atari 1050, než rychlostí samotného Turbo Basicu. Jenom pro radost jsem odesílání souborů přepsal i v Kyan Pascalu, který je kompilovaný a řádově rychlejší než TBasic. Je vtipné, že Kyan Pascal umožňuje zápis do paměti pomocí vlastního příkazu assign - psali o tom v časopise Antic 7/1985 [11] a my to známe spíš z příloh zpravodajů vydávaných Atarikluby Praha, Hodonín, Plzeň[12] o pár let později, ale česky. Dneska máme k dispozici původní manuál[13] z roku 1985 a tam je zmínka, že assign je definován jako assign(ukazatel, integer), takže umožní PEEK/POKE jen do adresy 32767. Takže musely pomoct tři řádky assembleru a znalost rozložení paměti. Prací s ukazateli a zásobníkem vznikají obří časové režije s nimiž se kompilátor Kyan nevypořádá.
XRZ4BO.PAS[14] odesílání jednoho souboru, čte po bajtu v Kyan Pascalu.

A jak celý přenos urychlit? Turbo Basic XL má svůj kompiler a výsledný program je výrazně rychlejší a celý přenos taktéž. Program spouštěný přímo z interpretu Turbo Basicu – rychlost přenosu 40zn/sec. Kompilovaný TBasic 110zn/sec.
kompilovaný Turbo Basic XL se zapnutým zobrazováním
S vypnutým zobrazením dosahuje rychlost přenosu 160zn/s, heč! (POKE 559,0)

Jak se kompiluje Turbo Basic

Otázka: Jak přenesené soubory zase vložit do jednoho .ATR souborů pro použití v emulátoru? Osobně jsem tuto věc potřeboval, když jsem chtěl znovu spustit padesát vlastních levelů uložených v BoulderDashConstructionKit[15].
Prográmek XRZGLUE.ENT[16] tuto věc řeší. Složku na disku s přenesenými soubory nastavíme jako disk H3: v emulátoru. Do jednoty D2: připojíme zformátovaný .ATR soubor. Pokud potřebujeme na obrazu disku DOS.SYS a DUP.SYS, musíme si je tam uložit před použitím XRZGLUE.

A na závěr můžete nostalgicky zavzpomínat: Jak zjistit velikost souboru v Turbo Basicu XL?
FSIZE.ENT[17]

Žádné komentáře:

Okomentovat