Neu / eigener FPGA-Core für den MiSTer

MERIDIAN 816Der Heimcomputer, den es nie gab.

Irgendwo zwischen C64 und Amiga: ein eigener Rechner mit 65C816-Prozessor, eigenen Chips für Grafik, Sprites, Klang, Copper und Blitter, mit Microsoft BASIC und 16 MB Speicher. Kein Emulator, sondern Schaltung im FPGA des MiSTer – entworfen, gebaut und auf echter Hardware abgenommen.

Läuft auf echter HardwareEtappe 9 in ArbeitCore kostenlos · Open Source
Einschaltbild des MERIDIAN 816: **** MERIDIAN 816 ****, Farbbalken mit 16 Farben, 65C816 / 8 MHz / 16 MB RAM / KERN 0.9, 47102 BYTES FREE, MERIDIAN 816 BASIC V1.1, COPYRIGHT 1978 MICROSOFT, READY.
MERIDIAN 816
Einschaltbild auf dem MiSTer, abgegriffen über die Capture-Karte
65C816 · 8 MHz◆16 MB◆256 aus 4096 Farben◆32 Sprites◆4 Synth + 4 Samples◆Copper◆Blitter◆Microsoft BASIC

Die Idee / ein Gedankenexperiment

Zwischen zwei Welten.

SYS 816

Der C64 kam 1982, der Amiga 1985. Dazwischen liegt eine Lücke, die nie gefüllt wurde: ein Heimcomputer, der sich noch anfühlt wie ein C64 – einschalten, READY., losprogrammieren –, aber schon kann, was den Amiga berühmt gemacht hat. Genau diesen Rechner bauen wir.

Der Name ist Programm: Ein Meridian ist die Linie zwischen zwei Hälften. Gebaut wird er als Core für den MiSTer, eine offene FPGA-Plattform, auf der alte Rechner nicht emuliert, sondern als Schaltung nachgebildet werden. Nur gibt es beim MERIDIAN kein Original zum Nachbilden – jeder Chip ist neu entworfen.

Idee und Abnahme auf der Hardware kommen von Marcel, Entwurf, Code und Tests von Claude, einer KI von Anthropic. Jede Etappe steht im Bautagebuch – mit allen Entscheidungen, Umwegen und Fehlern.

Eckdaten im Vergleich
C64MERIDIAN 816Amiga 500
CPU6510, 1 MHz65C816, 8 MHz68000, 7 MHz
Speicher64 KB16 MB: 256 KB Chip-RAM + 15,7 MB Zusatzspeicher512 KB
Farben16 feste256 aus 409632 aus 4096
GrafikText, 2 Bitmap-Modi2 Ebenen: Text 40/80, Kacheln mit Scrolling, Bitmap mit 16 oder 256 FarbenBitplanes
Sprites832 × 16×16 (oder 32×32), 16 Farben, keine Grenze pro Zeile8
SpezialRaster-IRQCopper, Blitter, Raster-IRQCopper, Blitter
TonSID, 3 Stimmen4 Synthesestimmen + 4 Samplekanäle, StereoPaula, 4 Samplekanäle
BASICMicrosoft V2Microsoft 1.1 + Befehle für Grafik und KlangAmigaBASIC

Die Chips / deutsche Namen, eigene Logik

Eine CPU und acht Chips.

$C000–$C8FF

Wie Commodore damals kauft MERIDIAN nur die CPU zu – einen bewährten, freien 65C816-Kern. Alles drumherum ist Eigenbau, und jeder Chip trägt einen deutschen Namen, der verrät, was er tut.

P65C816

Prozessor

8 MHz · 16-Bit-Register · 16 MB

Die CPU aus Super Nintendo und Apple IIGS: 16-Bit-Register, 24-Bit-Adressen, und sie versteht auch 6502-Code. Damit ist der MERIDIAN ein 16-Bit-Rechner mit 8-Bit-Datenbus, der auf Wunsch zum 6502 wird – so läuft auch das BASIC. Der Kern stammt aus der MiSTer-Gemeinschaft – zwei Übersetzungsfehler darin haben wir unterwegs gefunden und behoben.

PINSEL

Grafik · malt

$C000 · 2 Ebenen · 256 aus 4096

Zwei Ebenen übereinander, jede wahlweise Text mit 40 oder 80 Zeichen, Kacheln mit pixelweisem Scrolling oder eine Bitmap mit 320 × 240 Punkten in 16 oder 256 Farben. Auf der vorderen Ebene ist Farbe 0 durchsichtig: Text über Bildern, Parallaxe aus zwei Kachelebenen. Weil PINSEL einen eigenen Speicheranschluss hat, wartet die CPU nie auf die Grafik.

KOBOLD

Sprites · spukt herum

$C300 · 32 Sprites · keine Zeilengrenze

32 Sprites mit 16 × 16 Punkten oder doppelt groß, je 16 Farben aus eigener Palettenbank, spiegelbar, vor oder hinter der vorderen Ebene, mit Kollisionserkennung. Alle 32 dürfen auf derselben Zeile stehen – der C64 schaffte acht. Möglich macht das ein eigener Musterspeicher, der eine ganze Spritezeile in einem Takt liefert.

ORGEL

Klang · zwei Seelen

$C500 · 4 Synth + 4 Samples · Stereo

Die SID-Seele: vier Synthesestimmen mit Dreieck, Sägezahn, Puls und Rauschen, Ringmodulation, Sync, Hüllkurven nach den Zeittabellen des SID und ein Filter mit Resonanz – die Register sogar in SID-Reihenfolge. Die Paula-Seele: vier Samplekanäle mit 8 Bit und Schleifen. Jede Stimme hat ihre eigene Lautstärke und ihren Platz im Stereobild.

LOTSE

Copper · fährt mit

$C700 · 6 Befehle · pixelgenau

Ein Lotse fährt mit und sagt im richtigen Moment, was zu tun ist. LOTSE liest eine Befehlsliste, wartet auf eine Position des Elektronenstrahls und setzt dann Register: Farben, Ebenen, Scrolling, Sprites, sogar Klang. So entstehen Farbverläufe, geteilte Bildschirme und wehende Logos, ohne dass die CPU einen Finger rührt.

KRAN

Blitter · hebt Lasten

$C600 · füllt 17,6 MB/s · kopiert 8 MB/s

KRAN kopiert und füllt Rechtecke im Speicher, auf Wunsch mit Durchsicht für Spielfiguren. Er arbeitet ganze Auftragslisten ab, während die CPU etwas anderes tut. Mit Etappe 9a erreicht er auch den Zusatzspeicher, in der Simulation läuft das schon – der Blitter des Amiga kam an dessen Fast-RAM nie heran.

PFORTE

Ein-/Ausgabe · das Tor

$C100 · Tastatur · 2 Joysticks · 2 Timer

Ein Tastaturpuffer für 16 Ereignisse mit deutschem Layout (PC oder Mac), zwei Joysticks mit bis zu sechs Knöpfen, zwei Timer im Mikrosekundentakt und eine durchlaufende Uhr. Lesen hat hier bewusst keine Nebenwirkung, denn der 65816 liest manche Adressen „blind“ – sonst gingen Tasten verloren.

BOTE

Programmlader · bringt

$C200 · Menü oder Netz · Fernstart

BOTE lädt Programme aus dem MiSTer-Menü – oder direkt vom Entwicklungsrechner übers Netz: Der schreibt in ein Postfach im Speicher des MiSTer, BOTE kopiert das Programm per DMA und startet es. Vom Befehl am Mac bis zum laufenden Programm vergeht knapp eine Sekunde.

ZUSATZ

Zusatzspeicher

Bänke $04–$FE · 15,7 MB SDRAM

ZUSATZ steuert das SDRAM-Modul des MiSTer mit 48 MHz und blendet 15,7 MB in den Adressraum ein. Schreiben kostet keine Zeit, Lesen einen Wartezyklus. Das größte Rätsel unterwegs: Bei den MiSTer-Modulen laufen die Byte-Masken über Adressleitungen.

Platine / so hängt alles zusammen

Das virtuelle Mainboard.

REV 8

