A ReRun hardver
A Primo-GA alapját az általam tervezett ReRun hardver adja meg. Ennek tervezésekor (más források alapján)
az volt a célom, hogy egy olyan hardvert építsek, amely képes lehet a nyolcvanas évek tipikus 8 bites
számítógépeinek, kiemelten a magyar gépeknek a megvalósítására. A modern FPGA áramkörök lehetővé teszik,
hogy ugyanazon fizikai hardverben (ez maga az FPGA chip) más-más kapcsolásokat valósítsunk meg.
A cél tehát NEM önmagában csak a Primo újratervezése volt, hanem egy olyan általános hardver megépítése,
amibe aztán később majd beletehetünk egyéb 8 bites gépet is. Éppen ezért a hardver erőforrásai (gondolok
itt a színek számára, a memória nagyságára, vagy az Audio kimenetre) túlmutatnak a Primo keretein,
de ez szándékos.
Terveim között szerepel más gépek realizálása is, elsősorban a magyar gyártmányok, de a számomra
nagyon kedves ZX-Spectrum, VIC-20, C16 is kivitelezhető ezzel a hardverrel. Az ötlet egyébként nem
új és nem saját. A C-One vagy a Commodore-DTV, illetve az Amiga-t újra életrehívó MiniMig projektek
mind hasonlóak.
A hardver fizikailag három IC-ből áll (ha eltekintünk a tápfeszültséget előállító áramköröktől):
A hardver a külvilág felé az alábbi portokat, egységeket szolgáltatja:
A Primo-GA
A Primo-GA természetesen kompatíbilis az eredeti Primo A64-el, illetve, mivel az A sorozat és a B is
kompatíbilisek, ezért a B sorozat gépeivel is, de a színes képet másképp állítja elő, mint a Primo C,
ezért azzal NEM kompatíbilis.
A rendszerindítás lépései:
Az FPGA konfigurálása a jelenlegi belső oszcillátor órajele mellett nagyjából 2 másodperc.
A primo.rom betöltése szintén körülbelül 1 másodpercet vesz igénybe. Bár a konfigurációs fájl 200K,
a primo.rom pedig csak 16K, a két betöltés eltérő kommunikációs protokollt használ, és ne feledjük,
hogy a ROM-ot már egy Z80 kód tölti be, ezért aránylag ez lassabb. Az indulás sebességét befolyásolja
még természetesen a használt SD vagy MMC kártya sebessége is, általánosságban az mondhatjuk, hogy a
Primo-GA a bekapcsolás után nagyjából 3-4 másodperc után jelentkezik be, természetesen hibamentes
állapotokat feltételezve. Ha az fpgacore.bin vagy a primo.rom fájl hiányzik a kártyáról, a rendszer
nem tud elindulni.
joco
A megvalósítás tartalmazza a kor követelményeit, ezért vannak apróbb eltérések, de ez nem okoz gondot
a programok futtatásakor. (Ilyen tipikusan az SD kártya kezelése, hiszen ki akarna ma már magnóról
betölteni egy programot) Természetes, hogy 2011-ben nem ugyanazokat az áramköri elemeket és technikát
használjuk, mint a 80-as években. A mai FPGA áramkörök nagyteljesítményűek, alacsony fogyasztásúak
és sokkal gyorsabbak, mint a hagyományos TTL rendszer elemei.
(Megjegyzem, hogy az alkalmazott Xilinx Spartan-3 is elavultnak számít már).
Az FPGA olyan elemeket és lehetőségeket nyújt, amelyek gyökeresen eltérő utakat is megengednek. Persze
a kompatíbilitás fontos, de egy ilyen hardver esetében miért ne használnám ki a kor adta előnyöket.
Például miért vesződnék a video-cpu összehangolásával a videomemória számára, amikor az FPGA
tálcán kínálja a megoldást (dual port block ram), amely feleslegessé teszi a két egység szinkronizációját?
Vagy, miért ne adnánk új utasításokat a Z80-nak, amikor az FPGA-ba ez belefér? Miért ne csinálnánk
olyan hardvert, amely egyaránt képes a hagyományos televíziók és a VGA monitorok meghajtására is?
Az alábbiakban felsorolom az eltéréseket, amelyek néha talán öncélúnak tűnhetnek, mégis,
mindennek célja és oka van :-)
A Primo-GA teljes, részletes hardveres ismertetését, illetve a ROM-ban végzett egyéb módosításokat
idővel majd publikálom, egyelőre annak is örülök, hogy a design végre elindult, és képes eredeti
Primo programokat futtatni. Végezetül következzen néhány fotó (mobiltelefonnal csináltam őket,
elnézést a minőségért), amik a hardvert működés közben mutatják. Prototípus panel még nem készült,
egyelőre egy gyári FPGA fejlesztői panelen dolgozom, ezt egyrészt kissé módosítottam az
eklépzeléseimnek megfelelően, másrészt kézzel festéses módszerrel elkészítettem a kiegészítő panelt,
ami a mikrokontrollert és az SD kártyát tartalmazza. (Ez nem lett túl szép, de legalább működik.)
A fejlesztőkörnyezet a PC-n. Xilinx ISE Webpack. Igaz, nem sokminden látszik. Ezen "írtam" a Primo-GA-t.
Az eredeti Z80 core nem az enyém, azt az http://opencores.org/-ról szedtem le és módosítottam kicsit.
A hardver, bal oldalon a Digilenc Inc FPGA fejlesztőkártyája, jobb oldalt pedig az én
próbapanelem, ami az AVR mikrokontrollert, az SD kártyát és a Speaker-t tartalmazza.
A Primo-GA bejelentkező képe egy 19 colos 16:9-es LCD VGA monitoron.
A Primo-GA bejelentkező képe egy hagyományos Commodore 1084S RGB monitoron (PAL compatibilis módban)
A látható vízszintes interferencia csíkokat csak a fényképezőgép látta, a kép szabad szemmel természetesen
tökéletes.
A Primo-GA bejelentkezés után a cmd parancs kibővítésével éri el az SD kártyát.
A képen látható üzenetet az AVR (ekkor már device módban) küldi.
A border színét megváltoztattam a megfelelő out utasítással. Most is látjuk az AVR válaszait.
Minden összedugva, egy demo program fut éppen, eredménye a monitoron látható.
Talán látható, a DIR parancs eredménye a képernyőn.
Egy játék képe, amint éppen fut a Primo-GA-n.
Egy másik játék képe, amint éppen fut a Primo-GA-n. Itt átállítottam a színeket.
A Single Attribute video mód tesztje, ez a Basic program forrása.
A Single Attribute video mód tesztje, ez pedig az előző program futásának eredménye, az attributum
bájtok megváltoztak. Ez a mód a ZX-Spectrum-hoz hasonló 32x24 attribútum cellát hoz létre a képen.
A keret (border) színének váltogatása. A fényképezőgép itt sem azt látja, amit az emberi szem. :)
Megint egy játék képe. Ezt most egy SUN 17 colos CRT VGA monitoron látjuk. Ez is működik.
Sprite-ok a primo képernyőjén. A Primo-GA nyolc darab 16x16-os négy színű hardver sprite
kezelésére képes.
Jól látszik, hogy a sprite-ok a grafikus kép "felett" vannak.
Referenciák: