Amit eddig nem árultam el még senkinek, hogy valójában tavaly júniusban elkezdtem már programozni ezt-azt (szokás szerint afféle spontán elhatározásból – egyszerre csak elkezdtem, majd abbahagyni pedig nem bírtam…), melynek eredményeképpen néhány hónap alatt kb. hat-hétezer sornyi Assembly kód(tömeg) született. (Mármint 6510 forráskód, mely lefordítva kb. 10-12 kB-nyi tárgykód jelenleg.) Azaz még az Árok Party előtt, csakhogy bölcsen nem beszéltem róla. Először egy általános rasztermegszakítás-rutint kezdtem írni (nyilván, mi mást), ami aztán rengetegszer átalakult, bővülgetett… stb. Ez lesz majd a rendszer legbelső magva, igaz, jelenleg az egész csak egy gigantikus bughalmaz.
Miután a leendő (és ún. óperenciás) rendszeremnek – az előzetes elvárások után immár kötelező jelleggel és megkerülhetetlenül – muszáj realtime jellegűnek lennie (anélkül ugyanis lehetetlen volna többjátékosnak és többszereplősnek lennie, és márpedig éppen ez a cél), ezért a megszakítás megfelelő kezelése kulcsfontosságú benne. (Aki nem érti, hogy miről beszélek, az vagy próbálja ki A babó c. játékomat, vagy legalább olvassa el, korábban mit írtam.) Természetesen a „gyári” megszakításrutin teljes egészében ki van iktatva belőle, mint ahogy a gyári keretrendszer összes többi része is (ROM-ok végleg kikapcsolva stb.), és mindent én csinálok helyette. Mindez magában foglalja a képernyőkezelést (nem csupán a szövegek és képek és az üzemmódok közti váltást, hanem például a folyamatos szövegmegjelenítést és a szövegablak fel-le való görgetését, sőt – ez egy kissé meglepően hangozhat, de később fény derül majd rá – még néminemű sprite-multiplexálást is) éppúgy, mint ahogy a beviteli perifériákat (egér, billentyűzet, fényceruza), meg egy csomó egyéb teendőt (mint pl. C128 esetén az 1-2 MHz-es kapcsolgatást stb.). Igen bonyodalmas, kényes egyensúlyú és időzítésű, és összetett a feladat. (Egyelőre nem is nagyon működik még úgy, mint ahogyan azt kéne.) Rendkívül fontos ugyanis, hogy bármi történjék a programfutás során egyébként (pl. egy hosszú másodperceken át tartó keresést vagy számítást végez el a processzor), azalatt a látszólagos aktivitásnak sosem szabad – egyetlen pillanatra sem – megakadnia. (Ez alól csak kivétel a lemezműveletek lesznek, amelyeket azonban a memóriabővítők és EasyFlash cartridge használata révén szeretnék majd túlnyomórészt száműzni.)
A raszteridőzítések összeomlásmentes fenntartása már csak azért sem túl könnyű jelen esetben, mert úgy kell készülnöm, hogy (a sztenderd kb. 1 MHz helyett) elviekben bármennyi lehet majd az órajel (pl. a Chameleon kártyával, ha jól tudom, akkor kb. 8-12 MHz közé lehet turbósítani, vagy a SuperCPU-val 20 MHz-re; nem beszélve a PAL és NTSC közti eltérésről stb.), s én azt szeretném elérni, hogy minden környezetben fusson. (Ennek érdekében többek közt egy bootoláskor végzett sebességteszt megméri az órajelet és más aktuális hardverjellemzőket, melyek függvényében – egy önmódosító kód formájában – adaptívan átalakítja a továbbiakban a futását. Más szóval a programkód a saját utasításait átírja.) Extra „élvezet” a billentyűzetmátrix-lekérdezés programozása (többszörös billentyűlenyomás-kombinációkkal és a C128-as kiterjesztett klaviatúra teljes támogatásával), vagy az egérkezelés (a SID chip beépített A/D konvertereit kell egy adott ütemezés mellett frissítgetve kiolvasni, amelyeket eredetileg két „Pong” típusú analóg potméterhez terveztek, az egér viszont helyettük a vízszintes és függőleges irányú elmozdulást küldi rajtuk keresztül), sőt, mint említettem, lesz még ezenkívül fényceruza is… (Ebből kifolyólag speciális menüvezérlés.) Plusz nyalánkság gyanánt egy-két screensavert is terveztem…
Utolsó kommentek