Eine echte Platine hat der MERIDIAN nicht – alles steckt als Schaltung im FPGA des MiSTer. Gezeichnet sähe sie so aus:

Das virtuelle Mainboard des MERIDIAN 816Die CPU P65C816 hängt am Systembus, zusammen mit Kern- und BASIC-ROM und den Registern aller Chips: PFORTE, BOTE, LOTSE, ORGEL, KRAN und PINSEL mit KOBOLD. Die CPU erreicht das Chip-RAM über den Speicherverwalter (Port A); LOTSE, ORGEL und KRAN bekommen dort per DMA die freien Takte. PINSEL liest das Chip-RAM über einen eigenen Port B. ZUSATZ verbindet CPU und KRAN mit 128 MB SDRAM. Unten liefert der MiSTer-Rahmen Tastatur, Joysticks und Programme und gibt Bild und Ton aus.MERIDIAN 816 · HAUPTPLATINE · REV 8 · 2026RETRO-MODERNSYSTEMBUSPORT ADMAPORT BDMA (9a)Tasten, JoysticksProgrammeTon (Stereo)BildTAKT24 MHz System12 MHz Bild48 MHz SDRAMPLLKERN-ROM12 KB · $00:D000BASIC-ROM16 KB · $FF:0000P65C816CPU · 8 MHz16-Bit-Register24-Bit-Adressen, 16 MBwie im SNES und Apple IIGSVERWALTERSpeicherzugriffeCPU zuerst, nie gebremstfreie Takte für DMALOTSE › ORGEL › KRANCHIP-RAM256 KB im FPGABänke $00–$03zwei AnschlüssePort A: CPU · Port B: GrafikPFORTEEin-/AusgabeTimer, µs-Uhr$C100BOTEProgrammladerMenü + Netz$C200LOTSECopperfährt mit dem Strahl$C700ORGELKlang4 Synth + 4 Sample$C500KRANBlitterkopieren, füllen$C600PINSELGrafik2 Ebenen$C000KOBOLD32 Sprites16 KB eigen$C300ZUSATZSDRAM-Steuerung, 48 MHzSDRAM 128 MB15,7 MB adressierbarMiSTer-RAHMENDE10-Nano mit ARM-Linux: USB · Menü und SD-Karte · Netz (DDR3-Postfach) · HDMI/VGA · Ton

Die CPU wird nie gebremst.

Ein Buszyklus der CPU dauert drei Systemtakte. Das RAM braucht sie davon nur in einem – zum Lesen im zweiten, zum Schreiben im dritten. Die übrigen Takte verteilt der Speicherverwalter an LOTSE, ORGEL und KRAN, in dieser Reihenfolge.

Grafik mit eigenem Eingang.

PINSEL liest das Chip-RAM über einen zweiten Anschluss. Während eine Zeile auf dem Bildschirm erscheint, malt er schon die nächste in einen Zeilenpuffer. Beim C64 musste die CPU warten, wenn die Grafik den Bus brauchte („Badlines“) – hier nie.

24 MHz im Takt.

Aus einem Systemtakt von 24 MHz bekommt die CPU jeden dritten Takt (8 MHz), der Grafikchip jeden zweiten (12 MHz Bildpunkte, 640 × 240 sichtbar, 60 oder 50 Hz). Warum nicht 48 MHz? Die längste Rechnung der CPU-Logik braucht rund 26 ns – bei 48 MHz blieben nur 20,8.

BASIC / Microsofts Original von 1978

Einschalten. READY. Losprogrammieren.

47102 BYTES FREE

Der MERIDIAN startet, wie ein Heimcomputer starten muss: in ein BASIC. Kein Nachbau, sondern Microsoft BASIC M6502 1.1 aus dem Originalquelltext, den Microsoft 2025 unter MIT-Lizenz freigegeben hat – derselbe Stammbaum wie das BASIC von PET, Apple II und C64.

Der Haken: Der Quelltext ist für MACRO-10 geschrieben, den Assembler eines PDP-10-Großrechners. Den gibt es nicht mehr. Also entstand ein Übersetzer, der Microsofts Code in heutige Assembler-Schreibweise umsetzt – samt Oktalzahlen und Makros von damals. Alles Übrige bleibt Microsofts Code. Im ROM steckt sogar noch der versteckte Gruß „WRITTEN BY WEILAND & GATES“.

