ESP32 Vectrex CRT – Vektorspiele auf dem Mini-Monitor, emuliert und gerastert

![]()
Es ist schon eine Weile her, dass ich euch mit einem größeren Retro-Hardwareprojekt mitgenommen habe. Diesmal geht es um ein Gerät, das damals schon ein Außenseiter war – und genau deshalb für Bastler und Technikgeschichtler so reizvoll bleibt: die VECTREX.
Wer in den frühen 1980er Jahren Spielekonsolen kannte, dachte an Rasterbilder am Fernseher – Zeile für Zeile, wie beim Fernsehen. Die Vectrex machte etwas anderes: Sie zeichnete Vektoren auf einen eigenen monochromen CRT (Röhrenbildschirm) – Linien und Punkte, wie in den Arcade-Automaten Asteroids. Kein „angeschlossenes Fernsehgerät“, sondern ein Tischgerät mit eingebautem Monitor, Controllern und Cartridges.
Meine Projektidee war: dieses Feeling wieder greifbar zu machen – nicht als Museumsstück hinter Glas, sondern als nachbaubare Platine mit ESP32, SD-Karte, Analog-Joystick, Tastern, Audioverstärker und einem kleinen Monochrom-CRT, den man direkt mit einem Composite-/FBAS-Signal ansteuern kann. Die Spannungsversorgung kommt aus USB PD (Power Delivery). Die Spiele? Original-Cartridges als .bin-Images von der SD-Karte.
Ein Technik-Hinweis vorab: Das Original zeichnet echte Vektoren auf den CRT (Ablenkung des Elektronenstrahls in der Bildröhre). Das ESP32-Projekt emuliert die Vectrex (CPU, VIA, Sound-Register, Vektorliste), rastert diese Vektoren in einen Framebuffer und erzeugt daraus ein PAL-Composite-/FBAS-Signal. Der Mini-Monitor bekommt also ein klassisches Videobild – nicht die Analog-Ablenkung der Original-Vectrex. Der Look bleibt „vektorig“, die Signalstrecke ist aber Raster-Composite. (damit erspare ich mir, den Monitor umzubauen und kann ihn belassen, wie er ist)
noch ein weiterer Hinweis: alle Angaben zu Dateien und deren Inhalten beziehen sich auf den Inhalt im Projektordner den ich git veröffentlichen werde. 
ESP32-Vectrex-Platine mit Mini-CRT
Wer mit dem Begriff „Vectrex“ nichts anfangen kann – hier ein paar Infos:
Anfang der 1980er Jahre sah ein Spielautomat zu Hause meistens gleich aus: eine Konsole, ein Kabel in den Antenneneingang, und auf dem Fernseher ein Bild aus lauter Zeilen. Atari hatte den 2600er schon seit Jahren im Wohnzimmer, der Commodore 64 stand kurz vor dem großen Auftritt. In diese Landschaft kam 1982 ein Gerät, das sich weigerte, wie ein Fernseher zu denken.
Die Vectrex wurde von Smith Engineering entwickelt und ab Oktober 1982 in Nordamerika von General Consumer Electronics (GCE) verkauft; 1983 folgten Europa und Japan. Später übernahm Milton Bradley die Vermarktung. In Japan erschien die Konsole unter dem Bandai-Namen Kōsokusen („Lichtgeschwindigkeitsschiff“).
Was man für das Geld bekam, war kein Zusatzgerät für den Fernseher. Die Vectrex ist ein kompletter Heim-Arcade-Automat. Schwarzes Gehäuse, hochkant eingebaute Schwarz-Weiß-Bildröhre mit rund neun Zoll, also etwa 24 cm, und vorne eine Klappe, die gleichzeitig der Controller ist. Diesen Controller kann man ausklappen und auch abnehmen. Vier Tasten, ein analoger Stick. Netzstecker rein, und es kann losgehen. Ein eigenes Spiel ist schon eingebaut: Mine Storm, ein Verwandter von Asteroids. Wer mehr wollte, steckte ein ROM-Modul in den Schacht an der rechten Seite. Die Liste der Originaltitel ist überschaubar. Dafür gibt es bis heute eine sehr lebendige Homebrew-Szene. Wer tiefer in die Hardware einsteigen will, findet auf vectrex.de nach wie vor eine Fundgrube. Den Blick ins aufgeschraubte Gerät habe ich im Beitrag Die Vectrex festgehalten, das selbstgebaute Modul im Beitrag
Spielemodul für die Vectrex selbstgemacht.
Die Besonderheiten die die Vectrex von anderen Spielekonsolen der Zeit unterscheidet:
- ein integrierter monochromer 9″ CRT vertikal angeordnet (also ein Röhrenbildschirm) – kein Anschluss an den Wohnzimmerfernseher nötig
- der Inhalt wurde als Vektor-Grafik generiert und angezeigt – nicht als Rasterzeilen wie bei PAL oder NTSC Fernsehern.
- als CPU arbeitet darin ein Motorola 68A09 mit ca. 1,5 MHz – die Spiele werden von Cartridge-ROMs geladen
- Sound über den AY-3-8912-Chip
- Beigefügte Farbfolien (Overlays) vor dem Bildschirm, weil der Monitor schwarzweiß war
- Eingebautes Spiel: Mine Storm (Asteroids-ähnlich)
Es gab dazu auch noch Zubehör wie 3D Imager und Light Pen, etc.
Die kommerzielle Geschichte endete abrupt: Mitten im Video Game Crash 1983 stockten die Verkäufe; im Februar 1984 stellte Milton Bradley die Vectrex ein. Technisch und spielerisch gilt sie unter Retrofans bis heute als Juwel – gerade weil sie so anders war als Atari VCS, Intellivision & Co.
Original-Vectrex (Foto aus eigener Sammlung)
Die Projektidee
Nach dem ESP32 Video Pong-Projekt (PAL-Composite aus dem ESP32, auf einem eigenen Board mit einwenig Analog-Feeling) lag der nächste Schritt nahe: nicht nur ein Spiel, sondern eine ganze Konsole zu bauen – und zwar eine, die historisch Vektoren „gelebt“ hat.
Also war das Ziel, auf Basis eines ESP32 – Entwicklerboards etwas aufzubauen. Ich dachte mir in etwa die folgenden Schritte aus:
- eine eigene Platine layouten und fertigen
- ESP32 als Rechenknecht (mit einer Firmware die Emulation, Video + Audio , SD-Kartenansteuerung übernimmt)
- Mini-CRT monochrom mit Composite/FBAS speisen (hier gibt es günstige mini 4″ Flat-CRT Module mit „Flachbildröhre)
- USB-PD für Monitor- und Logikversorgung
- microSD-Kartenslot zum lesen von Cards Vectrex-ROM-files als .bin Datei
- Analog-Joystick + Buttons wie am Original-Controller
- Audio über Verstärker und Lautsprecher/Kopfhörer
Die Hardware: der erste Boardenwurf „esp_vectrex_crt_v1.0“
Für dieses Projekt habe ich eine Platine gezeichnet, die von den Abmessungen inetwa zum MiniCrt-Monitor passt und alle wichtigen Komponenten vereint. Auf dem Board finden sich unter anderem:
| Bauteil / Funktion | Rolle |
| ESP32-WROOM-32 | Emulation, Composite-Video (I2S-DAC), Audio, SD, Eingaben |
| microSD-Slot | Cartridge-Images (.bin) in Root und/oder /gamerom |
| Analog-Joystick (2 Achsen) | ADC auf GPIO35 / GPIO34 |
| Taster | Vier Buttons für die Vectrex-Steuerung + Soft-Reset |
| LM386 | einfacher Audioverstärker für den ESP32-Tonausgang |
| Video-Pfad | Composite/FBAS zum Mini-CRT (Anschluss „VIDEO“) |
| ZY12PDN (USB-C PD Trigger) | Verhandelt USB-PD-Spannungen (u. a. 5 / 9 / 12 / 15 / 20 V) |
| 78xx / 78TV-Regler-Pfad | Ableitung stabiler Logikspannungen (u. a. +5 V / +3,3 V) aus der PD-Versorgung; Monitorseite mit höherer Spannung (im Schaltplan u. a. +12 V) |
Kurz gesagt: ein USB-Netzteil mit USB-Kabel (USB-C PowerDelivery) speist Logik und Monitor – somit ist kein separates 12‑V-Netzteil notwendig und alles wird über USB-C versorgt.
Schaltplan zur Platine
Mit KiCad habe ich den Schaltplan für das Board erstellt. Der Schaltplan der „esp_vectrex_crt_v1.0“ – Ausschnitt Versorgung (ZY12PDN), ESP32, Video, Audio (LM386), SD, Joystick. Daraus habe ich dann ein Layout erstellt, das in den Abmessungen in etwa zu dem MiniCrt Monitor passen sollte. Es soll bei Bedarf aber auch in ein selber gebasteltetes Gehäuse (stand-alone-Gehäuse) eingebaut werden können. (Stichwort: 3D Druck – ist heute ja für jedermann kein Problem mehr) Die Patine kann natürlich auch für andere ESP32 – Composit Video Projekte verwendet werden…
Leiterplatten-Layout – Platzierung von ESP32, SD-Slot, Joystick und Anschlüssen.
Und so sieht die Platine in der 3D-Vorschau aus
Zur zentralen Recheneinheit, dem ESP32
Ich nutze in dem Projekt einen ESP32 am Wroom Board bzw. NodeMCU. Der ist zwar auch schon in die Jahre gekommen, geht sich für die Realisierung in dem Projekt aber gerade noch aus. Im folgenden Abschnitt ist eine Übersicht der verwendeten IO´s des ESP32 zu sehen: (in: include/pins_hw.h sind die Zuordnung angegeben)
| Funktion | GPIO | Bemerkung |
|---|---|---|
| Composite Video (FBAS) | 26 | I2S Built-in DAC2, Bitluni-Pfad |
| Audio (LEDC-Ton) | 27 | über LM386 auf dem Board |
| Joystick X (ADC) | 35 | PIN_POT_P1 (Firmware mappt Achsen getauscht) |
| Joystick Y (ADC) | 34 | PIN_POT_P2 |
| Button 1…4 | 33 / 32 / 14 / 4 | active LOW, Pull-up |
| Soft-Reset | 16 | ca. 400 ms halten → ESP.restart() |
| SD CS / CLK / MISO / MOSI | 5 / 18 / 19 / 23 | SPI |
Die Software: Emulation, Raster und FBAS
Den Emulator habe ich nicht neu erfunden. Das Vorbild ist vecx, der seit vielen Jahren geläufige Vectrex-Emulator. Eine ESP32-Fassung davon gibt es als ESP32TinyVectrex: dort läuft vecx auf einem TTGO-Board mit VGA-Ausgang, ohne PSRAM, dafür mit reduziertem OSD. Für mich war VGA die falsche Richtung. Ich wollte den gelben Stecker, denselben Weg, den ich schon beim Composite-Tetris auf dem ESP32 benutzt habe.
Deshalb ist vom TinyVectrex-Stamm vor allem der Rechenkern geblieben: die 6809, der VIA, die Nachbildung der Vektor-Hardware. Der VGA-Teil von FabGL ist draußen. Gezeichnet wird in einen eigenen Bildspeicher, ausgegeben mit der Composite-Bibliothek von bitluni, angepasst an den PAL-Pfad aus dem Tetris-Projekt. Übersetzt wird das Ganze mit PlatformIO, Board esp32dev, ein klassisches ESP32-WROOM-Modul mit 240 MHz. WLAN ist aus. Der Funk wird hier nicht gebraucht, und der Rechenkern soll bei der vollen Taktfrequenz bleiben.
Was der ESP32 dabei wirklich tut, ist leicht gesagt und im Detail zäh. In Scheiben von 20 Millisekunden bekommt die nachgebildete 6809 so viele Takte, wie das Original in dieser Zeit ausgeführt hätte. Sie schreibt in den VIA, der VIA füttert die nachgebildete Analogelektronik, und am Ende einer Szene liegt eine Liste von Linien vor: Anfangspunkt, Endpunkt. Diese Liste wird in den Bildspeicher gezeichnet. Danach werden die Taster und die Potis gelesen, und aus dem Klangchip wird eine Tonhöhe abgeleitet.
Boot-Ablauf (vereinfacht)
1. LittleFS (Fallback-ROM möglich)
2. SD bootstrap: Karte mounten, `.bin`-Liste scannen, wieder unmounten (Heap schonen)
3. Framebuffer anlegen (**320×200**, Doppelpuffer)
4. CompositeOutput starten (PAL, logisch half-res 640×400 Scanout)
5. Splash + Beeps
6. ROM-Menü auf dem CRT (Joystick wählt, Button lädt)
7. Emulator-Loop (`vecx`)
Von der Vektorliste zum Fernsehbild
Hier liegt der Kern – und der Unterschied zum Original:
1. vecx (klassischer Vectrex-Emulator, u. a. über die TinyVectrex-/Hawthorn-Linie) simuliert 6809, VIA und die Vektor-Hardware.
2. Pro Frame entstehen Linien/Punkte in vectors_draw[].
3. osint_render() zeichnet diese Vektoren mit line/dot in den **CompositeGraphics**-Framebuffer (Raster!).
4. Ein FreeRTOS-Task auf Core 0 ruft composite.sendFrameHalfResolution(…) auf und treibt den I2S-DAC – daraus entsteht das PAL-Composite-/FBAS-Signal an GPIO26.
Das ist genau der Trick: Man behält die Vectrex-Logik und den Vektor-Charakter der Spiele, übersetzt aber die Ausgabe in etwas, das ein handelsüblicher (Mini-)CRT mit Composite-Eingang versteht.
SD → ROM → vecx → Vektorliste → Raster-FB → Bitluni Composite → Mini-CRT; Audio LEDC → LM386.

