Minden kezdet nehéz, szokták mondani. Pláne egy olyan területen, ahol olyat szeretne az ember, ami még nincs. Jó, persze, rengeteg emulátor létezik, de egyik sem úgy van megírva, ahogy szeretném. A sok neten található hogyan írj emulátort és még az AI is azokat javasolja, amit én nem akarok, mert nekem nem az kell.
Nem azt akarom, hogy 50 Hz-enként egyszerre sok-ezer Z80-as utasítást hajtson végre
Ne 20 ms-nyi hangot generáljon le egyszerre a dupla-buffer aktuális rekeszébe
Ne egy bitmap kép legyen a "képernyő", ahova csak átmásolja az emulált gép videoram tartalmát 50 Hz-el.
Sorolhatnám az ilyen tudású, egyszerű C-ben, JavaScriptben levő példákat. Nekem más kell.
Nekem CPU órajelnyi ütemezés kell
Egy frame-nyi hang előállítása, ami pl. 44,1 kHz-en pörög
Valós képgenerálás, pixelről pixelre, sorról sorra, 15,625 kHz-es sorfrekvenciával, 320 sorral, 48,828 Hz-es VSYNC-el
Ezek a minimum, de sok más hardverspecifikus szimuláció is kell. Ráadásul, sok új dolgot, tudást kell még bele programoznom.
Alább az összegyűjtött, naplózott munkafolyamatok és a haladás olvasható, látható a képeken.
Elkezdtem írni, legalábbis a tesztelést, hogy milyen gyors a használt windows-os fejlesztőm, képes a 3 MHz-es CPU-t emulálni? Mert jelenleg 10 ms-onként 30000 Z80 órajelet kellene feldolgoznia. Sajnos csak ms-os timert tud. Most keresek hozzá 1 ns-ost. Igen, nano és nem mikro. Akkor majd a 48,828Hz-es képfrissítést is létre fogom tudni állítani, most csak az 50Hz-et tudná így. Meg ez a 30000 órajel egyszerre, az kb 3000 utasítás 10 ezredmásodperc alatt, ami sok.
Ezek a "szar" windows-os, meg MAC, Linux.... fejlesztőik csak 10 ms-os időzítést tudnak, még 1 us-ost sem, ami 3 CPU órajel lenne, ami már tök baráti. Mindez azért, mert az oprendszerek időzítése csak ezt tudja a redszer óra miatt.
Mindenhol azt javasolják, hogy az emulátor a képszinkronra 50 Hz-re legyen időzítve, szóval jelen esetben 20ms-onként 60000 órajelet kezeljek le egyszerre. És mindent virtuális időzítőkkel számoljak le.
Nos, ebben a sima desktop alkalmazás fejlesztőben, amiben eddig dolgoztam, nem lehet pontos időzítést csinálni. Nagyon jó mindenféle segédprogram megírására (konverter, rajzprogram...). Mivel az oprendszer futtatja és akkor fut, mikor az időt ad neki, így lehetetlen időzíteni. Nagyon sok számítást el tud végezni egy frame alatt, de a frameek pontos frekvenciáját nem lehet beállítani. Kb 60 FPS, de fügetlen a valódi LCD frekitől. Valószínűleg ezt már csak az óra 50Hz-éből kalkulálja, és így nem pontosan 60.
De, simán számol egy frame alatt 50000 utaítást (egyenlőre), ami 3 MHz.
Végülis ez sem rossz. A lényeg, minden mást a virtuális CPU frekihez kell igazítani, és akkor szinkronban lesz.
A multiplatform egyenlőre kérdéses, mert a hangkeltés nem egyforma. Ha megtalálom a módját, akkor ok. Most ezt keresem.
Nem adtam fel. Ezt sikerült összehozni Object Pascalban, mármint abban amiben eddig is csináltam a programokat. A Visual Studio-ban egy kacifántos lib-et kellene kezelni. És az sem lenne más, mint megtudtam, a PC maximum 10 millió megszakítást enged másodpercenként az időzítőnek. Ezt 3-al osztva 3,3 MHz jön ki. Némi késleltetéses trükkel az alábbi képen levő eredmény jött ki.
Ez után, már csak a hangkeltés a kérdés, nem WAV lejátszási alapon. Ha ez is megvan, jöhet az emu írás.
Szóval, az van, hogy elkezdtem írni. Már integrálva a Z80-as CPU és az AY-3 is.
És már a PC (Program Counter) regiszter pörög is. Persze, még nincs ROM/RAM emuláció, még csak egy sima NOP teszt fut, de ez azt jelenti, hogy feléledt az emulátor lelke, működik a proci.
Tud már ablakban és teljes képernyős módban is menni. Az ablak pixel pontos. Lehet, csinálok egy 2 szeres nagyítást is még.
Most jön a ROM/RAM video RAM, bill. mátrix emulálásának a megírása.
Napról napra több és több.
Kész a memória emulációk fő része. A ROM tartalma fut is a CPU-n. Az ominózus VSYNC a kapcsolási rajznak megfelelő, virtuálisan 320 sort "rajzol". A video áramkőr még nincs szimulálva, hanem csak a windowsal kiíratom a video memória tartalmát egy táblázatba. Ezért a karakterkészlet még nem az eredeti, illetve a CPU emulálás is kicsit belassul miatta és emiatt az FPS szám sem 48,828-at mutat.
Teljes mértékben kész:
Stabil CPU frekvencia generálás, automatikus korrigálással.
Valós video áramkőr szimuláció. A CPU órajellel szinkronizálva generálja a 15.625 kHz-es sorszinkron jelet, ezzel, valósan pixelenként legenerálja a 320 TV sort, amiből keletkezik a 48.828 Hz-es képfrekvencia, amivel valósan frissíti a látható képet, a hardveresen támogatott DiretX ablakban (3D motor 11% 🙂 ), true HD (natív 1280*720 pixel) felbontással. A video áramkőr felkészítve a képzaj (havazás) opcionális szimulálására (ezt még meg kell írni).
Teljes 64 kB-os RAM támogatás lapozással. Szín és saját karaktermemóriát is tudja már.
Portok támogatása.
Eredeti karakterkészlet beimportálva, a saját szekeszthetőre átkapcsolást még meg kell írrni.
Billentyűzet emuláció főbb része kész.
Az emulátor 22-24%-ot eszik a PC CPU-jából, a többit a windows.
Ami következik:
Hang generálás (beeper+PSG)
Billentyűzet emuláció befejezése
Szín memória használatának megírása
Grafikus üzemmód megírása
Gyors HTP LOAD megírása
WAV LOAD megírása (magnó emulálás)
DEBUG mód megírása
Saját DOS, MiCOS megírása, aminek majd valódi SD/FLASH memóriakezelést tud
... S.T.B. ... ami majd az eszembe jut.
No igen, mert ugye 16 millió színes RGB888 24 bites lesz, és ha csak 8 biten adom meg a színt, az pont a kék.
Sejtettem, hogy nehéz lesz az emulátorban normális hangot kreálni, de azt nem gondoltam, hogy ekkorát szívok vele. Gyakorlatilag 4 napja szívok. A Microsoft Developer Network (MSDN) leírása alapján sem megy jól.
Biztos, hogy egy nagyon fatális kis bug van, de nem találom. 🙂 Már csak ezen múlik.
Lesz végre valami. Még nem tuti a hang, de már van valami. 🙂 A hang generálás 100%-os, csak a windows szarakszik még a hang buffereléssel.
A magnó olvasás, bill kezelés is tökéletes lesz, de amíg a hang nincs rendben, nem megyek tovább.
Most találtam meg a bugot. Már nem recseg, de még finomítani kell az AY emulációján, hogy szebben szóljon.
Életem leghosszabb bug keresése volt. 3 hét... Eddig 3 nap volt kb. a legtöbb. 🙂
Ja és mi volt a bug? A jelenség olyan, mint amikor elfogy a buffer, azaz latency hiba van. Mivel nagyon kis latencyvel kell itt dolgozni a nagyméretű duplabuffer szóba sem jöhet, csakis a kis méretű cirkulál. Ami azt jelenti, hogy egy pici buffer van, amit egyszerre ír és olvas a rendszer. Az emulátor írja, az audio driver olvassa. No és akkor jött a hiba, amikor pont egyszerre kezelték ugyan azt a buffer címet. Tipikusan, mint a video szemetelés. Mivel itt is sját drivert van a windowsos helyett, ígí nem volt priority kezelés. A megoldás, az emu skippeli, ha a drirer olvas. Ez nem okoz kimaradást a hangban, mert a hang driver 44,1 kHz-en olvas, de az emu ugye 3 MHz-en pörög, és minden órajel csiklusban frissíti a teljes hardvert, ami a kép pixel, beeper hang bitje, magnó bemeneti bitje, billentyűzet mátrix, PSG... Szóval, lesz még alkalma bőven beállítani az aktuális értéket pár órajellel később is.
Jól haladok az emulátorral.
Már tökéletesen kezeli a WAV-os program file-okat, az utántöltés, turbo load és a zene streamerelés is jól megy a "magnóról".
Már kezeli a színes karaktereket. A reset bug, pont az új szín memóriába dobta bele azt a szemetet. 🙂
Holnap megírom a nagy felbontású grafika, és a saját karakterkészlet lekezelését.
Kész a HiRes 512X256-os grafikai mód. Ezen a képen egységes háttér és pont szín van, de tudja már a color atribútumost is.
Kész a multicolor 256X128-as, pixelenként 16 színű mód. Persze, BASIC-ből állítható minden szín, írható, olvasható a videomemória.
Kész az átdefiniálható karakterkészlet, szintén BASIC-ből is mehet.
Természetesen, a módok kombinálhatóak is.
Holnap jön a hardveres raszter támogatás, azaz BASIC-ből is vezérelhető majd, nem kell gépi kódú rutin hozzá. Kettő soronként: raszter color, videomód keverés, és hardveres pixeles scroll. Na ezt még a C64-sem tudja hardverből, szóval még BASIC-ben is látványos játék és Demo írható.
És ami egyértelmű, ezekhez nincs a ROM módosítva.
Akár úgy is megírható a program, hogy ha csak alap karakteres mód van használva, akkor szín nélkül a sima gépen is mehet (pl. a Chernobil, Submarine Hunter ilyenre lesz átírva). De ez nem cél, csak ezt is lehet.
Ma nem volt látványos a haladás, de annál hatékonyabb. Kód optimalizálás, hibakeresés, időzítések pontosítása történt.
Eredmény:
A hang/zene lejátszás (PSG emulálás) 100%-os lett, szép tiszta hangzás.
Magnó betöltés, turbó módban is tökéletes, zene streamelés hibátlan.
Színes karakteres módban a ROM bug oka megtalálva, egyenlőre még marad.
Elkezdtem a hardver rastert írni, az alap már megy. Kidolgoztam a rendszerváltozókat hozzá. Sprite-okat leszámítva, kb. olyan mint a C64 VIC programozása, csak többet tud, és hardverből. És itt is mindent lehet BASIC POKE/PEEK utasításokkal állítani.
Jöjjön most pár BASIC teszt és mintaprogram megírása.
A napokban a mintaprogramok írása volt. Egy egyszerűt meg is írtam, majd szépen előhozott bugokat a videokép renderelésben. Szóval, csótányírtás is volt. 🙂
Ma pedig inkább a HTP file betöltést raktam rendbe (hogy gyorsan tudjak majd tesztelni), részben vissza fejtve a LOAD ROM rutint, hogy precíz legyen a file kezelés, és egyben az SD kezeléses DOS-t is előkészítettem. Az emulátorhoz fogom először megírni az SD kártya szimulációt, aztán ez alapján kell a fizikai kártyába átírni (Pascal-ról C-re) a programot.
Ez is úgy fog működni, hogy nem kell semmilyen CALL utasítás, hanem (pl):
ELOAD"$" - directory
ELOAD"filename"
Lassan itt a célegyenes, kiadható a letölthető Windows-os beta verzió. Gyakorlatilag win98-tól win11-ig (win12) mindegyikkel kompatibilis, 32 bites program. DirectX kell a grafikus motorhoz. Multi threat (több szál) technikát is használ. Nekem egy kb. 10 éves laptopomon Win11 - DirectX 12 van, integrált Intel videokártya, Intel i5, 4 magos 1.7GHz-es CPU. Teszteltem már Win10-en, minimum 20 éves AMD 2 magos 3 GHz-en is, ATI Radeon videokártyával.
A megszokott PC-s emulátorokhoz képest brutál nagy a CPU/GPU igénye, de cserében valósan 3 MHz-en ketyeg a Z80 emuláció, 1,5 MHz-en a PSG emuláció, 48,828 FPS-sel pixelenként !!! építi fel sorról-sorra a valódi videóképet, a VSYNC-et is a szimulált videoáramkőr állítja elő. Ennek köszönhetően létre lehetett hozni a valódi, hardveres raszter technikát. Igaz, soronkénti helyett két sorosra tettem, hogy egy bájtba belehessen tenni a kívánt sor számát, ezért könnyebb a programozása, főleg BASIC-ben.
Minden olyan nyűgöt kiküszöböltem, ami a többi emulátorban előfordul. Nem pontos időzítés, recsegő hang, pontatlan kép generálás (volt amelyiken a Submarine Hunter-nél eltűnt a bomba egyes sorokban), pontatlan PSG emuláció.
És a készülő extrák, amik nem, vagy nem jól, vagy majd valamikor belekerülnek az emukba:
Színes, grafikus, raszteres mód a készülő videokártya emulálásával.
PSG emuláció, és egy valódi 8 bites hangkártya, amit tervezek.
Teljes értékű SD (háttértár) támogatás, utántöltés/mentés, file kezelés (DOS)
USB-s egér támogatás, hardveres egér kurzor megjelenítésével a képen. Logikai, területfoglalós és sok más játékhoz is jól használható.
Igazából, minden, amit annak idején terveztünk fejleszteni. Akkor még az volt a kérdés, hogy ez hogyan lesz majd emulálva (ki/mikorra írja meg), hogy bárki játszhasson vele, vagy írhasson rá programot. Most megfordult a sorrend, a virtuális gép hamarosan kész, a valós meg amint kész vagyok a bővítő modulok (Video/hang/SD kezelés) leprogramozásával. Illetve ha lesz rá komoly érdeklődés.
Addig meg lehet az emulátorban ismerkedni vele, megtanulni a programozását és írni hozzá programokat. Szerintem, a legtöbben az emulátoron játszanak, hisz még gépük sincs.
Egyébként, hogy már a nagy, lényeges része, a LELKE működik az emulátoromnak, most befejezem a billentyűzet kezelést, hogy lehessen minden gombot használni. Főleg a SHIFT + számok nem mennek még. Aztán a HTP mentést és a WAV-ba mentést, végül a debugger rész írom meg. Ezzel már akár publikálható is lesz egy beta verzió, ami:
100%-osan kompatibilis és tudja az eredeti gépet emulálni
100%-osan emulálja az AY-3-at
Új 16 színes mód
Új egyéni karakterkészlet
Új nagyfelbontású grafika 512X256 pixel, 16 szín / 8X8-as atribútummal
Új nagyfelbontású grafika 256X128 pixel, pixelenként 16 szín
Új hardveres, pixeles scroll
Új hardveres raszter-technológia, ami 2 soronként lehetővé teszi a fentiek keverését egy képen
Szépen alakul az emulátor billentyűzet-kezelés megírása.
Nem az eredeti memóriamátrixos áramkör leszimulálása volt a nehézség, hanem a PC - HL mátrix átkonvertálása, a megfelelő logikai sorrend megalkotása. Mindez csupán a SHIFT gomb miatt van. Nem lehet egy az egyben átvinni. Mondjuk még az Alt/AltGr is macerás kicsit.
Pl a ?-jel a PC-n SHIFT-es, a HL-en nem, de ugyan ott van a ;-is AltGr-rel.
Így van ez az = jellel is, ami SHIFT + 7 a PC-n, de HL-en SHIFT nélküli külön gomb, s ha nyomva lenne a SHIFT akkor - jel íródna helyette.
Összesen, 21 ilyen "problémás" gomb van. A többinél viszont mehet egy az egyben.
Kész a teljes billentyűzet emuláció. Olyan 99%-osan emulálja. Az ALT gombot nem emulálja, mert arra a windows menü jönne be, de amúgysem használjuk az ALT gombot. A másik érzékeny pont a SHIFT de szerintem az jól sikerült. Gépeléskor és játékokban jól mennek a gombok.
Majd még a joystick emulációt kell megírni. Legalább egy fizikai windowsost biztos betudok integrálni, és ez esetben a WASDQ maradhat a 2-es joy emulálására.
Azért már, az is egy élmény lesz, hogy XBOX kontrollerrel (vezeték nélkül), lehet majd irányítani a helikoptert, hajót... főleg a DOOM-ot. 🙂
Átnéztem a menüt/funkciókat... Már csak a HTTP/WAV mentés kell, azaz, ha valaki itt ír BASIC programot, akkor hibátlanul fog tudni menteni és betölteni.
A LOAD része teljesen kész.
A SAVE részt kell megírni. Ez kicsit nagyobb meló, ezt holnapra hagyom, ma a debug résznek kezdek bele, akár az teljesen kész is lehet még ma. Nem nagy meló, csak a CPU és a PSG regisztereit (kb 25 szám) kell kiírni a képre. A videokártya 15 "regisztert" használ, de ebből 7 darab egyenként 160 bájtos raszter táblázat. Meg az egyik még szintén egy táblázat lesz, talán 256 értékkel. Ezeket nem fogom kiíratni.
Kész az alap szintű debug. A feliratot OSD technikával rakom ki a képre Full realtime. Lehet pause-zni a CPU-t és utasításonként lépkedni.
Egyiken a PSG aktivitás látható, a másikon a VIC (Video Interface Circuit) látható. Mind a 15 regiszterét kitettem, ebből 2 még nem üzemel.
(UPDATE: a debug azóta megváltozott)
Mára (tegnapra 🙂) még annyit beletettem, hogy lehet állítani az ablakos mód méretét. Elég nagy volt a HD-s, kétszeres méret, ezért betettem az egyszeres SD méretet is. Fejlesztésnél jobb, ha van bőven hely körülötte. Meg majd a további debugnak és egyebeknek is kell a hely.
Eddigi VIC tudás:
640X360 pixeles (16:9) VGA képkimenet, ebben az 512X256-os HL kép, a többi keret
16 színű paletta, színenként 24 bit RGB. (Terv, hogy 4 darab szín paletta legyen)
Általános ink/papper/border szín. (Választható lesz a szín paletta)
Eredeti és egyéni karakterkészletes mód
Nagyfelbontású grafika 512X256 pixel, 16 szín / 8X8-as atributum (Pl. Spectrum) (Alapból az általános szín paletta van)
Nagyfelbontású grafika 256X128 pixel, pixelenként 16 szín (Alapból az általános szín paletta van)
Hardveres, pixeles X/Y scroll
Hardveres raszter-technológia, ami 2 képsoronként lehetővé teszi a fentiek keverését/módosítását egy képen.
További tervek:
Hardveres egérkurzor (egérhez, de a játékban a joy/bil is irányíthatja akár)
Spriteok, bár a korrekt sprite ütközés figyelés elég macerás, ezen még rágódok.
Tudhatná még a TVC formátumait is (4 színű módot és a 128X256-os 16 színűt), de akár a C64 multicolort is, akkor 256X256-os (160X200 helyett) színes kép is lehetne, de nem akarok ennyire copyzni, másrészt sokaknak nehéz azokat lekezelni. Az én rendszeremet nagyon könnyű programozni, lineáris a memória, nincsenek keverve a bitek.
A napokban a video kezelést optimalizáltam, főleg a regisztereket és a rasztertábát szervesztem át optimálisabbra.
Már nagyon közel a beta verzió elkészülése. (Tudom, írtam már ezt.🙂)
Az emulációk és pontosságaik 100%-osak. Max 0,01% eltérés.
A CPU sebessége 100%-osan pontos. A BEEP"W " ugyan azt az 1040 Hz-es hangot (zenei C6) adja, mint a vasam.
A VSYNC ugyan akkora méretű (8 line) és frekvenciájú (48.828 Hz) mint a vasamon.
Virtuálisan 320 sor generálódik, mint a vason.
A virtuális magnóba betett mérőjel (996 Hz) ugyanolyan frekvencián szól mint a VLC-ben, vagy a MediaPlayer-ben, tehát 100%-os a magnó sebességének a pontossága is. Ez nem a windows-os médialejátszó, hanem saját adat-magnó emuláció (BRG MC 3810 alapján).
Mondhatni, 100%-os a video szemetelés emulációja. Persze, ez menüben bármikor ki/be kapcsolható.
100%-os a PSG emuláció is.
Lehet HTP-t menteni betölteni ELOAD/ESAVE utasításokkal.
A magnóra ugyan úgy lehet felvenni, mint a fizikaira. Akár egymás után több programot is. Még rá is lehet venni, bele is lehet törölni, ha nem vigyázunk. 🙂 BASIC-ből is használható utántöltésnek, vagy akár adatkiírásnak, bár ez utóbbi elég nehézkesen oldható meg, mert nincs erre kimondott ROM utasítás, mint a többi gépeken.
A magnó auto start/stop-os, mint a HT/C64-eseké. Ha akarjuk, hallható a load hangja is. Persze ezek is ki/be kapcsolhatóak, és a felvett adat WAV-ba menthető, és a WAV file tartalmazza a magnó beállításait is, és amikor visszatöltjük a WAV-ot, beállítja a magnó paramétereit.
A kétszeres képméretnél már csak a HL képe látszik, nincs magnó és PSG vizualizáció.
Teljes képernyős nézetben is kényelmesen használható a HTP mentés (ESAVE vagy Ctrl+S) / betöltés (ELOAD vagy Ctrl+L), ha valaki BASIC programot ír.
Ami nincs és nem is lesz, az a CPU gyorsítás, mint a többi emuban. Fizikailag például kb. nyolcszorost tudna a laptopomon, de mivel nincs nyomós ok, hogy miért legyen, ezért inkább nincs.
Még a debug funkción kell finomítgatnom kicsit.
Az elmúlt hosszú időben nagyon sok fejlődés tötrtént.
A videoszemetelés "havazás" szimulációját finomítottam. Írtam, hogy elég élethű, de nem pontos. Bekapcsoltam a vasat is, és írtam egy olyan egy utasításos gépikódú programot ami a 10 GOTO 10-nek fele meg, és a video memóriában fut, ezzel állandó zavart okozva.
A programot pár soros BASIC programmal töltöttem be és indítottam el. A vason kapott eredmény alapján tudtam befinomítani a emulátorban. Az eredmény szinte bájtra egyezik. Az eltérés az elektronikai alkatrészek pontatlanságából, "szórásából" adódik, de ez az eredmény teszteléshez kiválló.
A másik haladás az optikai tuning befejezése. Nem csak a CRT színvilágát és a csíkosságát (scanline) szimulálja, hanem választható az összeköttetés, a VGA, a kompozit, illetve az RF (antenna) bemenet közül.
A VGA a legjobb minőség, a kompozítnál kicsit elmosott, az éleknél van egy kis "túllövés" miatti hiszterézis effekt, illetve utánhúzás.
Az RF pedig magáért beszél. 🙂
Harmadikként bekerültek az oscilloscope ábrák a hangcsatornák vizualizálására.
Most már elmondható, hogy ez az emulátor olyan, amilyen a vas. Főleg az időzítések, a hang, a kép... meg minden extra.
Mai nap a tesztelésről szólt.
Elsőnek a PSG-t ellenőriztem le, hogy a csatornák jól vannak-e kiosztva (bal, közép, jobb). Rendben voltak.
A másik egy nagy tesztelés és rendberakás volt. Ez a HTP file betöltés/kimentés. Nem csak úgy az emulátorban menüből, hanem akár begépelve, mint a vason, illetve a BASIC programban is.
Ezek alapján lehet BASIC-ben:
betölteni bármilyen programot
betölteni bármilyen adatállományt, aminek a helyét a file fejléce tartalmazza. Lehet kép, játék állás, új pálya, új zene, bármi a 0-ás lapra
kimenteni az adott BASIC programot
kimenteni bármilyen adatállományt, aminek a helyét (eleje, vége) a rendszerváltozóknál adjuk meg (POKE-al). Lehet kép (screenshot), játék állás, gépikódú program, bármi ami a 0-ás lapon van
A normál BASIC program mentésénél megerősítés kell, ha létezik a file, hogy felülírja ( ,O - a filenév után: ESAVE"Jatek",O ). Az adatállománynál automatikusan felülíródik, hisz pont az a cél, hogy megzavarás nélkül elmentse az aktuális állásokat. Persze a játékban lehet a "Biztos-biztos, de tényleg?" módszert is használni, ha akarjuk. 🙂
Adatállományt, azaz memória tartomány mentését a filenév után írt ,R-rel jelöljük. Pl.: ESAVE"Inventory",R
Ezeket egyenlőre egy egyszerű DOS kezeli le, amit csak az emulátor tud még, a ROM még mindig nincs módosítva. 🙂
A ROM-ba akkor kerül majd bele a DOS, ha már valós SD kezelőt fog szimulálni az emulátor, amivel a vas is kommunikál.
Megy még az alfa teszt.
Ma is egy nagy bugot kellett javítanom a MultiColor grafikában.
Közben, ahogy elkészültem a színes kép konverterrel, és beraktam a képet a zenelejátszóba, előjött egy bug, a video renderelésnél. Pár méretezési/számolási logikai hiba volt, és töredezett volt a kép. Illetve a színpaletta kezelés sem volt tökéletes a MultiColor-ban.
Ezeket kijavítottam, és létrehoztam 4 színpalettát, ami akár a 4 videomódhoz külön használható, vagy adott módon belül keverve, így már 64 színt tud összesen, amiből rasztersoronként egy paletta, azaz 16 szín lehet.
Ezzel megoldható, hogy más színek vannak a HUD-on, és a pályán, vagy a MulriColor kép sávonként más színvilággal lehet. Mondjuk egy címképen a felirat és alatta a kép más domináns színekből van összerakva. Mindez összesen 192 bájtot foglal a teljes programban. További 48 bájtokkal lecsererélhető bármelyik paletta.
Ezek a paletta manipulációk nem csak demókban, hanem játékokban is nagyon kellenek, a háttér/út virtuális animálásánál rengeteg CPU időt takarít meg.
Készül az első publikálandó DigiDemo is🙂
Digi zene, MC kép, Oscillscope effekt, és még csak 47kB-a 64-ből.
Mondhatni már csak napok kérdése, hogy publikáljam az emulátort.
Lassan, de biztosan, az elmúlt 4 hónapban (más projekt megvalósítása mellett) nemcsak tesztelés és finomítások mentek, hanem már demo és módosított játék is született, készül hozzá, az új módokat kihasználva.
Ezzel eljutottunk a jelenbe. Köszi, ha végig olvastad.