Mattel Aquarius: úskalí přenosu her z kazety na disk

Počítač distribuovaný hračkářskou firmou Mattel je u nás málo známý a vyskytuje se v našich končinách opravdu jen ojediněle.

Vytvořen byl na zakázku hongkongskou firmou Radofin. Protože Mattel tou dobou prodával velmi úspěšnou herní konzoli Intellivision, nechtěl, aby jí nový výrobek konkuroval. Zadání proto bylo formulováno tak, aby byla nová domácí počítačová hračka spíš na počítání a programování, než na hraní.

To Radofin splnil. Možná bohužel, protože to vedlo k nezájmu hráčů o platformu.

Mattel Aquarius.
Počítač s procesorem Z80 programovaný v okleštěném Microsoft Basicu nabízel barevný textový mód a v základu jen jednokanálový zvuk.

Kromě televize a magnetofonu šlo připojit sériovou tiskárničku a zařízení do sběrnicového portu.
Do tohoto portu se obvykle připojovala ROM cartridge se hrou, nebo cartridge pro rozšíření RAM pro lepší práci s Basicem.
Nešly ale připojit souběžně.
Dále vznikl modem, který se připojoval do stejného konektoru.

Aby bylo možné použít ROM i RAM cartridge současně, vznikl Micro Expander, který obsahoval tříkanálový zvukový čip AY, připojení dvou poměrně zvláštních joysticků a dva sloty, jeden na ROM cartridge a druhý pro RAM cartridge.

V dnešní době vznikla moderní náhrada tohoto Micro Expanderu.
Rovněž obsahuje čip AY, možnost připojení původních nebo Atari joysticků (se kterými má problém snad jen hra Night Stalker, která využívá 4 fire tlačítka), ROM s rozšířeným Basicem (s novými povely, včetně diskových příkazů) i jeho editorem, monitor, přehrávač hudeb z ProTrackeru ze ZX Spectra, 32kB RAM, emulaci 16kB ROM cartridge přistránkováním RAM a připojení USB mass storage.

S novým diskovým zařízením ale vyvstává problém při přenosu programů a her z magnetofonu.

Mattel Aquarius totiž (podobně jako Sinclair ZX81) neumí nahrávat soubory obecného kódu, tedy i strojový kód musí nahrávat jinak. Obvykle se to řeší nahráním strojového kódu uloženého v poli proměnných, které se nahraje v souboru.

Na kazetě se nahrává například takto (hra D-Fender):
5 U=0
10 X=0
20 DIMA(2429)
30 CLOAD*A
40 POKE14340,PEEK(14552)+7
50 POKE14341,PEEK(14553)
60 X=USR(0)

Pro nahrávání z USB se změní řádek 30 přidáním jména souboru:

30 LOAD"DFEND_A.CAQ",*A

Změnami v Basicu ale dochází k posouvání proměnných a tím i polí v paměti.
Strojový program se obvykle sám zrelokuje na jinou, vyšší adresu.
Některé hry ale předpokládají umístění pole na určité adrese a při jejím nedodržení se hroutí.
Obvyklé je to u programů kompilovaných zcc.

Příklad: „vtdemo_BAS.CAQ“

5 U=0
10 X=0
20 DIMA(00953)
30 CLOAD*A
40 POKE14340,PEEK(14552)+7
50 POKE14341,PEEK(14553)
60 X=USR(0)

Ačkoli na řádcích 40 a 50 se vypočte aktuální adresa, kam se kód nahrál, v céčku kompilovaný kód předpokládá, že leží na adrese 14712 a nerelokuje se.

Je tedy potřeba současně změnit délku Basicu tak, aby se kód nahrával opět na původní adresu.

Metodou pokusu a omylu lze zjistit, že kód v tomto příkladu funguje, když je délka Basicu 132 bajtů:

5 U=0
10 X=0
20 DIMA(00953)
30 LOAD"VTDEMO_A.CAQ",*A:REM...
40 POKE14340,120
50 POKE14341,57
60 X=USR(0)

Řádky 40 a 50 napoukují napevno hodnotu 14712 do adresy USR. Tím se zmenší velikost Basicu tak, že je možné přidat název souboru.

Řádek 30 je tedy upraven jako obvykle (LOAD místo CLOAD a přidaný název souboru).
Basic se pak doplní na velikost souboru 132 bajtů pomocí příslušného počtu teček za povelem REM.

Po uložení pomocí SAVE „VT_DEMO.BAS“ lze následně pomocí DIR zjistit, zda je velikost souboru s Basicem opravdu 132 bajtů. Pokud ne, je potřeba změnit počet teček, soubor znovu uložit a znovu zkontrolovat.

Pikantní ovšem je, že různé verze Basicu používají pro zdrojový text programu různé počáteční adresy.

USB Basic proto obsahuje povel pro nahrávání strojového kódu na zadanou adresu, aby život uživatelům zjednodušil.
Ten ovšem nefunguje se standardními kazetovými soubory (přípona CAQ).
Nejprve je potřeba odstranit prvních 19 bajtů (hlavičku) a pak uložit jen surová binární data.
Pak je možno nahrávat povelem LOAD "jméno souboru",adresa.