Előzmények

Még tavaly eladóvá vált egyik kollégám A64-es masinája, s mivel szeretem a retro ügyeket, elvállaltam, hogy foglalkozom vele, tesztelem. Említette, hogy valahol van egy másolt kazettája is hozzá, mire én mondtam, hogy mindenképp találja meg. Szerencsére meg is találta.

Régen, munkahelyem minden szobája kapott kicsi rádiós magnót. Ez a magnó időszak legvégén volt, csak sztereó kis-jack fülhallgató kimenet van rajta és kész, de a semminél az is sokkal több. Szekrényből előtúrtuk, de nem működött. Szomszéd szoba, az a példány sem működött. Aztán egy harmadik viszont működött. Otthon találtam egy ránézésre esetleg alkalmas kábelt, egyik oldalon 2 db RCA (4-nek jobban örültem volna, de ha menteni nem is tudom, de beolvasni igen, az már alkalmas lesz a gép tesztelésére), de a másik oldalon apa helyett anya volt a DIN oldala. Mondom már csak egy RCA/kis-jack és egy DIN kábel kell és kész. RCA/kis-jack hamar lett, és lelkesen meg is ragadtam egy MIDI DIN kábelt, ami látszatra jónak tűnik. De azért gyanús volt, hogy külön MIDI DIN-nek hívják. Nézegettem neten és a hagyományos DIN analóg audio kábel bekötése olyan, hogy egyenesen mennek a vezetékek a kábelben, és ami az egyik végén a bal szélső, az a másik végén a jobb szélső lesz, tehát a kiosztás/bekötés nem azonos a két oldalon, hanem tükröződik. Amíg DIN-DIN a két összekötendő eszköz, addig ez nem gond, de amint át kell alakítani valamelyik oldalt, ott már nem mindegy melyik oldalhoz kell az átalakító. Nekiálltam multiméterrel kiméregetni a MIDI DIN kábelt, és ennél nem egyenes a bekötés, hanem a bal szélső, az a túloldalon is a bal szélső, így mindkét oldalon azonos a kiosztás/bekötés. A japán megoldás ezért praktikusabb, viszont nekem pont nem lesz jó a Primo-hoz. Aztán realizálva hogy az analóg DIN esetén nem mindegy hogy, magnó vagy erősítő/számítógép oldalhoz kell az átalakító, nekiálltam kimérni az átalakítómat is, és bizony az meg nem magnó oldalra lett szánva, ami nekem kellett volna, hanem erősítő oldalra. Aztán jött az ötlet, hogy lehet, hogy működni fog úgy, ha én a fordított bekötésűt használom, de aztán a MIDI DIN majd szépen visszafordítja. És jó is lett, menteni ugyan nem tudok, de beolvasni igen, s szépen be is töltötte a Primo az első programot a kazettáról.

A kezdetektől szempont volt számomra, hogy közkincs legyen a másolt kazetta tartalma, s a weboldalon meg is találtam, hogy István várja a program kazettákat/lemezeket.

Kollégám kazettáját nem küldhettem el, mert az is az eladó A64-es értékes körítése, így nekiálltam digitalizálni a kazettát, s azt küldtem el Istvánnak. István sikeresen fel is dolgozta az anyagot, nagyon jó arányban betölthetőek/futtathatóak voltak a programok, de 1 darab egy beolvasási hiba miatt nem indult, a "MAGYARORSZÁG 1.".

Próbáltam én is betölteni ezt a kazettáról Primo-n, ami jóval esélyesebb, mint emulátoron, a Primo bemenet remek erősítő/szűrő megoldása miatt. De közvetlenül a kazettáról sem működött. István képet is küldött a hibás jelalakról, amin látszott, hogy csak egy kicsi rész sérült. Izgatott a dolog, gondoltam megpróbálom "restaurálni" a hiányzó részt.

A "MAGYARORSZÁG 1." restaurálása

Elöljáróban, programozni nem tudok, nagyon minimális a BASIC ismeretem, "szókincsem", de ez persze nem szegheti kedvem.

A hibás rész eléggé a program elején volt, kísérletezgettem emulátorral és a géppel is. Emulátorra betöltve a digitalizált fájlt, olyan 3 sor volt rossz, viszont kazettáról a Primo-n betöltve csak kevesebb mint 10 karakter, így aztán maradtam csak a valós gépen javításnál.