BASIC läuft im 6502-Modus des 65816 – mit 8 MHz statt 1 MHz. Und es hat mehr Platz als beim C64: 47 102 Bytes für Programme (C64: 38 911), weil Programm und Variablen in einer eigenen Speicherbank liegen.

Derselbe BASIC-Code auf beiden Rechnern
C64MERIDIAN
FOR I=1 TO 1000:NEXT1,03 s0,12–0,13 s
300 × SIN(I)8,9 s1,02 s

PROGRAMM // REGENBOGEN // 11 ZEILEN

10 rem *** regenbogen - meridian 816 basic ***
20 cls:grafik 1
30 for x=0 to 319 step 2
40 linie 160,239,x,0,16+x*.75
50 klang 1,200+x*2,1:warte 1
60 next:klang 1,0
70 for a=0 to 6.29 step .01
80 punkt 160+120*sin(a*3),110+90*cos(a*2),1
90 next
100 klang 1,523,1:klang 2,659,1:klang 3,784,1
110 warte 90:stille
REGENBOGEN 160 Linien im Farbkreis, zu jeder ein Ton, dann eine Lissajous-Figur und ein C-Dur-Akkord. Bild aus der Simulation, Ton von der Hardware.
Die neuen Wörter im MERIDIAN BASIC
GRAFIK 1 / GRAFIK 0Bitmap 320 × 240 mit 256 Farben vor dem Text an und löschen / aus
PUNKT x,y,f · LINIE x1,y1,x2,y2,fzeichnen – Linien zieht der Kern in schnellem 16-Bit-Code
PALETTE n,r,g,beine der 256 Farben neu mischen; 16 bis 255 sind ab Start ein Farbkreis
KLANG s,hz,w · STILLETon auf einer der vier Synthesestimmen: Frequenz in Hz, Dreieck, Sägezahn, Puls oder Rauschen
CLS · FARBE v,h · MODUS 80Bildschirm löschen, Farben, 40 oder 80 Zeichen
WARTE nn Bilder warten (1/60 s)
SAVE · LOADProgramm in den Zusatzspeicher und zurück
PEEK · POKE · WAITmit 24-Bit-Adressen: POKE 65536*4,123 schreibt in den Zusatzspeicher
MONITORin den Maschinensprache-Monitor, zurück mit BASIC

Ein Wort musste umbenannt werden: Der Ton-Befehl hieß zuerst TON. Microsofts BASIC hätte FOR I=1 TON aber als TO N gelesen – deshalb heißt er KLANG.

Bautagebuch / 3. und 4. Oktober 2026

In acht Etappen zum Heimcomputer.

LOG

