Převod XEGS cartů na file verze

František Houra, Fandal

Celá tahle sranda začala někdy před dvěma roky, když jsem s velvyslanci prostějovského Atari klubu cestoval po dálnici D1 do Prahy na Bytefest. No, možná ještě o trošku dřív, takže všechno hezky popořádku.

Software pro osmibitová Atari je, jak známo, šířen v zásadě na třech typech médií: kazetách, disketách a cartridgích. Ale zatímco kazety a diskety lze kopírovat poměrně snadno, s carty je to přece jenom trošku problém, protože zdaleka ne každý má po ruce potřebné součástky plus vypalovačku EPROMek. Proto pokud člověk nechce buď utrácet docela dost peněz za originální carty nebo se vydat cestou vlastní výroby, musí se spokojit s disketami nebo nedej bože s kazetami. A to již jsme u jádra pudla.

Existuje totiž jisté množství programů, které jinak než na cartech zkrátka a dobře nelze sehnat, protože výrobce žádnou jinou verzi nevyvíjel. Ponechme nyní stranou různé užitkové programy a pojďme se bavit pouze o hrách. Pokud pomineme několik naprosto exotických prototypů, které se nedají nikde koupit a které jejich současní vlastníci bohužel odmítají dumpnout a pustit mezi lidi, bude náš seznam pouze cartových her následující: Airball, Barnyard Blaster, Battlezone, Bug Hunt, Commando, Crime Buster, Crossbow, Deflektor, Desert Falcon, Mario Bros., MidiMaze, Mean 18 a Tower Toppler.

Všechny výše vyjmenované hry mají jedno společné: jsou to 64 či 128 kB přepínatelné XEGS carty a vesměs všechny vznikly ve druhé polovině 80. let, kdy firma Atari již pomalu končila s podporou svých osmibitových strojů. Commando, Deflektor, MidiMaze, Mean 18 a Tower Toppler se dokonce nikdy nedostaly na pulty prodejen a zůstalo pouze u prototypů.

Původně pouze na cartidgích bylo vydáno nemálo her, ale jejich file verze, které bylo možno šířit na disketách nebo kazetách, díky práci různých hackerů postupně spatřily světlo světa již záhy po vydání. Přepínatelné XEGS carty jsou ovšem trošku jiná káva. Převést je na file verzi je náročné ze dvou hlavních důvodů: jednak je to jejich velikost a především pak vlastní architektura. Pojďme se na to podívat trošku blížeji.

Přepínatelný XEGS cart funguje tak, že vždy jedna 8 kB banka je napevno namapovaná do paměti v prostoru $A000-$BFFF, zatímco zbývající banky se přepínají do prostoru $8000-$9FFF. To znamená, že XEGS cart zabírá v Atari pouze 16 kB paměti a zbytek může program normálně používat jako pracovní paměť. Vše toto činí konverzi XEGS cartu na file verzi krajně obtížnou a pokud je autorovi známo, tak se o to úspěšně pokusili pouze dva lidé.

Tím prvním je známý hacker Mike Langer alias Homesoft, který převedl na file verzi skvělou hru Airball. Homesoft se u této konverze původně 128 kB cartu vydal logicky jedinou možnou cestou, tj. celý obsah cartu nacpal do přídavné paměti a při požadavku na přepnutí na příslušnou banku prostě oněch 8 kB překopíroval z přídavné paměti do již zmiňovaného prostoru $8000-$9FFF. Zkopírovat takové množství dat trvá poměrně dlouho, ale v případě Airballu to nevadí, protože tato hra přepíná banky vždy pouze při přechodu do nové místnosti.

Zde je pro nezasvěcené nutno dodat, že bankování přídavné paměti je značně odlišné od bankování XEGS cartů. Rozšířená paměť se přepíná vždy po 16 kB bankách, a to do paměťového prostoru $4000-$7FFF. Paměťové prostory cartu a přídavné paměti tedy bohužel nejsou stejně velké a ani se nepřekrývají, což je sice logický požadavek na kompatibilitu, ale pro převod XEGS cartů na file verzi je to hotové neštěstí.

Homesoft se kromě konverze Airballu pokusil ještě o převod hry Barnyard Blaster, ale tady už náš německý kolega s prostým kopírováním dat z přídavné paměti tvrdě narazil. A to proto, že Barnyard Blaster přepíná banky tak rychle a tak často, že metoda s překopírováváním 8 kB dat je nepoužitelná. V emulátoru jeho konverze ještě jakž takž fungovala, ale na reálném Atari vše okamžitě skončilo krachem systému. Tímto neúspěšným převodem Homesoft s konverzemi XEGS cartů také skončil, neboť všechny zbývající hry, které jsem vyjmenoval na začátku, používají stejné brutální techniky přepínání bank jako Barnyard Blaster.

Ke všem těmto zjištěním dospěl po několika pokusech i druhý z Ataristů, který se o konverzi XEGS cartů s jistými výsledky pokusil, to jest moje maličkost. Já jsem se do těchto převodů pustil především proto, že mě strašně mrzelo, o jak skvělé hry na svém stroji přicházím. Jistě, je tu možnost si třeba takové Commando nebo Deflektora zahrát v emulátoru, ale skutečné Atárko je prostě skutečné Atárko. Podotýkám, že v době, kdy jsem o konverzi XEGS cartů začal poprvé uvažovat, neexistovala žádná možnost, jak si je na reálném HW zahrát, neboť úžasný S/XEGS RAMcart z dílen C.P.U. ještě nebyl na světě.