Először kicsit csalódott voltam, mert kazettáról olvasva sem lett sokkal jobb a helyzet, a program működőképessége nem változott; sőt, sokáig tévúton jártam, mert azt hittem, picit még rosszabb lett a helyzet. Ugyanis emulátoron betöltve láttam "PRINT" utasítást is, míg kazettáról olvasva nem. De végül rájöttem, hogy a "PRINT" utasítás is 1 db "karakter"-ként van tárolva, ahogy egy-egy betű is, és így kerülhetett csak elő, félreolvasás/értelmezés okán, nem pedig, mint 5 egymás utáni karakter, amit én egy darabig hiányoltam kazettán, és a javítás első pár próbájánál ragaszkodva a "PRINT"-hez, nem jutottam előre. E tévedésem ezért vitt tévútra. Utána csak az volt a bajom, hogy kettőspontot akartam rakni oda, ahová vessző kellett volna. Aztán olvasva a Primo weblap szkennelt "listák, tippek" rész programkódjait, végre találtam egy hasonló programrészt, s rájöttem: vessző fog kelleni. Próbálgattam kitalálni, hogy hogyan nézhetett ki az eredeti programsor, s egyszer csak eltaláltam, elindult a program!
Sajnos lementeni nem tudtam kazettára, mert ugye az a kábelkompozícióm arra nem alkalmas, így aztán lefényképeztem minek kell lennie a végeredménynek, aztán emulátoron is megcsináltam a javítást, és onnan mentettem ki.

A "MAGYARORSZÁG 1." egy oktatóprogram, Magyarország városait kell bejelölni a térképen. Ismerős volt a képernyő, kis keresgélés után megtaláltam, hogy a program érdemi része azonos a gyűjteményben már meglévő "Magyarország városai" cíművel.

Ez utóbbi egy upgradelt verzió, load-nál kirajzolja a címet, aztán a végén felvillan az "állítsd meg a magnót", és autorun-os, ellenben az általam restaurálttal, de onnantól azonos, így "Magyarország" címmel ad leírást a programhoz (nem pedig, mint "Magyarország városai" címmel, így nem biztos, hogy az eredeti alkotó készítette ezt az update-et/módosítást).

Egyértelmű számomra hogy a "MAGYARORSZÁG 1." a régebbi, az eredeti. De így legalább két külön verzió is lett a gyűjteményben.

Miután mindezekkel végeztem, az A64 sikeresen el lett adva, a kollégám, akitől érkeztek az anyagok, talált egy kábelt, ami DIN apa és a magnó oldalon 4 RCA van. Egy igazi kincs, jól el is raktam.

Utóirat: A programok a Primo weblapon az "Egyéb" kategóriájú letölthető programok között találhatók meg:


A JetPac restaurálása

A sikeren felbuzdulva lett még két restaurálási projekt. Mivel időközben sikeresen el lett adva kollégám Primo gépe, ezek már emulátoron lettek tesztelve, illetve legnagyobb arányban az adott PTP fájl lett szerkesztve HEX editorban.

Korább, mikor az eladott Primot teszteltem, próbáltam a JetPac-ot is, és zavart, sajnáltam, hogy sérült a loading screen, a "JETPAC IS LOADING" szöveg meg van törve, a felső része jelentősen el van tolódva balra, nem is olvasható, csak ki lehet következtetni:

Más hibák is keletkeztek, legalább 2 helyen fekete pixelek vannak fehér helyett. Gondoltam, hogy amint rájövök a képtárolási szisztémára, valószínűleg nem lesz nagy meló "visszahúzni" az eltolódott részt és javítani a pixelhibákat a PTP állományban HEX editorral.

Annyiban tévedtem, hogy az érintett rész javításának végére vettem csak észre, hogy ha a HEX értéket átváltom kettes számrendszerbe, akkor gyakorlatilag látom a képtárolást önmagában, mert a 0 a fekete, az 1 pedig a fehér pixel.

