Az első simítások

 2013.01.17. 00:14

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.)

scpu.jpgA 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…

Valószínűleg aki ténylegesen érti, amiről a fentiekben szó van (és esetleg próbálta már maga is), annak a haja most már égnek áll (és aki nem, annak pedig attól), ezért egyelőre nem folytatom a sort (márpedig az hosszú lesz…). Csak annyit még, hogy ez eddig még mindig csak az IRQ rutin (annak is az első közelítése), mely a teljes rendszernek egy aránylag kis méretű (ámde annál kritikusabb!) szegmense; majd az összes többi elem pedig csupán később jön (a rekurzív algoritmusok és társaik). Tudom, rögeszmés vagyok, viszont rögeszmésnek lenni jó.

Szerencsére ama rettentően kiváló VICE emulátor igen akkurátus emulációkat biztosít már csaknem minden fontos hardverhez. (Állítólag most már SuperCPU is van, noha pusztán „nemhivatalos” verzióban ugyan, de ha jól működik benne – én még egyelőre nem jutottam odáig, hogy kipróbáljam –, akkor nyilván előbb-utóbb beépül a hivatalosba. Mivel nekem is a szándékomban áll ezt kihasználni, izgatottan várom.) Természetesen a VICE-ban programozom én is, nem egy eredeti Commodore-on (attól aztán már az én hajam is égnek állna manapság… pláne mivel ugye nincs is; mármint haj), de a későbbiek során muszáj lesz majd mindenféle vason tesztelni. Ehhez pedig azok (még meglévő) kedves tulajdonosainak a segítségét szeretném majd kérni. Tehát aki bármiféle különleges, egzotikus (valós!) C64/128 hardverbővítő-eszköz birtokában van (mint említettem: fényceruza, egér, SCPU, REU, GeoRAM és EasyFlash, meg más efféle ilyesmi), és szívesen közreműködne, az valamilyen módon jelentkezzen, kérem, keressen! (Lehet itt is üzenetet küldeni a blogmotoron keresztül, vagy hozzászólni lentebb, vagy pedig a megtalálhatóságom az istennyila.hu weboldal; esetleg a Facebook.) Addig is, hogy lelkesítsek, itt egy (gyakori és jellemző) képernyőfotó a játékból.

ros1.jpg

Ez meg itt egy másik…

ros2.jpg

(folyt. köv.)

Címkék: windows retró bug sid c64 rosetta hobbit vice irq assembly kalandjáték chameleon megszakítás c128 6510 árok party 6581 supercpu 8580

A bejegyzés trackback címe:

https://rosetta.blog.hu/api/trackback/id/tr865021909

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.