Wenn alles klappt dann bootet die emulierte gerasterte Vectrex
SD-Karten-ROMs
Auf der Karte liegen die Cartridge-Images als .bin – im Root und/oder unter /gamerom.
Das Menü listet die Dateien. Nach der Auswahl wird die Karte kurz wieder gemountet, die ROM in den Cartridge-Puffer gelesen und der Emulator gestartet. (Ohne Karte: Fallback auf LittleFS / Builtin möglich.)
Hinweis Rechtliches:Nur ROMs verwenden, an denen ihr die Rechte habt bzw. die freigegeben sind. Jay Smith / Smith Engineering haben für die Community historisch großzügig Spielraum für nicht-kommerzielle Nutzung originaler Titel eingeräumt – das entbindet nicht von eigener Sorgfaltspflicht.
Audio
Der Emulator pflegt die AY-/Sound-Register; die Firmware erzeugt daraus einen einfachen Ton (LEDC-PWM auf GPIO27), der über den LM386 verstärkt wird. Das ist kein HiFi-AY-Chip-Nachbau – für Beeps, Startmelodien und rudimentäres Game-Audio reicht es völlig, und es funktioniert neben dem I2S-Video (der RTC-DAC-Pfad auf GPIO25 war mit Composite historisch oft „stumm“).
Speicher und Realitätscheck: ESP32 ohne PSRAM
Ein paar ehrliche Bastler-Notizen aus der Firmware-Entwicklung (V1.2.x):
– Der 320×200-Doppelpuffer frisst intern viel Heap-Speicher.
– FAT/SD und I2S-DMA wollen denselben knappen DRAM.
– Deshalb: SD beim Boot scannen und wieder unmounten; zum ROM-Laden Video kurz „parken“ (I2S + Framebuffer freigeben), mounten, lesen, Video wieder hochfahren.
– Ohne PSRAM kein großes ROM-Preload in den RAM – dafür Menü mit allen `.bin` und Laden von der SD.
Das ist der Charme solcher Projekte: Die Theorie ist klar, der Spaß beginnt beim Heap-Accounting – Aber hier hilft mittlerweile die KI 🙂
Verwendete Libraries und Quellverweise (Software)
Besonderer Dank an **bitluni** für die Composite-Arbeit und an die Vectrex-/vecx-Community für die Emulationsgrundlage – ohne Open Source wäre dieses Board nur ein teures Briefbeschwerer-Layout.
| Quelle | Verwendung | Link |
|---|---|---|
| bitluni – ESP32 Composite Video | Grundlage Composite/FBAS über I2S-DAC; Projektseite & Code | Projektseite GitHub |
BitluniComposite (lokal im Repo lib/) |
Angepasste CompositeGraphics / CompositeOutput (PAL, GPIO26, Half-Resolution) | Projektordner lib/BitluniComposite/ |
| vecx / TinyVectrex (ESP32-Port) | Vectrex-Emulation (6809, VIA, Vektoren) | GitHub (bzw. Vorgänger/Ports; lokal unter _deps/ESP32TinyVectrex) |
| Arduino-ESP32 / PlatformIO espressif32 | Framework, SD, SPI, LittleFS, I2S, LEDC | GitHub |
| ESP32vectrex Firmware | Integration: Menü, SD, Composite, Audio, Board-Pins | dieses Projekt (include/, src/, Firmware z. B. V1.2.11) |
Quellen zur Vectrex-Geschichte
1. Wikipedia (EN): Vectrex – Veröffentlichung 1982, GCE / Milton Bradley, Crash 1983, Hardwareüberblick (68A09, AY-3-8912, integrierter CRT, Overlays, 3D Imager)
https://en.wikipedia.org/wiki/Vectrex
2. Darin referenzierte Sekundärquellen zur Entwicklung (Smith Engineering, John Ross, Mini-Arcade-Idee, CES 1982) – bitte bei Übernahme einzelner Zitate die Originalquellen der Wikipedia-Fußnoten prüfen.
3. Community-/Homebrew-Kontext: Freigaben durch Smith Engineering für nicht-kommerzielle Cartridge-Duplikation und Hardware-Entwicklung (historisch dokumentiert u. a. in Wikipedia und Vectrex-Fan-Seiten).
link zum github folgt