Aztán, mivel láttam 2 további gyanús pixelt, melyeknek szerintem fehérnek kellene lennie, ellenőrzésképp összeszedtem az eredeti Spectrum loading screen-t, és összehasonlítottam az érintett részt. Igazam volt, a két gyanús pixelt is javítani kellett. Ekkor észrevettem, hogy a JETPAC szöveg körüli keret picit aszimmetrikus, a jobb oldali része egy pixelsorral vastagabb, mint a bal. Kíváncsi voltam, hogy elszámolás/elgépelés eredménye-e ez. De nem az, merthogy a Spectrum verzióban is ugyanígy van ez, tehát a Primo port elkészítője hűen követte az eredeti grafikát, legalábbis ezen a részen, mert az összehasonlításnál észrevettem, hogy 2 szempontból is javította az eredeti képet.
Az egyik, hogy adott egy plusz fehér pixelsort a "JETPAC IS LOADING" alá, mert az eredetiben van ugyan egy sor a szöveg felett, de alatta nincs.

A másik, hogy az eredeti Spectrum-os képernyőn nem használták grafikára az alsó két karaktersor képernyőrészt (valószínűleg azt Spectrum-on máshogy kell címezni/programozni, mint a képernyő többi részét, és/vagy irkál oda betöltés közben). De a Primo port alkotója csak az alsó 1 karaktersor részt nem használta (a számláló belerondítana az ULTIMATE logóba), és emellett nemcsak, hogy lehúzta a használt képernyő rész legaljára a "JETPAC IS LOADING" alatti részt, hanem az így keletkezett üres területre (üres égboltra), rajzolgatott csillagokat is! Kiváló munka!

Itt az összehasonlítgatásnál vettem észre, hogy több fekete blokk végén van egy-egy fekete pixel, aminek fehérnek kell lennie. Ez viszont nem kazetta beolvasási hiba, mert ez legalább 15 CRC-t érint, és betöltéskor nem 17 beolvasási hibát írt, hanem csak 2-t. Viszont, látva az alkotó precíz munkáját, biztosan nem szándékos e különbség, és kizárólag fekete pixelek lettek többletben, és kizárólag fekete pixelek után (tehát például 4 fekete után 4 fehérnek kellene lennie, de ehelyett 5 fekete, majd 3 fehér van). Ezek legjobban az "ULTIMATE PLAY THE GAME" embléma "U", "E" és "P" betűi bal szélén vehetők észre. Tehát hitem szerint ezek a logikai hibák anno a kazettára tároláskor keletkezhettek. Mindet javítottam.

Ezzel persze a 2 eltérő CRC felugrott 17-re. Ez már elég nagy szám volt ahhoz, hogy ne totózzam a kontroll számokat, hanem pontosabban dolgozzam ki az összesítendő bájtokat.

A CRC mindig egy blokk végén van, közvetlenül utána kezdődik a következő blokk. Képernyő tartalom esetén úgy tapasztaltam 8 bájt van az adatbájtok előtt. Nem teljesen értem őket, de nem is kell, elég, ha a CRC számítást tudom értelmezni. Meg is lett. Kerestem a kaland.ptp-ben (abban sok kép van), egy olyan részt, ahol csupa fekete (0) képernyő blokkok vannak (azzal igen könnyű számolni).

Arra számítottam, hogy a csupa nulla adatbájtok utáni CRC az 0 lesz. Hát nem volt az. Nekiálltam hozzáadogatni az adatbájtok előtti blokk elemeket, hátulról bájtonként. A hátulról negyedikig érve (az a szám, amit töltés közben kiír mint számlálóállás), megkaptam a CRC értékét. Tehát a CRC nemcsak az adatbájtokat, hanem az előttük lévő blokkrész hátsó részét is kontrollálja! Általában persze túl nagy az összeadandó számok összessége, így a CRC bájt csak az összeg utolsó számjegyeit használja (HEX-ben az utolsó 2 számjegy).

Így már nem volt akkora munka a javított képhez igazítani a kontroll számokat, készítettem hozzá egy Excel táblát, amibe bemásolva az érintett rész HEX számait, összegzi azokat, s az összeg utolsó két számjegyével javítani tudtam az adott rossz kontroll számot.
A restaurált/javított loading screen ez lett:

Utóirat: A program a Primo weblapon a "Játék" kategóriájú letölthető programok között található meg:


A Bátor Lovag restaurálása