Vom ersten READY. bis zum BASIC mit 16 MB vergingen zwei Tage. Jede Etappe lief erst in der Simulation, dann auf dem MiSTer, abgenommen über die Capture-Karte. Für die Tests tippt Claude sogar selbst: über eine virtuelle USB-Tastatur, die ein kleines Skript auf dem MiSTer anlegt.

  1. 01

    3. Oktober

    „READY.“ – CPU, RAM, ROM, Textmodus

    Der freie 65C816-Kern, 128 KB RAM, ein eigener Zeichensatz mit Umlauten und ein Kern-ROM in Assembler. Der erste Start in der Simulation gelang auf Anhieb – nur der Cursor blinkte nicht.

    Was schiefging

    Nach dem Befehl WAI schlief die CPU für immer ein. Schuld war ein Übersetzungsfehler im Verilog-Kern: Aus IRQ_N = '0' war IRQ_N == 1 geworden. Und beim Takt war erst 48 MHz geplant – gemessen braucht die CPU-Logik aber rund 26 ns, 48 MHz erlauben nur 20,8. Also 24 MHz.

  2. 02

    3. Oktober

    Tastatur, Bildschirmeditor, Monitor

    Deutsches Layout für PC- und Mac-Tastaturen, ein Bildschirmeditor wie beim C64, ein Maschinensprache-Monitor mit deutscher Hilfe und eine feste Sprungtabelle für eigene Programme.

    Was schiefging

    Der Cursor-Interrupt benutzte dieselben Hilfsvariablen wie der Editor – ein Fehler, der nur ab und zu zugeschlagen hätte. Beim Durchlesen gefunden, bevor er passierte. Und die erste Testtastatur der Simulation tippte Y und Z nach US-Layout: Das ROM hatte recht, die Simulation nicht.

  3. 03

    3. Oktober

    Programme laden, Timer, Rasterzeile

    BOTE lädt Programme aus dem Menü oder übers Netz und startet sie per NMI. Das erste Programm: RASTERBALKEN, mit einer Stoppuhr im Dezimalmodus.

    Was schiefging

    Beim zweiten Senden blieb der Neustart aus. Ein NMI ging verloren, wenn er kurz vor einem Befehlsende kam – der zweite Übersetzungsfehler im CPU-Kern. Die Simulation bekam einen Test „zweimal senden“, seitdem steht „FERNSTART“ zweimal auf dem Schirm.

  4. 04

    3. Oktober

    Grafik: zwei Ebenen, Kacheln, 256 Farben

    Text, Kacheln mit Scrolling und Bitmaps auf zwei Ebenen. Dazu ein Synthwave-Bild und eine Landschaft als Parallaxe – alles per Skript erzeugt, keine fremden Bilder.

    Was schiefging

    Quartus hatte das Chip-RAM doppelt angelegt, wegen einer Kleinigkeit beim Lesen während des Schreibens. Richtig beschrieben passt es direkt in die Speicherblöcke des FPGA – und aus 128 KB wurden 256 KB.

  5. 05

    3. Oktober

    Sprites: KOBOLD

    32 Sprites ohne Zeilengrenze dank eigenem Musterspeicher – und ein kleines Spiel mit UFO, Kugeln und Kollisionen.

    Was schiefging

    Zuerst zog jedes Sprite senkrechte Streifen hinter sich her: Eine 2-Bit-Zeilenmarke passte alle vier Zeilen wieder. Die Lösung ist ein Register mit einem Bit pro Punkt, das zu Zeilenbeginn in einem einzigen Takt gelöscht wird.

  6. 06

    3. Oktober

    Klang: ORGEL

    SID- und Paula-Seele in einem Chip. Die Musik rechnet ein kleiner Tracker in Python vorab aus, der MERIDIAN spielt sie mit 30 Zeilen Assembler ab. Hardware und Simulation klingen gleich – nachgemessen.

    Was schiefging

    Auf der Hardware klang ein Ton um gut ein Prozent zu hoch. Der Takt? Gegenprobe über fünf Minuten: 8 ppm Abweichung, alles exakt. Schuld war die Aufnahme, die ganze Blöcke verlor. Seitdem gilt: erst der Messkette misstrauen, dann dem Chip.

  7. 07

    3. Oktober

    Copper und Blitter: LOTSE und KRAN

    Dazu ein Speicherverwalter, der die freien Takte verteilt. Das Vorführprogramm BALLETT schafft 248 Bälle in 11,2 ms je Bild – bei 60 Bildern pro Sekunde.

    Was schiefging

    Marcel hörte die Kick nicht. Zu Recht: 96 % ihrer Energie lagen unter 100 Hz, wo kleine Lautsprecher nichts mehr wiedergeben. Abhilfe: eine neue Kick, etwas Sättigung und ein Bass, der bei jedem Schlag kurz Platz macht.

  8. 08

    3. und 4. Oktober

    16 MB Speicher und BASIC

    ZUSATZ bindet das SDRAM ein, Microsoft BASIC 1.1 bekommt eigene Befehle. Am Ende meldet der MERIDIAN 47 102 freie Bytes – mehr als der C64.

    Was schiefging

    Im ersten Speichertest landete jedes geschriebene Byte in beiden Hälften eines 16-Bit-Worts: 99,6 % Fehler. Die SDRAM-Module des MiSTer führen die Byte-Masken über die Adressleitungen A11 und A12. Danach: 16 MB ohne einen einzigen Fehler.

  9. 09

    in Arbeit

    Der Zusatzspeicher für alle – und BASIC lernt die Chips

    KRAN schaufelt bereits zwischen Zusatzspeicher und Chip-RAM, in der Simulation fehlerfrei. Als Nächstes lädt BOTE direkt ins SDRAM, und das eigentliche Ziel folgt: Sprites, Samples, Copper und Blitter auch aus BASIC – dazu KOPIERE für große Blöcke.

