Kategóriák
Maga az iparos. Történetek a múltból és a jelenből.

Az első küzdelem

Az ember soha sem felejti el az elsőt. Így van ez mindennel, és mindenkivel. Történt egy szép napon úgy 1986 év elején ha jól emlékszem, hogy beleestem egy számítógép játékba és a zenéjébe. Nem kis utánajárásba került míg sikerült bakelit lemezen a YUGOTON kiadásban megszerezni a lemezt, és még az iskolai műhelyben használatos kék kabátom hátára is felrajzoltam a lemezborítóról és a játékból ismerős ábrát.

Szóval egy szép napon V. barátomhoz mentem számítógépezni és büszkén mutatta nekem ezt a programot eredeti műsoros kazetta kiadásban. A játék már korábban megvolt DD (Dinamic Duo) feltörésben, azonban volt egy játék – a repülős bombázós fali képből nyíló -, amit megérintve az a törés szénné fagyott.

Ekkor V barátommal elhatároztuk, hogy majd mi megmutatjuk, és kipróbáljuk a karmainkat ezen a kazettán.

Ez egy retró poszt, vezetett élménytúra az emlékeimben. Minden itt olvasható dolog 1986 környékén történt, amikor ilyesmire még semmilyen szabály sem vonatkozott. Jelen poszt célja az élmények megélése, szemléltetés és oktatás. Semmi egyéb. A tartalmakat képeket emulátorból mentetem ki, de minden helyen elmondom hogy annó hogy és miként jártam el. Az élmény szempontjából mindegy.

Szóval volt ez a műsoros kazetta, aminek betöltését elkezdve villant egyet, majd lefeketedett és zenélni kezdett, és már ment is a játék.

Az első nehézséget a “rögtöninduló” okozta. Ezt a szót “rögtöninduló” mi alkottuk V barátommal az olyan programokra, amik anélkül elindultak hogy bármit is csináltunk volna. Az ilyesminek a leküzdése a belépő egy ilyen feladatra. Annó két választásunk volt, vagy a COPY190 nevű programmal, ami más címre tölti be kazettáról a fájlt, mint ahova eredetileg töltődött, majd lemezre menti, vagy egy TR-DISKUS nevű program használata, ami kazetta bufferrel együtt mentette a programot két részben lemezre. Mi biztonság kedvéért ez utóbbit választottuk, így eljutottunk a lemezen tárolt és DISKDOCTOR programmal átírható loader kódjáig.

A kazetta buffer tartalma a fejléc beolvasása után
A kazetta buffer tartalma a fejléc beolvasása után

A képen látható az eredeti kezdőcím, és a kazetta buffer tartalma. A töltés 0x0316-tól tart a képernyő közepéig körülbelül, nem emlékszem meddig. Ez már tartalmazza a “rögtöninduló” vektorokat, ezért azt átírhatóvá kell tenni. Ez csak lemezen működik, ezért az átírás ott történt.

a tartalom beindulás előtt, betöltődés után.
A memória tartalma a “rögtöninduló” rutin indítására szolgáló vektorok kiemelve.

A “rögtöninduló” kipukkasztása után alapos vizsgálatnak vetettük alá a bootloader kódját, azonban a töltőprogramon kívül semmit sem találtunk: minden a következőkben betöltött programokra mutatott, azok pedig még a kazettán csücsültek.

Azonban azonnal szemet szúrt egy utasítás:

A program elindítása a bootloaderben
Minden titok kútforrása, a betöltött program indítócíme.

Ezután ide olyan megállító kódot írtunk, aminek a futását jól látunk a képernyőn és itt megállíthatjuk a programot.

A boot folyamat vége
Ez állítja meg a programot a resethez.

Ezt a jelenben emulátorból így végeztem el, akkor a rendelkezésre álló néhány bájt helyre DISKDOCTOR programmal írtuk be.