Beolvasási hibásan volt fent az oldalon ez a szöveges kalandjáték, ráadásul egy data sor hosszan volt benne elcsámpulva, legalább 74 bájt ment félre. Ellenben a "MAGYARORSZÁG 1."-gyel, ahol kevés bájt volt sérült, de zaj/szemét volt a helyükön, itt sok volt rossz, de csak kicsit más lett a tárolásuk, a félrement részen belül is látszott ismétlődés, logika.

Listázva így nézett ki:

Már a "MAGYARORSZÁG 1."-nél rájöttem, hogy a BASIC utasítások is 1-1 bájton vannak tárolva, tehát valószínűleg a sok "FOR" az valamelyik konkrét szám helyett van, és így tovább.

Az érintett rész (csak az érték rész) HEX editorban:

Az látszott, hogy a sérült részben az "a" (HEX 61) a leggyakoribb, így biztosra vettem, hogy az "a"-k a vesszők, cseréltem őket. A HEX 81 a második leggyakoribb a sérült részben, gondoltam valószínűleg az lesz a nulla, mivel a nem sérült rész számai közt a "0" a leggyakoribb. Ezeket is cseréltem. Mint utólag kiderült, ezekben igazam is volt, de nem 100%-ban, mert a sérült rész utolsó adatbájtja, a "B" is vessző volt eredetileg, hasonlóan, mint az "a"-k, így én oda kezdetben nem vesszőt próbáltam. Továbbá volt még 9 számjegy, amiket ki kellene találni, amire elég csekélyek a matematikai esélyek. De azért próbálkoztam, olyan tippet játszottam meg, hogy a környező számokat próbálgattam, a harmadik leggyakoribb előfordulást 50-re cserélgettem. Semmi előrelépés nem történt, ugyanúgy leállt a program a játék elején "SN Error in 10070". Végül egy olyat is próbáltam, hogy a "B" is vessző lett, ami előrelépést hozott, mert utána nem jött a megszokott hibaüzenet, hanem elindult a játék. Ennek igen megörültem, de örömöm nem sokáig tartott, mert az első helyszínről semmilyen irányba nem lehetett továbbjutni. Ezáltal kiderült, hogy a számok a sérült részben a mozgással és helyszínekkel függnek össze, legalábbis egy részük biztos, és ha el is találnék egy létező számot, nem derülne ki számomra egyértelműen, hogy a megfelelő helyszínt sikerült-e eltalálnom, legalábbis erre kicsi esélyt láttam.

Jött az ötlet, hogy mivel a loading screen-en azt írta Szarka Zoltán, hogy C16 alapján, megpróbálom megtalálni és megnézni abban az adatrészt, vagy megnézni azt, hogy melyik helyszínre kellene jutni.
Hamar kiderült számomra, hogy rengeteg helyen lehet "bátor lovag" jelmezt kölcsönözni, de C16 vagy PLUS/4-es találat az nemigen volt. Nehezítette a helyzetet, hogy Szarka Zoltán roppant szűkszavú volt, nem fedte fel hogy honnan származik a program, csak ennyit említ: "Primora írta Szarka Zoltán from D.M.C.".

Lévén akkortájt már a C64 volt a legnépszerűbb platform hazánkban, reméltem, hogy arra is átírta valaki, és az fellelhető valahol. Hasznos ötlet volt, találtam egyet egy német oldalon.
Nézegetve az adatsorokat kiderült, hogy ugyan Szarka Zoltán összevont több adatsort, de a tartalmuk, sorrendjük változatlan:

Ez alapján restaurálni tudtam az érintett számokat, a játék immár hibátlanul működött.

Egyébként, noha az adatsorok számai 100%-ban azonosak, a játék szövege a két átiratban teljesen eltérő, gyakorlatilag Szarka Zoltán teljesen kicserélte, újraírta a szövegeket, és sokkal mókásabbak a Primo verzió szövegei, mint a többi verzióé.

A sérült rész után közvetlenül egy CRC bájt jött (ez nélkül mutattam a HEX-eket), de mivel a javítás után sem egyezett a CRC az összeggel, így kiderült, hogy maga a CRC bájt is sérült, "elmászott" az eredeti értékhez képest, így összesen 76 bájt ment félre. Persze ez esetben a CRC hiba csak esztétikai hiba volt, a hibaszámláló kiírt "1"-et, de magukban a programsorokban már nem volt beolvasásból eredő hiba. De persze zavart ez az 1 is. Ez a restaurálás időben korább volt, mint a JetPac töltőképernyős, ahol kianalizáltam a CRC számítást, és készítettem hozzá táblázatot, és mivel csak 1 bájtról volt szó, nekiálltam totózni. Elég hamar sikerült kitalálni, így teljes lett a restaurálás. El is küldtem Istvánnak, ki is cserélte a régit, a restaurált verzió tölthető le:
http://primo.homeserver.hu/ptp/jatek/batorlov.ptp