Datenblatt / für Neugierige

Die Zahlen.

M D000
Speicherkarte aus Sicht der CPU
$00:0000Zeropage und Stapel
$00:0400Bildschirmspeicher – eine Verbeugung vor dem C64
$00:1800Zeichensatz
$00:2000frei für Programme
$00:C000die Chips: PINSEL, PFORTE, BOTE, KOBOLD, ORGEL, KRAN, LOTSE, SYSTEM
$00:D000Kern-ROM mit Editor, Monitor und Sprungtabelle
$01–$03weiteres Chip-RAM: BASIC-Programme, Grafik, Samples
$04–$FEZusatzspeicher, 251 Bänke zu 64 KB
$FF:0000BASIC-ROM
FPGA-Logik
15 533 von 41 910 ALMs (37 %)
Block-RAM
2,91 Mbit (51 %)
Multiplizierer (DSP)
72 von 112 – vor allem für die ORGEL
Spielraum im 24-MHz-Takt
13,2 ns
Bild
640 × 240 sichtbar, 15,71 kHz, 59,95 Hz (NTSC) oder 50,3 Hz (PAL)
KRAN
füllt 17,6 MB/s, kopiert 8 MB/s
Tonhöhe auf der Hardware
488,277 Hz bei erwarteten 488,281 Hz
Ein Durchlauf in Quartus
knapp 9 Minuten
Der eigene Zeichensatz des MERIDIAN: Groß- und Kleinbuchstaben, Ziffern, Satzzeichen, Umlaute, Linien und Blockgrafik
ZEICHENSATZ selbst entworfen: Ober- und Unterlängen, Ä Ö Ü ä ö ü ß, Linien und Blöcke

Mitmachen / Programme und Spiele gesucht

Ein Rechner braucht Software.

Ein Heimcomputer lebt von dem, was Menschen dafür schreiben. Genau das wünschen wir uns für den MERIDIAN: Spiele, Demos, Musik, Werkzeuge – oder BASIC-Programme zum Abtippen, wie früher aus der Zeitschrift.

Kostenlos, im Geist des MiSTer.

Der Core erscheint kostenlos und mit offenem Quelltext unter der GPL-3, wie fast alles im MiSTer-Projekt – in einem öffentlichen Git-Repository. Ein Termin steht noch nicht fest; er folgt hier und auf dem Kanal.

Was du brauchst

Einen MiSTer.

Ein DE10-Nano mit SDRAM-Modul, so wie ihn die meisten MiSTer-Besitzer ohnehin haben. Das Modul liefert den Zusatzspeicher.

Womit man programmiert

BASIC oder Assembler.

BASIC direkt am Gerät, mit Befehlen für Grafik und Klang. Oder 65C816-Assembler am PC oder Mac, etwa mit 64tass, und das Ergebnis als MER-Datei über das MiSTer-Menü laden. Eine feste Sprungtabelle im Kern hilft beim Einstieg, ein Interrupt-Haken bei $0300 grüßt das $0314 des C64.

Was mitkommt

Quelltext, wie im MiSTer üblich.

Der vollständige Quelltext des Cores in einem öffentlichen Git-Repository, samt Beschreibung der Chipregister. Dazu die Vorführprogramme als Quelltext – GRAFIK, KOBOLDE, ORGEL, BALLETT, REGENBOGEN und die anderen – zum Lernen, Abwandeln und Weiterbauen.

Danke & Quellen

MERIDIAN 816 ist ein privates Hobbyprojekt und steht in keiner Verbindung zum MiSTer-Projekt, zu Microsoft, Commodore oder Amiga. Alle Marken gehören ihren jeweiligen Inhabern.