Figyeljük meg a bootloader program elindulását, lemásolja először magát 0x0200-ra, majd a következő blokkot egy bájttal eltolva tölti le. Ez azért érdekes, mert első blikkre azt gondolná az ember, hogy csak a lapcím változik, így az abszolút címzésű JMP utasítás saját magára 0x03f5 lenne. Ez persze hibára fut.

az ellenállás utolsó próbálkozása…

Szerencsére akkor is rájöttem, rájöttünk erre és alkalmasan átírva elindítottuk a program betöltését lemezről. Ez telerondította a képernyőt, majd indításra várt. Akkor is, most is ügyelve a képernyő mozdítatlanságára el-sys-eltük a programot. Kép lefeketedik, majd indul a töltés és a zene.

Az átírt loader indítása.

Eközben már azon gondolkodtunk, hogy hogyan fogjuk kipiszkálni a memóriából a még be nem indult programot. De erre V barátomnak már megvolt a módszere : az EPYX Fastload klón kártyájának monitorával a veremtárba (0x0100) a ROM memóriákat lelövő kódot írtunk (x01:=0x34) majd lemásoltuk az illető 16k-s szeletet 0x4000 re. a másolás után reset, majd a terület kimentése. Így négy betöltésből megvolt a teljes program memória.

közel a program indítás
A felesleges feliratok színmemóriás elfedése után a feliratok helyeit is feltölti a loader!

A memóriákat visszatöltve és elindítva a program elindult ! HEURÉKA, azonban az első meglepetés itt ért minket: a program egész életében csak a loader állítja be a videó szeletet és a színmemóriát, így a sprite animáció helyett csak kuszaság mozgása látszódott. Az azonban már nagy örömre adott okot, hogy a színmemóriában látszódott a képváltások háttere.

Nosza lementettük a színmemóriát és az IO beállításokat, és összetömörítettük a programot 0x0400-tól 0xffff-ig. Az utolsó bájtok is fontosak voltak, mert ezek vektorálták a megszakító rendszert.

Egy feljavított TMC (The Mercenary Cracker) tömörítőt használtunk, de a széttömörítés előtt még visszaállítottuk a színmemóriát és az IO beállításoktat. A széttömörítés idejére 0xd011 regisztert letiltottuk, így a feltört program szépen indult be. (a TMC crunchert azért kellett feljavítani, mert csak 208 blokkig bírt tömöríteni nekünk azonban ez kevés volt)

És mi ebből a tanulság?

Soha sem értettem meg, hogy ha már ilyen jó bootloadert írt a csávó aki ezt elkövette, akkor miért nem:

  • töltötte felül a 0-ás, 0x0200, 0x0300 lapokat, vagyis saját magát például úgy, hogy memória átfordulással (0xffff után átfordul, körbetölti a memóriát, egy ilyen játékot láttam annó nem is bírtunk hozzányúlni , ez volt a “The Young Ones”, de ez már egy másik történet.)
  • miért nem törölte a veremtárat, hogy oda ne lehessen kódot írni.
  • egyáltalán, miért jött vissza szubrutinból ide elindulni, azaz, miért nem később betöltődő turbóval beolvashatatlanná tett kódból indult el?

De mint minden ilyesmi bőven elavult az ISEPIC és társai megjelenésével. Maradt az élmény.

FGTH - the starting picture
Minden kész! játék a memóriában, közvetlenül elindulás előtt. Ugró cím 0x60aa

Igazából olyan katartikus élmény volt látni a beinduló programot, barátommal megélni ezt a munkát, néha bosszankodva egy szalagos LOAD ERROR miatt, hogy mind a mai napig megmaradt bennem az élmény. Meghatározó része lett az életemnek, semmi nem adott akkora lökést, boldogságot mint a reccsenő jég szava. És jég azért volt bőven ezen a programon hát még az ezután következőkön!

Ja és a sikerélmény! A Dinamic Duó elkúrta, nekünk meg sikerült!