Kicsit később a történet folytatódott.

Akkor még itt volt az eladni kívánt és tesztelésem alatt álló Primo gép, így visszaalakítottam WAV fájllá a programot. Kazettára nem vettem fel, MP3-at csináltam belőle, és telefonon lejátszva próbáltam betölteni Primo-n. Ez pl. Spectrum-on esélytelen, de a Primo jól erősíti a jelet, simán betölt egy telefonról lejátszott MP3-at.

Gondoltam jól kiviszem a játékot, valószínűleg évtizedek óta elsőként. Haladtam is vele, aztán a 8-as helyszínről van lehetőség a 33-as helyszínre jutni, kétféleképp is, de a számomra kézenfekvő megoldás az nem a 33-as helyszínre visz, hanem vissza a program legelejére. Megnéztem a C64-es verziót is, de ott működik a dolog, tehát találtam egy Szarka Zoltán által elkövetett BUG-ot. Bekapcsoltam a nyomkövetést (TRON) és elég hamar megleltem: Szarka Zoltán berakott új sorokat, eredeti sor magasabb sorszámra került, de az illetékes GOTO nem lett átírva, így a 33-as helyszín sora helyett azt várta a gép, hogy kérjük-e a használható igéket. Könnyen orvosoltam, majd játszottam tovább. Majd találtam egy elgépelést (lombik helyett "lobik"), javítottam, később egy helyesírási hibát, azt is javítottam.

Itt felmerült bennem, hogy néhol két szóköz van, vagy szóköz után vessző, tehát egy-két dolgot csak vizuálisan átterveztem volna, és lett egy erősebb indok is módosításra: Szarka Zoltán jelentősen felgyorsította a begépelési sebességet, Primo-n is gyakran 2 betű ment be egy helyett, nemhogy PC-n, emulátoron.

Így végül úgy döntöttem, hogy párhuzamosan 2 verziót készítek, egy autentikus debug verziót, és egy módosítottat, ahol visszalassítom a begépelést is, és még ami menet közben még eszembe jut.
A játék legvégén találtam még egy apró bug-ot, a kilépés nem működött, mert egy önmagára hivatkozó GOTO sorba jutott a program (2090 GOTO 2090). Javítottam mindkét verzióban, kapott egy "END"-et.
Az erdőben is tapasztaltam érdekességeket, ami elsőre bug-nak tűnt. Néztem a C64-es verziót, de azonos volt. Ezen a ponton úgy éreztem, hogy jó lenne meglelni az eredeti verziót, és ehhez hasznos nyomot rejtett a C64-es verzió, ugyanis az első sora eltérően a Primo átirattól ez: "1 REM 1985 BY TIHOR MIKLOS". Így már célzottabban lehetett keresni, és kutakodásom eredménye arra is fényt derített, hogy elsőre miért nem találtam C16 - Plus/4-es fonalat: időközben átkeresztelte valaki a játékot, eredetileg "A Hős Lovag" volt a címe. Ez volt az első, kereskedelmi forgalomba került magyar nyelvű, szöveges kalandjáték. Ékezetes magyar karaktereket használt, ugyanis a Plus/4-ből 1985-től létezett olyan ROM-mal szerelt verzió, mely támogatta ezt: http://www.commodoreszerviz.hu/commodore_plus4_magyarositasa.htm

Ez sokat is dobott a sikerén az iskola-számítógép programban, és nyilván ilyen gépe volt otthon (vagy az iskolában) Tihor Miklósnak.

Animált! A zászló lobog!

Valószínűleg problémás lehetett használni nem magyar ROM-os Plus/4-en vagy C16-on, így ez lehetett a fő oka, hogy törték a játékot, már az eredeti platformon.

Ékezet nélküli lett, jobbra cserélték a prompt-ot:

