2023/01/06

Manna más platformokról

 „mirõl is kellene írni???              
talán a konvertálók kedvét elősegítené ha tudnák,hogy a c64-esnek melyek a tárrekeszei.”

       - Scanners lemezújság, 1994

Mostanában terítékre került a programkonvertálás témája, köszönhetően a Stamps Back (alias Vakondok 5) című filmnek. Ez a téma mindig is egy kicsit misztikusnak tűnt sokak számára, ezért úgy gondoltam jó nyitó poszt lenne a blognak.

Kezdjük az okokkal, amik a konvertáláshoz vezettek!

Motiváció a javából

Ahogy az köztudott és sokszor előrángatott téma: a Plus/4 és társai nem volt népszerű, az eladások még a közelébe se szagoltak a konkurens gépeknek, beleértve a Commodore egyéb saját gyártású gépeit is.

Az architektúra kiadását követő pár évben néhány szoftver fejlesztő cég (vagy inkább személy) összedobott egyszerűbb játékokat és segédprogramokat, de sajnos a minimális méretű piac miatt nem érte meg a befektetést. Ennek következtében töredéke szoftver jelent meg ezekre a géptípusokra úgymond „hivatalos” forrásból a többi platformhoz képest.

Természetesen ez a tény nem csökkentette a géptulajdonosok igényeit, így jó páran ezért is szabadultak meg a gépüktől. A csillapíthatatlan étvágy az újabb és újabb játékokra áthajtott sok embert Commodore 64-re, később pedig Amigára/PC-re.

Aki maradt valamilyen oknál fogva az mindent tűvé tett az új programokért és valljuk meg: irigykedve nézte hogyan ömlik a(z illegális) szoftver a haverokhoz, elsősorban Commodore 64-re.

Teljesen új játékokat kidolgozni olyan minőségben, amit más platformokon láthattunk akkoriban nagyon sok idő- és energia-befektetést igényelt, és nyilván tehetség is kellett hozzá. Ezzel szemben a bevétel reménye minimális volt.

Mi akkor itt a lehetséges megoldás?

Természetesen a program konvertálás. A befektetett munka lényegesen kevesebb (lehet), mint amit a végeredmény minősége igényelne, ha nulláról kellene létrehozni.

Konvergálás a konvertáláshoz

A magyarított szó a converting angol kifejezésből származik. Ebben az értelemben egy adott program átalakítását jelenti felhasználva a félkész vagy akár kiadott szoftvert, ami egy másik rendszerre készült.

Ez a művelet a mai napig is létezik, szoftver cégek sokszor egy konkrét géptípusra (például Xbox) készítik el a szoftvert. A fejlesztés egy későbbi szakaszában, vagy miután a piacon sikernek bizonyult, készítik el más rendszerre (például Nintendo-ra) felhasználva a már kidolgozott elemeket.

A konvertálás lehet nagyon bonyolult is, ha a két rendszer egymástól képességekben vagy működésben jelentősen eltér. Régen a rendszerek között konvertálás teljes újraírást is jelenthetett.

Ha a program BASIC nyelven készült és nem támaszkodott jelentősen az adott hardverre, akkor viszonylag kis energiabefektetéssel át lehetett vinni egyik Commodore géptípusról a másikra. A Commodore által kiadott BASIC programok egy része eleve úgy készült, hogy módosítás nélkül működjön több géptípuson.

Manapság már sokkal egyszerűbb egy program több rendszerre kiadása, elég ha előre terveznek valamennyire és egy több platformot támogató keretrendszerben készül a program. Ilyen például a Unity vagy az Unreal játékokra kiélezett keretrendszer, vagy a közismert Java virtuális gép. Munka mindenképp van egy második vagy harmadik platform támogatásával, de a nehezét megoldják a keretrendszerek. Elsősorban tesztelésre és néhány speciális tulajdonság támogatására kell koncentrálni.

Visszatérve a Plus/4-re, az elsősorban szóba jöhető forrás a Commodore 64 programok voltak. Az akkori konkurens gépek architektúrája jelentősen eltért a Plus/4-től, ezért a programok konvertálása azokról nagyságrendekkel komplexebb feladat lett volna.

Mitől lehet egyszerű és miért lehet nehéz a konvertálás?

A Plus/4 hardverben sok létező koncepciót és konkrét hardver elemet felhasználtak a C64-ből, így a két rendszer között több a hasonlóság, mint a különbség.

A technikai részletekbe nem szeretnék belemenni, ahogy ígértem ez a blog nem erről szól. Csak néhány aspektus, ami a konvertálást befolyásolta:

  • A két gép processzora nagyon hasonló, bár vannak minimális különbségek, de a programkódot nagyon ritkán kell módosítani csak a processzor inkompatibilitás miatt.
    Ezzel szemben a Spectrum gépek Zilog Z80 processzort használtak MOS architektúra helyett, amelyek semmilyen szinten nem voltak kompatibilisek egymással.

  • Grafikai megjelenítés ugyanolyan felbontást és grafikai módokat használ. A legfájóbb gyengeség a Plus/4 oldalról a Sprite hiánya. Nehézségeket okozott továbbá, hogy több színű (multicolor) módban C64-en egy színnel több változhatott karakterhelyenként.

  • A hang generálás képességek Plus/4-en jelentősen korlátozottak, amíg C64-en a közismert SID chip akkoriban szinte hihetetlen lehetőségeket biztosított.

  • Plus/4-en nem lehet a teljes 64KB memóriát kihasználni, csak nagyjából 63KB elérhető. A maradék 1KB-ot semmilyen módszerrel nem lehet írni/olvasni néhány száz byte-on kívül a memória címterület legvége felé.

