Bárány CPU BASIC compiler
Egy nagyszerű barátom egyszer elhatározta hogy épít egy egyedi általa tervezett processzort. És ehez engem kért meg hogy írjak rá fordító programot, operációs rendszert és programokat. Nos mindezt teljesítettem is. Íme az eredmény.
A processzor weboldala képekkel és leírásokkal itt tekinthető meg:
TTL CPU Bárány Gábor által
És még néhány youtube videó ahogy működik és villog megannyi LED rajta:
TTL CPU videó
Ez a proci kizárólag TTL szintű áramkörökből épült, maximális órajele 5MHz és 64kbyte memóriát képes megcímezni. Viszont lapozással képes akár 2MByte memóriát is kezelni, és ezt a fordító transzparensen támogatja. A fordító BSIC nyelvből fordít gépi kódra assembly átmeneti kimeneten keresztül. BASIC szinten egészen 2Megabyte nagyságig írhatunk programokat. A proci nem csak egy különálló processzor, hanem egyedi perifériákat is tartalmaz. Egy videó modul is tartozik hozzá ami legalább olyan bonyolult mint maga a preocesszor és ez pixel grafikus képet képes előállítani, és megjeleníteni akár VGA monitoron, akár televízió készüléken (PAL analóg kódolással). A számítógéphez tartozik egy hagyományos AT billentyűzet, és egy Commodore gépből kitermelt (híres) SID hanggeneráló áramkör is. Így az egész képes grafikus zenélő játékok futtatására. Sőt ezek egy saját operációs rendszerből képesek is betöltődni. Háttértára nincsen, csak egy letöltő ami feltölti a 2MByte-os memóriát. Viszont a memória NVM-mé van átalakítva úgy hogy egy külön elem táplálja kikapcsoláskor a memóriát hogy ne felejtse el az adatokat.
A fordító BASIC bemenetből fordít assembly közbenső kimeneten keresztül gépi kódot. A BASIC valójában egy makró nyelvre fordul le amit a makró fordító assembly-vé alakít és végül az assembler fordítja le gépi kódra. Minden egyes BASIC parancsra meg van írva egy ASM blokk amivel lényegében kihelyettesítődik az aktuális BASIC utasítás. Legtöbb esetben ez egy függvényhívás a BASIC parancs által megadott paraméterekkel. A BASIC-ból készült gépi kód közvetlenül fut a célgépen, nem interpretáltan mint ahogy régi Commodore és hasonló gépeken megszokott volt. Ez egy valódi compiler (fordító), és nem interpreter.
A fordító környezete tartalmaz egy közvetlenül használható assemblert is, és egy letöltő részt is ahol a kód közvetlenül a célgép memóriájába tölthető (Programmer). De akár egyben az egész folyamat automatikusan végrehajtható egyetlen gombnyomásra (F9-re), ez fordít, és ha minden jól megy akkor le is tölti a kódot.
Mivel az egész gép a barátomnál volt mindvégig Budapesten én meg Veszprémben fejlesztettem ki több mint 100km-rel arrébb a fordítót ezért én kénytelen voltam szimulálni az egész számítógépet. Ehez készült a fenti szimulátor. Ez szimulálja az összes hardvert beleértve a kijelzőt is meg a teljes processzort is és futás közben láthatóak a memória illetve regiszter tartaklmak amik segítik a debuggolást. Barátom nagyon is csodálkozott mitől van az hogy mindig tökéletesen működő szoftvert kap, a szimuláció a kezdeti apróságok után tökéletesen működött, és a valóságot tökéletesen szimulálta. A szimulátor szimulálja a SID hanggenerátort is, így a szimulátorban futó játékok zenélnek is. Amivel sokszor gond volt hogy a valós és szimulált sebesség közt sokszor eltérések vooltak, ezt sokszor kellett igazítani a valósághoz. Hiszen PC-n szempillantás alatt lefutnak ezek a kódok amik a valós hardveren sokkal tovább futnak.
Első tesztprogram eza "kocka" volt, egy forgó kocka a képernyőn.
Utánan jött ez az egyszerű játék amiben egy kis mozgó alakzatot kellett lelőni, de ő is lő ránk.
Ez a tankos játék már jóval több volt, több pályás játék volt amin keresztül kellett menni. Mindegyikben két dobogó szív volt amit fel kellett venni és két mozgó halálfej amiket le kellett lőni, de ők meg is tudnak ölni minket. Ha megszereztük a sziveket, a vicsorgó fejeket meg lelőttük a tankunkkal akkor további pályákra lépegethettünk. A játék alatt zene szól ami a SID mind a 4 csatornáját maximálisan kihasználja, dobolás és két szólam is fut egyszerre. A gép éppen hogy csúcsra volt kihasználva ezzel a játékkal.
És ez itt végül az operációs rendszer boot-olásakor megjelenő kép.
És íme így néz ki a betöltődött operációs rendszer amiben el lehetett indítani a fenti játékokat, de még egyszerű szövegszerkesztőt is tartalmazott amivel jegyzeteket lehetett készíteni. DOS parancsokkal lehetett működtetni, és a megjelenése is DOS szerű volt.
A fenti fordító és szimulátor környezet teljes forráskódját itt nyílttá teszem. Ez tartalmazza a fordító rendszert fordítókkal együtt és a szimulátor illetve letöltőt is.Felhasználási szabályok. Kijelentem hogy az összes forráskód mind az én művem és tulajdonom, kivéve a Commodore SID hang chip szimulátorát, az nyílt forráskódú. A kód egésze C++ nyelven íródott MinGW projektként.
FORRÁSKÓD LETÖLTÉS
By Bognár András (2015)