Dobták a töltő képernyőt, hogy kevesebb helyet foglaljon, valamint megváltozott az erdő. Sokan BUG-nak mondják, de úgy hiszem, ez szándékos. Eredendően teljesen egyszerűen lehet közlekedni az erdőben, senki sem téved el. De később már eleve úgy készülnek a szöveges kalandjátékok, hogy eltévedjen az ember az erdőben (vagy olyanra törik őket). Korabeli tapasztalt, rutinos kalandjátékosnak nem megoldhatatlan ez, de nekem eltartott egy darabig mire kiigazodtam a "tört erdőn".

Csak a töltőképernyőn van említve csak a "hős lovag", magában a játékban már csak a "bátor lovag" említés szerepel, így érthető aztán, hogy később már a címet is átírták "HOS LOVAG"-ról "BATOR LOVAG"-ra. Esetleg létezhetett C16 - Plus/4 verzió is ilyen, de én nem találtam. C64-en pedig már csak ilyen verziót találtam. Szarka Zoltán egy ilyet írt át Primo-ra, újra ékezetessé téve, de a szövegeket átírva.

Így végül a "DEBUG verzió"-ban érintetlenül hagytam az erdőt, tehát ebben csak a 2 BUG-ot az 1 elgépelést és az 1 helyesírási hibát javítottam.

A módosított verzió esetében arra jutottam, hogy az eredeti az túl könnyű, a nehéz az elérhető lesz a DEBUG verzióban, így egy arany középutat szültem: közepesen nehéz.

Továbbá, mivel hiányoltam a játék eredetére vonatkozó információkat, a Szarka Zoltán "küldje el programjai listáját csere céljából" oldalt kicseréltem, és dióhéjban elmesélem a játék eredetét. Egyrészt történelmi okokból, másrészt hogy könnyebb legyen a két verziót elválasztani, visszakereszteltem az eredeti nevére: "A Hős Lovag".

Végül új töltőképernyőt rajzoltam. A Plus/4-es eredeti képet nem lehet szépen megoldani Primo-ra, így végül úgy döntöttem keresek draw/clipart jellegű fekete-fehér képet, és azt ültetem át.

Felhasználtam a technika és tudomány eszközeit, Gimp2-vel és Paint-el elég sokat játszottam, hogy a legélethűbben adjam vissza az eredeti szürkeskála draw képet monochrome-ban, a kívánt méreten. Onnantól már monochrome bitmap-pal dolgoztam Paint-ben. A jelentős szövegmennyiséget a lehető legkisebb olvasható betűkkel akartam kirajzolni. Más már kitalálta, így a small fonts 7-est használtam. Megtartva Szarka Zoltán ötletét, hogy a cím Old-English betűtípussal legyen, második nekifutásra meglett a tökéletes megoldás: Virtual PC -> Windows 3.1: Old-English bemásolása után a Notepad-ban találtam egy betűméretet, ami pont akkora, amekkorát szerettem volna, így ezt sem nekem kellett kivariálni, hogy hogyan fest a legjobban/olvashatóbban kicsinyítve, valaki már megoldotta ezt anno. Egyedül az ékezeteket kellett az "O"-ra rajzolnom kézzel.

Elég nagy munka lett volna begépelnem a kép HEX számait a HEX editorba, amit nagyon igyekeztem elkerülni. Roppant kellemes módon a Windows monochrome bitmap tárolása szinte azonos a Primo kép tárolásával, az egyetlen eltérés, hogy a Windows az alsó sorral kezd és lentről felfelé, balról jobbra tárolja a képpontokat, így nemes egyszerűséggel vízszintesen tükröztem a Paint-ben a képet. Utána már csak törölni kellett a bitmap fejrészt, és megkaptam a kívánt HEX-eket megfelelő sorrendben. Persze blokkonként kellett bemásolni, majd a CRC-ket aktualizálni, de ez már nem olyan hatalmas munka, mint egyesével HEX-eket bepötyögni. Persze ezen is könnyítettem, annyiban, hogy egy sok blokkot számolni képes táblázatot alkottam, ami kiszámolta a kép összes CRC értékét.

Ez lett végül a töltőképernyőm:

Utóirat: A programok a Primo weblapon a "Játék" kategóriájú programok között találhatók neg:

Gona (Varga Gábor), 2021. 03. 02.