Volt olyan különbség is, ami a Plus/4 oldalára billentette (volna) a mérleget:

  • Total Eclipse
    (forrás: Yape)
    121 szín a 16-hoz képest - bár a konvertált programokban nem segített, az eredeti színekhez kellett ragaszkodni a lehetőségekhez képest.

  • Valamivel gyorsabb processzor a magasabb órajel miatt. A processzorerőforrás-éhes konvertált programok érezhetően gyorsabban működnek. Például a Freescape játékok: Driller és Total Eclipse.

  • Lényegesen egyszerűbb memória kezelés. A C64 agyonbonyolított memóriabank lapozása helyett az egész memóriát egyben lehet írni és olvasni.

Mindezeket figyelembe véve egy program konvertálása lehet viszonylag egyszerű, például ha nem használ Sprite-okat és nincs cipőkanállal a memóriába préselve.

Vagy lehet roppant bonyolult is, ha kihasználja az extra színt multicolor módban, csordultig tölti a memóriát vagy épp precíz időzítést igényel a processzor sebességére alapozva.

R-Type
(forrás: C64-wiki)
És természetesen lehet szinte lehetetlen is, ha főleg sprite-okra alapozza a grafikai megjelenítést. Ezért is nincs Plus/4-re túl sok lövöldözős játék, ahol nagy alakok mozognak a képernyőn részletgazdag háttér előtt. Remek példa erre a kiváló R-Type vagy a Creatures című C64 játékok. (Challenge accepted? 😅)

Hogyan zajlik a konvertálás?

Az első lépés a célszoftver beszerzése a másik platformról olyan formában, hogy könnyen módosítható legyen.

Másolásvédelem, valamilyen hardverhez kötés problémát jelenthet. Szerencsére a kalózmásolatokból nem volt hiány általában, ezekből ügyes kezek már eltávolították a másolásvédelmet.

Ezek után a két lehetséges út: teljes konverzió vagy részleges felhasználás újraírással. A forrásanyagtól függően más megközelítésre lehet szükség, illetve ki melyiket érezte egyszerűbbnek vagy hozzá közelebb állónak.

Nagyon nagy segítséget jelentett a C64-be dugható Action Replay kártya, amivel a teljes memória tartalmát el lehetett érni a programfuttatás bármelyik pillanatában. A kártya segítségével el lehetett dönteni érdemes-e egyáltalán nekiállni a konvertálásnak, vagy annyi sprite van a képernyőn, hogy az már a lehetetlen kategória.

Megfelelő forrásanyag beszerzése után pedig a kód, grafika, hang elsősorban manuális átalakítása történt. Néhány segédeszközön kívül, ami a grafika- és hang-átalakításában segített más nem nagyon állt rendelkezésre.

Természetesen voltak bizonyos mesterfogások, amiket magától kifejlesztett vagy másoktól megtanult az ember. Minél több programot konvertált át valaki, annál egyszerűbb volt a következőnek nekiállni.

Talán a legnagyobb kihívást a tesztelés jelentette, elvégre egy teljes konverzió programkódját nem ismerte meg senki sorról sorra. Inkább bizonyos speciális mintákat keresett benne, amit átírva működésre lehetett bírni a másik rendszeren. Ez egyben azt is jelentette, hogy ha valamilyen kódrész adaptálása elmaradt és csak a program (játék) későbbi használatakor vagy valamilyen speciális körülmények között futott le, akkor előfordult, hogy a konvertált változat nem is működött megfelelően.

Amennyiben újraírás mellett döntött a derék programozó, akkor is sokat segített az Action Replay kártya. A programokból ebben az esetben ki kellett operálni a grafikákat, zenét, szövegeket és átalakítani Plus/4 által felhasználható formátumra. A későbbiekben ezekre az átalakításokra még visszatérek más posztokban.

Az újraírás egy nehezebb feladat is lehetett, ilyen esetben a forrásanyagból nem nagyon volt értelme átvenni programkódot, így nulláról kellett megvalósítani a program működését. Hogy ez mennyire követte az eredeti programot vagy tért el tőle, ez már a programozó költői szabadságán (esetleg képességein) múlott.

Folytatása következik: kitekintés a konvertálás Plus/4 történelmébe.

3 megjegyzés:

  1. Helló! Tök jó, hogy írsz a plus/4-ről. Egy kommentem lenne: nem 4kB konvertálás szempontjából nem használható memória, csak 2 és negyed blokk, azaz 576 byte ($fd00-$ff3f) +2 a processzor I/O port, de az C64-en is van. Persze BASIC-nél valóban 4kB a em használható. És várom a következő posztot, hajrá! :)

    VálaszTörlés

Népszerű posztok