První XEGS cart, který jsem převedl na file verzi, byla hra Bug Hunt. Jedná se o střílečku pro světelnou pistoli a její konverze byla hodně snadná. A to proto, že všech sedm přepínatelných bank tohoto 64 kB cartu obsahuje pouze grafická data a hlavně, hra nepoužívá paměťový prostor, kam se přepínají banky přídavné paměti. Čili stačil malý zásah do kódu hry a konverze byla na světě.

Po úspěchu s Bug Huntem jsem se pustil do převodu další hry, která na první pohled vypadala jako snadná záležitost. Jednalo se o krásnou hru Deflektor, která vůbec nepoužívá paměťový prostor $6000-$7FFF, z čehož v mé hlavě vznikl mylný dojem, že to bude hračka. Nebyla. Prostě to nešlo. Ve finále jsem se zkusil vydat cestou kopírování celých bank, ale dojel jsem na to samé, na co Homesoft s Barnyard Blasterem. Zklamání bylo velké a já se rozhodl zanechat marných pokusů.

Přesto malý červíček mi v mozkovně zůstal a já se čas od času k nápadu překonvertovat Deflektora vracel. K rozhodujícímu zvratu došlo v den, kdy mě pojal ďábelský nápad celou 64 kB hru disassemblovat, zjistit jak funguje a pak jí znovu přeložit, tentokrát již upravenou pro bankování přídavné paměti. To by ovšem nebylo možné bez pomoci Radka Štěrby alias Rastera, který se mi kdysi mezi řečí zmínil, že si pro vlastní potřebu napsal automatický disassembler, který dokáže standardní binární soubor převést na zdrojový kód. Raster byl tak laskav, že mi svůj RDIS poskytl a já se mohl pustit do práce.

Nemá asi smysl tady detailně popisovat postup celé konverze, vezmu to hodně zkratkovitě. Ze všech bank XEGS cartu jsem nejprve udělal bináry, na které jsem pustil RDIS, a výsledný polotovar jsem spojil do jednoho obrovského (něco kolem 300 kB) zdrojáku. Pak nastala zdlouhavá práce s jeho alespoň částečným pochopením, kdy jsem především musel všechny operace směřující do paměťového prostoru $4000-$7FFF přesměrovat do oblasti $8000-$BFFF. Jinými slovy jsem musel prohodit tyto dva paměťové prostory, protože původní prostor obsazený cartem se nyní stal standardní pamětí a naopak prostor přídavné paměti se musel stát "chráněnou pamětí".

Zkrátka a dobře, byla to dosti zdlouhavá práce, ale tak po týdnu jsem již věděl, že jsem na správné cestě, protože mnou přetvořený a zkompilovaný zdroják šel konečně spustit, a i když poměrně záhy spadnul, úvod hry naskočil a chvíli to i něco dělalo. Po mnoha pokusech jsem pak mohl skutečně fungující verzi vypustit po patnácti prací vyplněných dnech od chvíle, co jsem se do toho pustil. Netřeba asi dodávat, že jsem z toho měl i docela radost...

Bohaté zkušenosti a díky nim také vylepšená verze RDISu mi následně pomohly překonvertovat další skvělé XEGS hry. Všechny jsem předělal pro standardní Atari 130XE, a to v tomto pořadí: Barnyard Blaster, Mario Bros., Battlezone a Tower Toppler. Obzvláště velkou radost jsem měl z posledně jmenované gamesy, protože se mi u tohoto prototypu podařilo opravit nehezkou chybu, která způsobovala, že se špatně zobrazovaly animace jednoho z nepřátel. Také jsem u této hry musel o jeden pixel prodloužit délku skoků, neboť ve dvou levelech jsem při testování narazil na místa, která prostě nešla přeskočit, byť jsme se o to s Rasterem pokoušeli snad tisíckrát. A navíc jsem v Tower Topplerovi objevil několik skrytých cheatů, o kterých do té doby patrně nikdo neměl ani tušení.

Suma sumárum to znamená, že majitelé strojů s minimálně 64 kB rozšířené paměti mají nyní možnost si zahrát šest "nových" her. Vřele doporučuji! Musím ale upozornit, že na některých počítačích s dodělávaným rozšířením paměti tyto konverze z naprosto nepochopitelných důvodů občas zhavarují. Žádné problémy by naproti tomu neměly nastat na standardních 130XE, i když ani tady nějaké to překvapení nelze vyloučit.

Do dalších konverzí se prozatím nechystám, a to ze dvou důvodů. Z volně dostupných dumpů je k dispozici už pouze jediný 64 kB cart - Desert Falcon, který má ovšem tak nešťastně řešenou organizaci paměti, že by případný převod zřejmě nebyl snadnou záležitostí. Crime Buster a Crossbow jsou 128 kB carty, navíc pouze pro světelnou pistoli. Za snahu by samozřejmě stálo především Commando, ale tato konverze by si už vyžádala 256 kB přídavné paměti a po zkušenostech s nečekanou nekompatibilitou různých paměťových rozšíření si nejsem jist, zda to má cenu. No a dumpy MidiMaze a Mean 18 zatím nejsou "free", a i když by se asi daly někde pokoutně sehnat, tak rozhodně nehodlám riskovat nějaké problémy s firmami, které tyto hry stále ještě komerčně prodávají.

Závěrem tohoto veskrze nudného pojednání musím za tradičně skvělou spolupráci poděkovat Rasterovi, který ke zdaru všech mých konverzí přispěl cennými radami a především mi nezištně poskytnul RDIS, bez kterého bych neměl sebemenší šanci něco na poli převodů XEGS cartů na file verze dokázat.

Fandal

P.S. Všechny moje konverze najdete v mém webovém archivu na známé adrese atari.fandal.cz.