MiST Primo

A Primo hardver szempontból nem túl bonyolult gép. Valójában egy Z80-as rendszer 16K ROM memóriával, és 48K RAM-mal. A RAM-ban helyezkedik el a képernyő memóriája is, amely a felső 16K lapon található, két 8K-s lap megejelenítése lehetséges. A felbontás 256x192 képpont. Az eredeti hardver lehetőséget adott a 256x256-as felbonsára is, de ezt a lehetőséget a kész gépeknél nem használták. A megjelenítés monochrom volt, tehát csupán két szín jelent meg a képernyőn. A pocesszor órajele 2.5 MHz vagy 3.75 MHz lehetett, tekintettel az olcsó NDKs Z80 utánzatra, leginkább az alacsonyabb órajelet használták.

Perifériakezelés szempontjából a billentyűzet, a hangkeltés és a magnó érdemel említést. Az alaprendszer pár I/O porton keresztül éri el ezeket az eszközöket. Végezetül fontos még foglalkozni az NMI megszakítással, amit a megjelenítő hardver generált szinkronban a vertikális visszafutással. PAL kompatíbilis kimenet lévén a rendszer 312 rasztersort generált (interlace-ben ez 624 sor), a képfrissítés frekvenciája - és az NMI rátája is - ezért 50 Hz.

A MiST-re portolt verzió a Primo A64 megfelelője. Az SDRAM tárolja a Primo ROM-ját és a RAM-ot is ez adja, kivéve a videomemóriát, azt az FPGA belső RAM-ra szolgáltatja 16K nagyságban. A belső ram dual-port ram, ezért a képfrissítés nem állítja meg a CPU működését. Az eredeti Primo megjelenítő monochrom volt, én 16 színt használok RGBI formában, amiből a megfelelő analóg RGB jelek előállnak a MiST kimenetén egy fix paletta segítségével. A videoáramkört egy korábbi projektből vettem át, és egyéb videomódok is vannak benne, nem csak az eredeti Primo mód, de hát nagy valószínűséggel ezeket úgysem fogja soha senki sem használni. Mindenesetre a normál, standard Primo 256x192-es videomód gond nélkül megy. A keret, a háttér és az előtér színe beállítható az F1, F2 és F3 gombok segítségével (és megfelelő OUT utasításokkal is).

A mag kétféle videokimenetet támogat: A VGA üzemmód nem a ScanDoubler modullal van megoldva, hanem ebben az esetben a mag más pixelfrekvenciát és más rasztersor számot generál. Ebből következik, hogy VGA módban az NMI nem 50, hanem 60Hz-es sebességgel érkezik. Ezáltal ilyenkor a mag nem ciklusa pontosan kompatíbilis az eredeti Primo-val, de ettől még működik, esetleg kicsit gyorsabb lehet néhány program. (A videomemória miatt egyébként is gyorsabb a gép, mint az eredeti.)

A programok (játékok) betöltésére a MiST standard módszert hasznélom, azaz az OSD menüben lehet fájlokat kiválasztani és betölteni. Az OSD menü az F12 gombbal nyitható meg. Az egyszerűség kedvéért - hogy a betöltés gyors legyen - egy saját formátumot hoztam létre, amely a Primo SnapShot formátumon alapul, neve Primo Memory File, kiterjesztése .PMF. A PMF fájl tartalmazza a Primo 48K RAM memóriáját, valamint a Z80 stack-be mentve az összes processzor regiszert. Így ez a fajta fájl 49152 + 2 bájt hosszúságú lesz minden esetben, mert a memórián kívül az SP regisztert is el kell tárolni. /A PSS->PMF konvertálásra készítettem egy kisebb .NET programot, ami betölti és konvertálja a PSS snapshot fájlokat PMF-re./

Az OSD menüben lehetőség van a programok (PMF fájlok) betöltésére, RESET jel kiadására, illetve VGA módban a Scanlines effekt ki- és bekapcsolására. Ez az opció az RGB Scart kimenetnél természetesen hatástalan.

Extra regiszterek: (ezeket az eredeti Primo nem tartalmazta, de az FPGA verzióban megvalósítottam őket)
$D0
bit 3..0 : Color Register C2
bit 7..4 : Border Color Register 

$D1
bit 3..0 : Color Register C0 (paper)
bit 7..4 : Color Register C1 (ink)

$D2
bit 1..0 : Video Mode 
		00 - 256x192,mono 
		01 - 256x192 with 32x24 attributes 
		10 - 8 colors mode 
		11 - 320x200x4 mode

$F0 
YM2149 sound chip address register
$F1
YM2149 sound chip data register

$F7
bit 6..0 : Speaker volume
    bit 7: yellow LED

$F8
bit 7..0 : PAGE A (256x16K pages for memory bank at $4000)

$F9
bit 7..0 : PAGE B (256x16K pages for memory bank at $8000)

$FC
bit 1..0 : CPU speed 00/11-3.5MHz 01-7MHz 10-14MHz
bit    7 : LOCK (locks all extra ports till next reset)

Képek:


A bekapcsolt MiST az asztalomon. Jobb oldalon az USB Blaster programozó áramkör


Egyszerű basic teszt program


A MiST OSD menüje a primo indulása után


Az Astro Blaster játék betöltése és futtatása


A Galaxy játék betöltése és futtatása


Downloads:
PRIMO.RBF
PRIMO.ROM

Köszönet:
Linkek és referenciák:

[Home | FPGA fejlesztés]