Willkommen auf mikrocontroller.bplaced.net, der Website welche ursprünglich von meinem Bruder Uwe betrieben wurde.
Diese Seiten hier sollen Einsteigern in der Welt der Mikroprozessoren das Leben erleichtern und den Umgang mit der Programmiersprache “C” näherbringen.
Die Librarys vereinfachen das benutzen der Komponenten einer CPU und man hat so mehr Zeit sein eigentliches Projekt zu realisieren.
Leider hat er sich dazu entschieden, seinen Blog nicht weiter zu aktualisieren, was dazu führte, dass zunächst die Website nicht mehr erreichbar war, und danach der Webspace gelöscht wurde;(
Zu meinem bedauern, und wohl auch zum Bedauern seiner Fan-Gemeinde ist damit eine tolle Dokumentation zum Thema Mikrocontroller STM32 verloren gegangen.
Deshalb habe ich mich dazu entschlossen, sein Werk hier wieder online zu stellen.
Eine Historie der neuesten Aktivitäten findet ihr hier , und die aktuelle Sitemap gibt es hier.
VersaTerm: Ein vielseitiges DIY-Serielles Terminal
Das VersaTerm, entwickelt von David Hansel auf GitHub [1], verbindet Retro-Computing mit moderner Technologie. Es ist ein flexibles und einfach zu bauendes DIY-Serielles Teminal. Dieser Artikel [2] beschreibt die Highlights, Einschränkungen, den Bau und die Nutzung des VersaTerm.
VersaTerm v1.2 Features
Highlights des VersaTerm
Das VersaTerm ist ideal für Retro-Computing-Enthusiasten, Mikrocontroller-Fans und DIY-Elektronikbegeisterte. Die wichtigsten Merkmale sind:
Sofort einsatzbereit: Kein Warten auf ein Betriebssystem, kein kompliziertes Herunterfahren – das Terminal ist sofort ein- und ausschaltbar.
Native Videoausgabe: Unterstützt HDMI und VGA ohne Konvertierung.
Tastaturunterstützung: Funktioniert mit PS/2- und USB-Tastaturen, einschließlich Tastaturen mit integrierten USB-Hubs.
Serielle Schnittstellen: Bietet RS232- und TTL-Signale, umschaltbar zwischen 3,3 V und 5 V.
Breites Baudratenspektrum: Von 50 bis 921.600 Baud, mit Voreinstellungen und benutzerdefinierten Optionen.
Flusskontrolle: Unterstützt Hardware- (RTS/CTS) und Softwareflusskontrolle (XOn/XOff).
Flexible Stromversorgung: Betrieb über USB oder 7–28 V DC möglich.
Hohe Konfigurierbarkeit: Eigene Schriftarten (Bitmaps) können hochgeladen werden.
VT100-Unterstützung: Alle VT100-Attribute wie Fett, Unterstrichen, Blinken, Inverse, doppelte Breite und Höhe werden unterstützt.
16 ANSI-Farben: Für farbige Darstellungen.
PETSCII-Modus: Unterstützt den PETSCII-Zeichensatz und Steuerzeichen, inklusive einer C64-Schriftart.
DIY-freundlich: Die meisten Lötarbeiten sind durchsteckmontiert, die Firmware wird einfach über USB hochgeladen.
Einschränkungen
Das VersaTerm basiert auf einem Raspberry Pi Pico, einem Mikrocontroller ohne integrierte Grafikfähigkeiten. Dennoch erzeugt er Videosignale (siehe PicoDVI und PicoVGA). Die begrenzte Rechenleistung führt zu folgenden Einschränkungen:
Maximale Spaltenanzahl: Nur 80 Spalten pro Zeile, keine Unterstützung für 132 Spalten.
Schriftbreite: Zeichen müssen 8 Pixel breit sein (im Original VT100 waren es 10 Pixel); die Höhe kann zwischen 8 und 16 Pixel liegen.
Farbunterstützung: Nur 16 ANSI-Farben, keine 8-Bit- oder 24-Bit-Farben.
Kein flüssiges Scrollen: Scrollen wird durch verzögertes Scrollen emuliert.
Den VersaTerm bauen
VersaTerm v1.2 bauen
Das VersaTerm ist kein Bausatz, aber der Aufbau ist dank bereitgestellter Ressourcen unkompliziert.
Platinenherstellung: Die Gerber-Datei für die Leiterplatte ist auf GitHub verfügbar: VersaTermGerber.zip [3].
Bauteilbeschaffung: Tipps zur Beschaffung und Montage der Komponenten sind dokumentiert: Component Ordering [4]. Hier in Deutschland bietet es sich an die Komponenten bei Reichelt und Mouser zu beschaffen. Eine entsprechende Bauteile-Liste findet sich weiter unten.
MAX3232-Breakout-Board: Eine Alternative für das sehr teure Transceiver Breakout Board mit dem MAX3232 von SparkFun ist es die Platine bei JLCPCB selbst fertigen zu lassen. Die Gerber-Datei und auch BOM und CPL Dateien sind verfügbar: MAX3232_Breakout_GERBER.zip [5], MAX3232_Breakout_BOM_CPL.zip [6].
Gehäuse: STL-Dateien für den 3D-Druck eines Gehäuses stehen bereit: Enclosure [7]. Zusätzlich werden 4 x M3x22 mm Schrauben und 4 x M3 Muttern benötigt.
Firmware: Die Firmware wird über ein USB-Micro-Kabel hochgeladen, ohne spezielle Hardware: Software [8].
Die Platine lässt sich mit einem einfachen Lötkolben zusammenbauen. Die durchsteckmontierten Bauteile machen den Prozess auch für Hobbyisten mit mäßiger Löt-Erfahrung zugänglich. Der 3D-Druck des Gehäuses verleiht dem Projekt ein professionelles Aussehen.
Bauteile-Liste
Bezeichnung
Komponente
Menge
Lieferant
Lieferanten-Teil
R21, R24
Resistor 100 Ohm
2
Reichelt
1/4W 100
R1, R2, R3, R4, R5, R6, R7, R8
Resistor 270 Ohm
8
Reichelt
1/4W 270
R14
Resistor 390 Ohm
1
Reichelt
1/4W 390
R17, R20, R25, R26
Resistor 470 Ohm
4
Reichelt
1/4W 470
R13, R16, R19, R27, R28
Resistor 1k
5
Reichelt
1/4W 1.0K
R15, R18
Resistor 2.2k
2
Reichelt
1/4W 2.2K
R22
Resistor 4.7k
1
Reichelt
1/4W 4.7K
R9, R10, R11, R12, R23, R29, R30
Resistor 10k
7
Reichelt
1/4W 10K
D1, D2
Diode SMT Schottky
2
Reichelt
LL 5817 SMD
(1N 5817)
D3, D4, D5, D6
Diode Axial 1N4148
5
Reichelt
1N 4148
Q1, Q2, Q3, Q4, Q5, Q6, Q7
MOSFET2N7000
7
Reichelt
2N 7000
C1, C2
Capacitor 10uF
2
Reichelt
AK 100U 16
3.3V/5V Switch
Switch
1
Mouser
612-EG1213
RESET, DEFAULTS
Button
2
Reichelt
TASTER 3305B
REG1
Recom 5V Regulator
1
Reichelt
LME78_05-1.0
SG1
Buzzer
1
Reichelt
AT-1224-TWT-5V-2
Power
Barrel Connector
1
Mouser
490-PJ-002A
Power
USB-B Mini Connector
1
Reichelt
USB BWM
VGA
DB15 Connector
1
Reichelt
HD 15FW
PS/2
PS/2 Connector
1
Reichelt
EB-DIOS M06V
HDMI
HDMI Connector
1
LCSC
C369072
USB
USB-A Connector
1
Reichelt
USB AW
RS232
DB9 Connector
1
Reichelt
D-SUB ST 09US
TTL Serial
Molex Connector Male
1
Mouser
571-6404576
U1
Raspberry Pi Pico
1
Reichelt
RASP PI PICO H
U3
MAX3232 board
1
JLCPCB
–
Header
Header Male 10 Pin
1
Reichelt
ECON SL10G1
Header
Header Female 10 Pin
1
Reichelt
BKL 10120950
Header
Header Male 2 Pin
1
Reichelt
ECON SL2G1
Header
Header Female 2 Pin
1
Reichelt
W+P 153PF-002-1
Header
Header Female 40 Pin
1
Mouser
485-5583
Molex
Molex Housing Female
1
Mouser
1375820-6
Molex
Molex Crimp Pins
6
Mouser
1375819-1
Platine
–
1
JLCPCB
–
Den VersaTerm nutzen
VersaTerm v1.2 im Einsatz
Einstellungsmenü und Konfigurationen
Das Einstellungsmenü wird durch Drücken der F12-Taste geöffnet und mit den Pfeiltasten navigiert. Das Untermenü „Konfigurationen verwalten“ bietet 10 Speicherplätze für verschiedene Einstellungen – ideal für die Nutzung mit mehreren Computern.
Speichern: Die Taste „S“ speichert die aktuellen Einstellungen in einem Slot.
Standard setzen: Die Taste „*“ definiert einen Slot als Standard beim Start.
Benennen: Die Taste „N“ vergibt einen Namen für einen Slot.
Konfigurationen können wie folgt gewechselt werden:
Beim Start oder Reset die Tasten F1–F10 halten, um einen Slot auszuwählen.
Während des Betriebs STRG + F1–F10 drücken, um eine Konfiguration zu laden.
STRG + F12 öffnet ein Schnellwahlmenü mit den Namen der Konfigurationen.
Videoausgabe (HDMI/VGA)
Das VersaTerm unterstützt entweder HDMI- oder VGA-Ausgabe, jedoch nicht gleichzeitig. Beim Start wird automatisch erkannt, ob ein HDMI-Monitor angeschlossen ist (über das „Hot Plug Detect“-Signal). Ist kein HDMI-Monitor vorhanden, schaltet das Terminal auf VGA um. Diese Automatik kann im „Bildschirm“-Einstellungsmenü deaktiviert werden, um den Ausgabetyp festzulegen. Falls ein HDMI-Monitor nicht erkannt wird, kann die HDMI-Ausgabe erzwungen werden:
Eine Tastatur anschließen.
Die RESET- und DEFAULTS-Tasten an der Seite der Platine gedrückt halten.
Die STRG-Taste auf der Tastatur gedrückt halten.
Die RESET-Taste loslassen.
Dadurch werden die Standardeinstellungen geladen, die automatische Erkennung deaktiviert und die HDMI-Ausgabe erzwungen. Sobald ein Bild auf dem Monitor erscheint, können die Einstellungen angepasst, der Ausgabetyp auf HDMI festgelegt und gespeichert werden, sodass HDMI automatisch verwendet wird.
USB-Modus
Der Raspberry Pi Pico verfügt über einen USB-Anschluss, der entweder als Host oder Gerät fungiert. Wird der Pico über das USB-Micro-Kabel mit einem Computer verbunden, erkennt das VersaTerm dies beim Start und betreibt den USB-Anschluss als Gerät. Andernfalls wird der Anschluss als Host betrieben, um eine USB-Tastatur anzuschließen.
Wichtig: Der Pico darf nicht gleichzeitig an einen Computer und eine USB-Tastatur angeschlossen werden. Dies führt zu keinem Schaden, aber der USB-Anschluss funktioniert dann nicht korrekt.
Wird der USB-Anschluss als Gerät verwendet, erkennt der Computer das VersaTerm als USB-CDC-Gerät (seriell). Drei Betriebsmodi können im USB-Einstellungsmenü ausgewählt werden:
Serial: Der USB-Anschluss wird als sekundäre serielle Verbindung behandelt. Eingehende Daten werden wie bei der Hauptschnittstelle verarbeitet, Tastatureingaben werden an beide Schnittstellen gesendet.
Feed-through (Standard): Daten von der Hauptschnittstelle werden an den USB-Anschluss weitergeleitet und umgekehrt. So kann das VersaTerm als USB-zu-Seriell-Wandler genutzt werden.
Feed-through (Terminal deaktiviert): Ähnlich wie der Feed-through-Modus, aber eingehende Daten von der Hauptschnittstelle werden nicht auf dem Terminal angezeigt. Dies ist ideal für die Übertragung binärer Daten ohne Beeinträchtigung der Anzeige.
Zurücksetzen des Terminals
Das Terminal wird durch Drücken der RESET-Taste an der Seite der Platine zurückgesetzt. Bei ungültigen Einstellungen (z. B. HDMI-Ausgabe erzwungen, aber nur ein VGA-Monitor vorhanden) kann die DEFAULTS-Taste (neben RESET) gedrückt gehalten werden, während die RESET-Taste gedrückt und losgelassen wird. Dadurch startet das VersaTerm mit den Standardeinstellungen neu.
Fazit
Das VersaTerm ist ein spannendes Projekt, das Retro-Charme mit moderner Flexibilität verbindet. Die einfache Handhabung, umfangreichen Konfigurationsmöglichkeiten und DIY-Freundlichkeit machen es zur idealen Wahl für Hobbyisten und Retro-Computing-Fans. Der Aufbau lohnt sich für alle, die Freude an Elektronikprojekten haben.
Manfred (ManiB) ist ein Retro-Computing-Enthusiast und seit April 2025 aktiv im Vereinsforum des VzEkC e.V. Er liebt Einplatinencomputer mit BASIC-Interpretern und hat weitere Projekte wie den PicoMite HDMI/USB realisiert.
Der Colour Maximite 2 Generation 2 Version 2 (CMM2 G2 V2) ist ein kompakter Einplatinencomputer, der die Nostalgie der Heimcomputer der 1980er Jahre wie Commodore 64, Sinclair ZX Spectrum oder Apple II mit moderner Leistung und einfacher BASIC-Programmierung verbindet.
CMM2 G2 V2
Entwickelt von Geoff Graham [1] und Peter Mather [2], bootet er in unter einer Sekunde direkt in den integrierten MMBasic-Interpreter, der mit bis zu 270.000 Zeilen pro Sekunde beeindruckend schnell ist. Damit können Animationen und Spiele direkt in BASIC programmiert werden, ohne dass Assembler oder C notwendig sind. Für Einsteiger ist der CMM2 G2 V2 ideal, da MMBasic leicht erlernbar ist, während erfahrene Bastler die Hardware-Erweiterbarkeit schätzen. Ein guter Einstieg ist das YouTube-Video „Color Maximite 2 – ARM CPU that runs BASIC!“ [3] oder die offizielle Projektseite [4].
Der CMM2 G2 V2 ist vollständig kompatibel mit der ersten Generation, bietet aber erweiterte Funktionen wie einen stabilen 8-MHz-Oszillator für ruckelfreies VGA, Auflösungen bis 1920×1080 und 24-Bit-Farbtiefe. Er eignet sich perfekt für Retro-Gaming, Hardware-Steuerungen oder als Einstieg in die embedded BASIC-Programmierung.
BASIC-Interpreter: Vorinstalliertes MMBasic (neueste Version), extrem schnell mit bis zu 270.000 Zeilen pro Sekunde
Grafikfähigkeit: VGA-Auflösungen bis 1920×1080 Pixel mit 24-Bit-Farbtiefe
Speicher: Unterstützt SD-Karten bis 32 GB; 32 MB externer RAM für MMBasic-Programme
Eingabegeräte: Integrierte Unterstützung für USB-Tastatur und USB-PS/2-Maus
Echtzeituhr: RTC mit Batteriebackup für präzise Zeitmessung
Konnektivität: Unterstützung für ESP-01 WiFi-Modul für drahtlose Netzwerkanbindung
Controller-Ports: Zwei Wii-Controller-Anschlüsse am Frontpanel
Erweiterbarkeit: 40-polige Steckerleiste mit I/O-Pins, kompatibel mit Raspberry Pi
Betriebssystem: Kein zusätzliches OS erforderlich, direkter Start in MMBasic
Vergleich und Preis
Mit seinem ARM Cortex-M7-Prozessor und 480 MHz Taktfrequenz übertrifft der CMM2 G2 V2 historische Heimcomputer bei Weitem. Im Vergleich zu einem Raspberry Pi Zero (ca. 15 €) ist er mit etwa 40 € pro Board teurer, bietet jedoch spezialisierte Features wie den integrierten MMBasic-Interpreter und 24-Bit-Grafik, die ihn für Retro-Projekte einzigartig machen. Für LOAD-Leser, die keine Kompromisse bei Leistung und Retro-Charme eingehen wollen, ist der CMM2 G2 V2 die ideale Wahl.
Den leistungsfähigsten MMBasic-Einplatinencomputer bauen
Das Reference Design
Die Komponenten des CMM2 G2 V2
Dieses Projekt [5] zeigt, wie Sie den leistungsfähigsten Einplatinencomputer mit MMBasic-Interpreter aufbauen. Das Reference Design des CMM2 G2 V2 ist die teuerste, aber auch leistungsstärkste Variante eines solchen Systems – ideal als Abschlussprojekt nach einfacheren Builds wie dem PicoMite HDMI/USB oder VGA/PS2. Es basiert auf einer vierlagigen Leiterplatte (PCB) mit überwiegend SMD-Komponenten auf der Oberseite, was den Bau maschinell optimiert, aber für ambitionierte Bastler machbar macht. Die Designdateien (Schaltplan, Stückliste, Bestückungsdateien) sind open-source und im TheBackShed-Forum im Thread „CMM2 G2 V2 design files“ [6] verfügbar. Laden Sie die Gerber-Datei (Gerber_PCB1_2024-07-10.zip [7]) sowie die Stücklisten- und Bestückungsdatei (BOM-PLC-SCH.zip [8]) herunter, wobei letztere entpackt werden muss, um die enthaltenen Excel-Dateien zu erhalten.
Platinenherstellung bei JLCPCB
Melden Sie sich auf der Website von JLCPCB [9] an und starten Sie eine Bestellung.
Ziehen Sie die Gerber-Datei per Drag-and-Drop auf den Button „Add gerber file“.
Passen Sie die PCB-Spezifikationen an:
Anzahl der Platinen: 5 (Mindestbestellmenge)
Oberflächenbeschaffenheit: LeadFree HASL (bleifrei, in Deutschland vorgeschrieben)
PCB-Farbe: Grün (Standard, spart Kosten)
JLCPCB: PCB-Spezifikationen
Aktivieren Sie unter „PCB Assembly“ die Bestückung der Oberseite, ohne Änderungen vorzunehmen, und klicken Sie auf „NEXT“.
Laden Sie die Stückliste (BOM) und die Bestückungsdatei (CPL) hoch. Starten Sie die Verarbeitung mit „Process BOM & CPL“.
Prüfen Sie, ob alle Bauteile verfügbar sind, und bestätigen Sie mit „Continue to place order“.
Überprüfen Sie die 2D-/3D-Ansicht der Platine und fahren Sie mit „NEXT“ fort.
Auf der „Quote & Order“-Seite betragen die Kosten ca. 30,35 € für die Platinen und ca. 116,67 € für Bauteile und Bestückung. Wählen Sie „Research/Entertainment/Education“ > „Development Board – HS Code 847330“ und klicken Sie auf „SAVE TO CART“.
Wählen Sie im Einkaufswagen FedEx Express als Versanddienstleister, um Zollprobleme zu vermeiden. Der Gesamtpreis für fünf Platinen beträgt ca. 165 €, zuzüglich ca. 35 € für Steuer und Zoll (über FedEx), also etwa 40 € pro Board.
JLCPCB: PCBA Einstellungen
Schließen Sie die Bestellung ab, und Ihre Platinen gehen in Produktion!
Gehäuseoptionen
CMM2 G2 V2 mit PCB-Panels im Gehäuse G738A
Um Ihr Motherboard stilvoll zu schützen, stehen folgende Möglichkeiten zur Verfügung:
3D-gedrucktes Gehäuse: Mit einem 3D-Drucker können Sie ein individuelles Gehäuse kostengünstig herstellen. Die STL-Dateien finden Sie im TheBackShed-Forum (CMM2G2V2_STL_Case.zip [10], CMM2G2V2_STL_Panels.zip [11]). Alternativ bietet JLCPCB 3D-Druck-Dienste an.
Fertiggehäuse: Das robuste Plastikgehäuse G738A von Multicomp ist bei Farnell [12] oder GAINTA [13] erhältlich. Sie benötigen zusätzlich vier M3 x 5 mm + 4 mm Messing-Abstandshalter, vier Kunststoff-Unterlegscheiben und vier M3 x 6 mm Schrauben.
Personalisierte Panels: Für Front- und Back-Panels können Sie bei JLCPCB beschriftete Platinen in verschiedenen Farben (z. B. Grün, Violett, Weiß) oder Aluminium-Panels mit weißer Lackierung und schwarzer Beschriftung bestellen (FRONT_CMM2G2V2ends_250526.zip [14], BACK_CMM2G2V2ends_250526.zip [15]).
Firmware-Installation
CMM2 G2 V2: Ansichten der Panels und des Motherboards
Für die Installation der MMBasic-Firmware auf den STM32H7-Mikrocontroller benötigen Sie den STM32 CubeProgrammer [16] und die Firmware-Datei (empfohlen: Beta-Version 6.00.00B2 [18], da sie neue Funktionen bietet; alternativ Release Version 5.07.01 [17]).
Schritte zur Installation:
Schalten Sie den CMM2 G2 V2 aus.
Setzen Sie den Mini-Jumper auf der Frontseite auf die Bootloader-Position (rechte Position, siehe Handbuch [19]).
Verbinden Sie das Board per USB-C-Kabel mit Ihrem PC.
Schalten Sie den CMM2 G2 V2 ein.
Öffnen Sie den Windows-Gerätemanager und notieren Sie die COM-Port-Nummer des USB-SERIAL CH340-Anschlusses (z. B. COM2).
Starten Sie den STM32 CubeProgrammer und wählen Sie „UART“ als Verbindungstyp mit den passenden Einstellungen. Klicken Sie auf „Connect“.
Wählen Sie die Datei „CMM2V1.5.bin“ aus.
Im Tab „Erase flash memory“ wählen Sie die Option „Select“, um das gesamte Flash-Speicher zu löschen.
Klicken Sie auf „Start Programming“ und warten Sie ca. 3 Minuten, bis die Firmware installiert und verifiziert ist.
Schließen Sie die Erfolgsmeldungen („Download verified successfully“, „File download complete“) und den STM32 CubeProgrammer.
Schalten Sie das Board aus, setzen Sie den Jumper zurück auf die Standardposition (linke Position) und verbinden Sie es mit einem USB-C-Kabel oder einem 5V-Netzteil.
Schalten Sie das Board ein. MMBasic Version 6.00.00B2 sollte starten, und die Tastatur sollte einwandfrei funktionieren.
Zusammenbau und Inbetriebnahme
CMM2 G2 V2: Detailansicht der Montage im Gehäuse G738A
Zusammenbau:
Falls Sie das Plastikgehäuse G738A verwenden, schrauben Sie die vier Messing-Abstandshalter (M3 x 5 mm + 4 mm) in die Aufnahmen der Gehäuseunterseite.
Befestigen Sie das Motherboard zusammen mit den Front- und Back-Panels in der Unterseite.
Setzen Sie eine CR2032 3V-Knopfzelle für die RTC ein.
Setzen Sie den Deckel auf und verschrauben Sie ihn.
Inbetriebnahme:
Schließen Sie einen VGA-Monitor und eine USB-Tastatur (an die obere USB-Buchse) an.
Verbinden Sie das Board per USB-C-Kabel („Power“-Buchse auf der Rückseite) mit einem Computer oder 5V-Netzteil und drücken Sie den Ein-Schalter.
Stellen Sie Datum und Uhrzeit ein, indem Sie über die Tastatur folgenden Befehl eingeben:
OPTION DS3231 ON
Abschluss und Ausblick
Der CMM2 G2 V2 ist ein vielseitiger Einplatinencomputer, der Retro-Enthusiasten und Bastlern gleichermaßen Spaß macht. Die Kombination aus nostalgischem BASIC-Programming und moderner Hardware macht ihn einzigartig. Dank der aktiven Community im TheBackShed-Forum und regelmäßiger Firmware-Updates bleibt das System zukunftssicher. Ob für Retro-Gaming, Hardware-Experimente oder das Erlernen von BASIC-Programmierung – der CMM2 G2 V2 ist ein Muss für LOAD-Leser, die Technik und Nostalgie verbinden wollen. Zukünftige Entwicklungen wie neue MMBasic-Features oder erweiterte Grafikoptionen könnten das System noch spannender machen.
Manfred (ManiB) ist ein Retro-Computing-Enthusiast und seit April 2025 aktiv im Vereinsforum des VzEkC e.V. Er liebt Einplatinencomputer mit BASIC-Interpretern und hat weitere Projekte wie den PicoMite HDMI/USB realisiert.
Träumen Sie von einem eigenen Boot-to-BASIC-Computer, der günstig, einfach zu bauen und vielseitig ist? Das PicoMite VGA/PS2 Reference Design von Geoff Graham [1] macht diesen Traum wahr!
Fertig aufgebauter PicoMite VGA/PS2
Überblick
Das PicoMite VGA/PS2 Reference Design basiert auf dem Raspberry Pi Pico oder Pico 2 und bietet alles, was Bastler benötigen: einen VGA-Ausgang für Bildschirme, einen PS/2-Tastaturanschluss, einen SD-Kartensteckplatz, einen 40-poligen Stecker für alle Pins des Pico und einen praktischen Reset-Taster. Mit leicht verfügbaren Durchsteckkomponenten ist die Platine in unter einer Stunde zusammengesetzt – ideal für Hobby-Elektroniker, die einen kompakten Ersatz für ihren Arduino UNO suchen, der mit Retro-Charme und moderner Flexibilität überzeugt. Dieses Projekt [2] beschreibt alle Schritte, um Ihren eigenen BASIC-Computer zu bauen.
Platinenherstellung
Bereit, Ihre eigene PicoMite-Platine zu bauen? Die Gerber-Dateien enthalten alle notwendigen Daten für die Platinenproduktion (Kupferlagen, Lötmaske, Bohrdaten). Laden Sie zunächst die Datei „PicoMiteVGA_Construction_Pack.zip“ [3] von Geoff Grahams Projektseite im Abschnitt „Other Downloads“ herunter, entpacken Sie sie und komprimieren Sie die Dateien im Verzeichnis „Design #1\PCB Gerbers“ in ein neues Zipfile. Alternativ steht die fertige Gerber-Datei „PicoMiteVGAPS2-PCB-Gerbers.zip“ [4] direkt zum Download bereit.
Bestellen Sie die Platine bei JLCPCB [5], einem günstigen und zuverlässigen Platinenhersteller:
Melden Sie sich auf der Website von JLCPCB [5] an und starten Sie eine Bestellung.
Ziehen Sie die Gerber-Datei per Drag-and-Drop auf den Button „Add Gerber File“.
Passen Sie die PCB-Spezifikationen an:
Anzahl der Platinen: 5 (Mindestbestellmenge)
Oberflächenbeschaffenheit: LeadFree HASL (bleifrei, in Deutschland vorgeschrieben)
Klicken Sie auf „SAVE TO CART“, öffnen Sie den Warenkorb und wählen Sie „EuroPacket“ als Versandmethode (günstig und zuverlässig).
Schließen Sie die Bestellung ab. Die Kosten für fünf Platinen betragen ca. 11,84 € (zzgl. Versand).
JLCPCB PCB-Spezifikationen
JLCPCB Abschluss der Bestellung
Bauteileliste
Die Bauteileliste finden Sie in der PDF-Datei „Design 1 Construction Notes.pdf“ im Zipfile „PicoMiteVGA_Construction_Pack.zip“ [3]. Alle Bauteile sind z. B. bei Mouser.de [6] erhältlich. Hier die Bestellliste für fünf Sets:
Nr.
Mouser-Nr.
Beschreibung
Stückzahl
Preis (EUR)
Gesamtpreis: (EUR)
1
798-DM1AA-SF-PEJ72
Speicherkartenverbinder SD MEM CD CONN R/A SMT PUSHPUSH
5
3,53 €
17,65 €
2
490-MD-60SM
Rundsteckverbinder DIN Mini Din Connectors
5
1,51 €
7,55 €
3
523-7HDE15SD1CH4FVGA
D-Sub-Steckverbinder mit hoher Dichte D SUB R/A
5
1,59 €
7,95 €
4
179-TS026643BK100SCR
Sensorschalter 6 x 6 mm, 4.3 mm Act Height, 100 gf, Black, Short Crimped, Through Hole, SPST,
Kohleschichtwiderstände – Durchgangsloch 10 kOhms 250 mW (1/4 W) 200 V 5 % – 55 C / + 155 C – 55 C / + 155 C AEC-Q200
20
0,052 €
1,04 €
11
649-77313-824-40LF
Sockel & Kabelgehäuse 40P STR DR TMT HDR .38 AU .48IN LENGTH
5
2,09 €
10,45 €
12
485-5583
Raspberry Pi Zubehör Socket Headers for Raspberry Pi Pico – 2 x 20 pin Female Headers
5
0,82 €
4,10 €
13
358-SC1632
Raspberry Pi Hats / Add-on-Boards Raspberry Pi Pico 2 with Header
5
5,16 €
25,80 €
Gesamtpreis für Bauteile: 88,19 € (Versandkosten fallen nicht an)
Gehäuse für Ihren PicoMite VGA/PS2
Fünf Gehäuse frisch aus dem 3D-Drucker
Um Ihr fertiges Board zu schützen und professionell aussehen zu lassen, empfiehlt sich ein passendes Gehäuse. Die Platine passt in ein kompaktes Altronics-Steckgehäuse (130 x 75 x 28 mm, Teilenummer H0376 bei Altronics [7]). In Deutschland ist dieses Gehäuse schwer erhältlich, und die Öffnungen für VGA, PS/2 und SD-Karte müssen manuell angepasst werden – machbar, aber aufwendig.
Alternativ können Sie ein maßgeschneidertes Gehäuse mit einem 3D-Drucker herstellen. Die STL-Dateien für Basis, Deckel und Optionen mit GPIO-Zugang finden Sie hier [8]. Drucken Sie diese in PLA mit einer Schichthöhe von 0,2 mm. Falls kein 3D-Drucker vorhanden ist, bietet JLCPCB 3D-Druck-Dienste an.
Installation des MMBasic-Interpreters
Mit dem MMBasic-Interpreter verwandeln Sie Ihren Raspberry Pi Pico 2 in einen voll funktionsfähigen Retro-Computer. Laden Sie die Firmware-Datei „PicoMiteRP2350VGAV6.01.00b12.uf2“ (Version 6.01.00b12) aus dem TheBackShed-Forum [9] herunter und folgen Sie diesen Schritten:
Halten Sie den BOOT-Taster auf Ihrem Raspberry Pi Pico 2 gedrückt und verbinden Sie ihn per Micro-USB-Kabel mit Ihrem Computer.
Lassen Sie die Taste los, sobald der Pico als Massenspeichergerät (wie ein USB-Stick) erscheint.
Kopieren Sie die .uf2-Datei per Drag-and-Drop auf das Laufwerk.
Warten Sie, bis die Verbindung automatisch trennt (dies zeigt den Abschluss der Installation an).
Trennen Sie das Micro-USB-Kabel.
Der Pico 2 ist nun mit MMBasic startklar.
Zusammenbau und Inbetriebnahme
Zusammenbau eines PicoMite VGA/PS2
Zusammenbau:
Die Montage ist auch für Anfänger machbar – mit etwas Geduld und einem Lötkolben ist die Platine schnell fertig:
Beginnen Sie mit der SD-Kartenbuchse, da sie viel Platz zum Löten benötigt.
Löten Sie die restlichen Durchsteckkomponenten (z. B. Widerstände, Dioden) gemäß der Siebdruckbeschriftung auf der Platine. Achten Sie auf die richtige Polarität bei Dioden.
Löten Sie zwei Stiftleistenfassungen (2×20 Pins) auf die Platine, um den Raspberry Pi Pico 2 einzustecken.
Verschrauben Sie die Platine mit M3 x 4 mm Schrauben im Bodenteil des 3D-gedruckten Gehäuses.
Klipsen Sie den Gehäusedeckel auf.
Inbetriebnahme:
Schließen Sie einen VGA-Monitor und eine PS/2-Tastatur an die Platine an.
Verbinden Sie den Pico 2 per Micro-USB-Kabel mit Ihrem Computer.
Der MMBasic-Startbildschirm wird auf dem Monitor angezeigt.
Geben Sie den Befehl OPTION SDCARD GP13,GP10,GP11,GP12 ein und drücken Sie Enter, um die SD-Karte für Speicherzugriff zu aktivieren. Das Board startet neu.
Falls das Bild auf dem VGA-Monitor rot- oder blaustichig wirkt, justieren Sie den Trimmpotentiometer für den Weißabgleich. Kein Bild? Überprüfen Sie die VGA-Verbindung oder starten Sie den Pico neu.
Ihr PicoMite ist nun einsatzbereit, und Sie können Ihr erstes MMBasic-Programm schreiben!
Abschluss und Ausblick
PicoMite VGA/PS2 im Einsatz
Herzlichen Glückwunsch – Ihr PicoMite VGA/PS2 ist fertig und bereit, die Welt der Retro-Computer zu erobern! Die Kosten: ca. 11,84 € für fünf Platinen und 88,19 € für die Bauteile, also etwa 20 € pro Set. Ein unschlagbarer Preis für einen eigenen BASIC-Computer mit VGA-Ausgang und viel Programmierspaß!
Experimentieren Sie mit MMBasic, schreiben Sie eigene Programme oder erweitern Sie Ihr Board mit Sensoren und LEDs über die GPIO-Pins. Im TheBackShed-Forum [9] finden Sie Ideen und Beispielprogramme, oder teilen Sie Ihr Projekt im VzEkC e.V. Forum [2]. Probieren Sie die neuesten MMBasic-Updates oder passen Sie Ihr 3D-Gehäuse mit eigenen Designs an. Viel Spaß beim Basteln und Programmieren!
Möchten Sie noch tiefer einsteigen? Der nächste Artikel stellt den Colour Maximite 2 Generation 2 Version 2 vor – einen leistungsstärkeren Retro-Computer mit Farbgrafik und erweiterten Möglichkeiten. Schauen Sie im VzEkC e.V. Forum [2] für erste Infos vorbei!
Über den Autor
Manfred (ManiB) ist ein Retro-Computing-Enthusiast und seit April 2025 aktiv im Vereinsforum des VzEkC e.V. Er liebt es, Einplatinencomputer mit Basic-Interpreter zu verwenden und hat auch weitere Projekte realisiert:
Die ersten Homecomputer Ende der 1970er und Anfang der 1980er Jahre waren für viele der Einstieg in die Welt der Computertechnik – dank eingebautem Basic-Interpreter. Mit wenigen Zeilen Code konnten selbst Anfänger ihre ersten Programme schreiben. Ein einfaches „Hello World“-Programm ließ sich in drei Schritten zum Laufen bringen: Rechner einschalten, den Code eintippen und mit „RUN“ starten.
10 PRINT "Hello world! "; 20 GOTO 10
Diese Computer sind Geschichte, doch die Sehnsucht nach unkomplizierter Programmierung lebt weiter. Mit moderner Technik können Sie diesen Retro-Charme neu erleben: Ein Microcontroller, ein BASIC-Interpreter, eine USB-Tastatur und ein HDMI-Monitor genügen, um die Magie der 80er wieder aufleben zu lassen – mit dem Komfort von heute!
In diesem Projekt [1] setzt das PicoMiteHDMIUSB-Motherboard [2] genau hier an. Im Herzen des Projekts schlägt der RP2350B, ein kostengünstiger und leistungsstarker Microcontroller, der auch im Raspberry Pi Pico 2 verwendet wird. Darauf läuft der MMBasic-Interpreter, der die einfache Programmierung der 80er Jahre auf moderne Hardware bringt. Dieser Artikel zeigt Ihnen Schritt für Schritt, wie Sie Ihren eigenen Retro-Computer mit USB-Tastatur und HDMI-Monitor aufbauen – bereit für Ihr nächstes „Hello World“!
Peter Mather’s Referenzdesign
Bild 1: Vorderseite PicoMiteHDMIUSB-Motherboard
Bild 2: Rückseite PicoMiteHDMIUSB-Motherboard
Mit Peter Mather’s Referenzdesign [3] für das PicoMiteHDMIUSB-Motherboard können Sie sofort starten. Alle Dateien für die Platinenherstellung und -bestückung bei einem Hersteller wie JLCPCB [3] sind frei verfügbar. Sie benötigen drei Dateien: die Gerber-Dateien für die Platinenherstellung, die Stückliste (BOM) mit allen Bauteilen und die Pick-and-Place-Datei für deren präzise Positionierung. Die neueste Version (2B) finden Sie im TheBackShed-Forum [4]. Laden Sie dort die Gerber-Datei (Gerber_PCB1_2025-03-20.zip) sowie die Stücklisten- und Pick-and-Place-Datei (BOM_P&P_2025-03-20.zip) herunter. Entpacken Sie die BOM- und P&P-Datei, um die enthaltenen Excel-Dateien zu erhalten.
Platinenherstellung
Bild 3: Lieferung der Boards und Panels von JLCPCB
Melden Sie sich auf der Website von JLCPCB an und starten Sie eine Bestellung.
Ziehen Sie die Gerber-Zip-Datei per Drag-and-Drop auf den Button „Add gerber file“.
Passen Sie die PCB-Spezifikationen an:
Anzahl der Platinen: 5 (Mindestbestellmenge)
Oberflächenbeschaffenheit: LeadFree HASL (bleifrei, in Deutschland vorgeschrieben)
PCB-Farbe: Grün (Standard, spart Kosten)
Aktivieren Sie unter „PCB Assembly“ die Bestückung der Oberseite, ohne Änderungen vorzunehmen, und klicken Sie auf „NEXT“.
Wählen Sie „Top Side“ für die Bestückung und klicken Sie erneut auf „NEXT“.
Laden Sie die Stückliste (BOM) und die Pick-and-Place-Datei hoch. Starten Sie die Verarbeitung mit „Process BOM & CPL“.
Prüfen Sie die Liste der verfügbaren Bauteile. Beachten Sie, dass das PSRAM (U33, „APS6404L-3SQR-SN“) bei JLCPCB nicht verfügbar ist. Dieses Bauteil kann später bei einem Elektronik-Händler bestellt und manuell aufgelötet werden, ist jedoch für den Betrieb nicht zwingend erforderlich.
Bestätigen Sie, dass fehlende Bauteile (U33) nicht bestückt werden („Do not place“), und klicken Sie auf „Continue to place order“.
Überprüfen Sie die 2D-/3D-Ansicht der Platine und fahren Sie mit „NEXT“ fort.
Auf der „Quote & Order“-Seite betragen die Kosten ca. 1,70 € für die Platinen und ca. 116 € für Bauteile und Bestückung. Wählen Sie „Research/Entertainment/Education“ > „Development Board – HS Code 847330“ und klicken Sie auf „SAVE TO CART“.
Wählen Sie im Einkaufswagen FedEx Express als Versanddienstleister, um Zollprobleme zu vermeiden. Der Gesamtpreis für fünf Platinen beträgt ca. 134 €, zuzüglich ca. 30 € für Steuer und Zoll (über FedEx), also etwa 32,80 € pro Board.
Schließen Sie die Bestellung ab, und die Platinen gehen in Produktion.
Um Ihr Motherboard stilvoll zu schützen, empfiehlt sich das Kunststoffgehäuse RM2015S von Hammond Electronics. Es besteht aus robustem ABS in Lichtgrau (130 x 100 x 30 mm) und ist z. B. bei Voelkner für 4,90 € erhältlich [6]. Die vier Bohrungen im Motherboard passen genau zu den Aufnahmen im Gehäuseboden, und alle Schrauben sind im Lieferumfang enthalten.
Für die Front- und Back-Panels stehen drei Optionen zur Verfügung:
Mitgelieferte Panels: Die mit dem Gehäuse gelieferten Plastik-Panels können bearbeitet werden, um Öffnungen für Anschlüsse zu schaffen. Dies ist jedoch aufwendig und wird nicht empfohlen.
3D-gedruckte Panels: Mit einem 3D-Drucker können Sie individuelle Panels kostengünstig herstellen. Die STL-Dateien finden Sie im TheBackShed-Forum: PicoMiteHDMIUSB.zip [7] und panels.zip [8]. Falls kein 3D-Drucker verfügbar ist, bietet JLCPCB 3D-Druck-Dienste an.
Personalisierte Panels: Bei JLCPCB können Sie beschriftete Platinen in Farben wie Grün, Violett, Rot, Gelb, Blau, Weiß oder Schwarz bestellen. Für einen professionellen Look gibt es Aluminium-Panels mit weißer Lackierung und schwarzer Beschriftung für wenige Cent Aufpreis. Die Gerber-Dateien sind im TheBackShed-Forum verfügbar: Gerber_panels_frontpanel_2025-03-22.zip [9] und Gerber_panels_backpanel_2025-03-22.zip [10].
Wählen Sie die Option, die zu Ihrem Budget und Stil passt.
Installation des MMBasic-Interpreters
Überprüfen Sie das gelieferte Motherboard mit einer Lupe auf Zinnbrücken oder fehlerhafte Bauteile. Die Fertigungsqualität von JLCPCB ist in der Regel hervorragend, aber ein kurzer Check lohnt sich.
Laden Sie die Firmware-Datei „PicoMiteHDMIUSBV6.01.00b12.uf2“ (Version 6.01.00b12) aus dem TheBackShed-Forum [11] herunter. Für die Installation benötigen Sie die Micro-USB-Buchse („PROG“), den BOOT-Taster und den zweifachen Dip-Schalter („USBHUB“) auf dem Board:
Stellen Sie beide Dip-Schalter auf „DISABLE“, um den Programmiermodus zu aktivieren.
Halten Sie den BOOT-Taster gedrückt und verbinden Sie das Board per Micro-USB-Kabel mit Ihrem Computer.
Lassen Sie die Taste los, sobald das Board als „RP2350“-Massenspeichergerät erscheint.
Ziehen Sie die .uf2-Datei per Drag-and-Drop auf das Laufwerk. Die Verbindung trennt sich automatisch nach Abschluss der Installation.
Trennen Sie das Micro-USB-Kabel und stellen Sie die Dip-Schalter auf „ENABLE“.
Das Board ist nun mit MMBasic geflasht und bereit für den Zusammenbau.
Zusammenbau und Inbetriebnahme
Bild 5: Vorderansicht mit offenem Gehäuse
Bild 6: Rückansicht mit geschlossenem Gehäuse
Zusammenbau
Schrauben Sie das Motherboard zusammen mit den Front- und Back-Panels in die Unterseite des Gehäuses.
Setzen Sie den Deckel auf und verschrauben Sie ihn.
Inbetriebnahme
Schließen Sie einen HDMI-Monitor und eine USB-Tastatur an.
Verbinden Sie das Board per USB-C-Kabel („Power“-Buchse auf der Rückseite) mit einem Computer und drücken Sie den Ein-Schalter.
Da zunächst kein Bild angezeigt wird, geben Sie über die USB-Tastatur folgenden Befehl ein:
OPTION RESET HDMIUSBI2S
Das Board startet neu, und der HDMI-Monitor zeigt ein Bild. Falls kein Bild erscheint, geben Sie den Befehl über eine serielle Verbindung ein:
Verbinden Sie das Board per USB-C-Kabel an der „Power“-Buchse. Ihr Computer erkennt eine virtuelle COM-Schnittstelle (sichtbar im Windows-Geräte-Manager).
Öffnen Sie TeraTerm oder PuTTY, stellen Sie eine serielle Verbindung mit 115200 Baud her und warten Sie auf den Prompt.
Geben Sie OPTION RESET HDMIUSBI2S ein und drücken Sie Enter.
Nach dem Neustart zeigt der Monitor den MMBasic-Prompt, und Sie können Ihr erstes „Hello World“-Programm schreiben.
Abschluss und Ausblick
Mit der Version 2B von Peter Mather’s Referenzdesign bauen Sie einen modernen Retro-Computer, der MMBasic auf dem Raspberry Pi Pico 2 zum Leben erweckt. Freuen Sie sich auf vielseitige Features:
Vier USB-Ports für Tastatur, Maus, Joypads oder andere Geräte
HDMI-Anschluss für moderne Monitore
Micro-SD-Karte zum Speichern Ihrer Programme
Audioausgang für Stereo-Sound
32-poliger I/O-Stecker für Erweiterungen
Diese Kombination eröffnet Ihnen nahezu unbegrenzte Möglichkeiten, kreative Ideen mit BASIC-Programmierung umzusetzen. Falls Ihnen das PicoMiteHDMIUSB zu komplex erscheint, probieren Sie die einfachere Alternative PicoMiteVGAPS2, die weniger Bauteile benötigt und ideal zum Selberlöten ist. Mehr dazu im nächsten Artikel!
Über den Autor
Manfred (ManiB) ist ein Retro-Computing-Enthusiast und seit April 2025 aktiv im Vereinsforum des VzEkC e.V. Er liebt es, Einplatinencomputer mit Basic-Interpreter zu verwenden und hat auch weitere Projekte realisiert:
Vor über 40 Jahren war der Sinclair ZX81 ein Meilenstein. Dieser Homecomputer weckte Begeisterung für Computertechnik. Mit diesem Retro-Projekt [1] wurde der ZX81 als Emulation (picozx81) auf modernen Komponenten wiederbelebt. Das Gehäuse ist 3D-gedruckt, die Folientastatur originalgetreu. Ziel war es, Nostalgie zu bewahren und gleichzeitig moderne Vorteile zu nutzen. Dazu gehören ein HDMI-Anschluss, schnelles Laden und Speichern auf SD-Karte sowie Joystick-Unterstützung. Nachfolgend wird der Weg zum funktionierenden ZX81-Emulator beschrieben.
Projektüberblick
Der fertig aufgebaute ZX81 Emulator
Der ZX81 wurde möglichst authentisch nachgebaut, jedoch mit moderner Technik:
Gehäuse: 3D-gedruckt, mit originalen Abmessungen des ZX81.
Tastatur: Originalgetreue Folientastatur, trotz schwierigem Tippgefühl unverzichtbar für die Nostalgie.
Emulation: picozx81-Emulator auf einem Raspberry Pi Pico.
Hardware: Olimex RP2040-PICO-PC als Motherboard, Arduino Pro Micro für Tastatursteuerung, weitere Kleinteile.
Zusatzfunktionen: Joystick-Port, Funktionstasten für Emulator-Steuerung, USB-C-Stromversorgung.
Bauteile und Vorbereitung
Ein paar notwendige Elektronik Kleinteile
Für das Projekt sind einige Bauteile notwendig. Ein 3D-Drucker wird vorausgesetzt, um das Gehäuse zu drucken (ca. 6 € Druckkosten). Dann benötigen Sie eine Folientastatur (ca. 27 €) und passende Steckleisten (ca. 7 €). Der Raspberry Pi Pico 2 (ca. 6 €) wird auf ein Motherboard (ca. 12 €) gesteckt, das alle notwendigen Anschlüsse wie HDMI-Monitor und USB-Tastatur bereitstellt. Damit die Anschlüsse der Folientastatur als USB-Tastatur verwendet werden können, wird ein Arduino Pro Micro (ca. 6 €) mit passendem Sketch programmiert. Mit einer kleinen Lochrasterplatine und den notwendigen elektrischen Bauteilen (Kabel, Buchsen, Taster, LEDs, Dioden) (ca. 15 €) kann die Schaltung zum Arduino Pro Micro einfach aufgebaut werden. Damit ergeben sich Gesamtkosten von ca. 79 € für das Projekt.
Hier die Auflistung der notwendigen Komponenten:
3D-gedrucktes Gehäuse [2] und Folientastatur [3] mit Anschlussleisten [4].
Lochrasterplatine, Dioden, Kabel, Pfostenstecker und USB-C-auf-Micro-USB-Kabel [9].
9-poliger Sub-D-Stecker mit Flachbandkabel für Joystick-Anschluss (via UEXT1-Port) [10].
Im GitHub-Repository des „picozx81-Emulators“ können Sie die passende UF2-Datei (picozx81_olimexpc_rp2350.uf2 oder picozx81_olimexpc_hdmi_sound_rp2350.uf2) für das Raspberry Pi Pico 2 Board herunterladen. Alle Infos zur Installation finden Sie ebenfalls dort. Nach der Installation stecken Sie den Pico auf den Olimex RP2040-PICO-PC auf. Nun lässt sich ein erster Start mittels angeschlossenem HDMI-Monitor und normaler USB-Tastatur durchführen.
Der Arduino Pro Micro kann bereits vorab über die Arduino IDE [13] programmiert werden. Das notwendige Sketch wird weiter unten beschrieben. Einmal programmiert, verhält sich der Arduino Pro Micro wie eine USB-Tastatur, wenn die Tasten der Folientastatur gedrückt werden.
Aufbau der Tastaturschaltung
Die USB-Tastaturschaltung angeschlossen an der Folientastatur
Die Tastatur ist das Herzstück des Projekts. Eine originale Folientastatur wurde gewählt, um Nostalgie zu bewahren, trotz ihres berüchtigten Tippgefühls. Aber es gibt auch alternative Tastaturen [12], wenn etwas mehr Komfort gewünscht wird. Die Schaltung basiert auf einem YouTube-Tutorial [11].
Schritte:
Löten der Platine: Auf die Lochrasterplatine wurden Arduino Pro Micro, acht Dioden und zwei Pfostenstecker für die Folientastatur gelötet. Verbindungen entstanden mit WireWrap-Draht für präzise Lötstellen.
Montage: Die Platine wurde mit Heißkleber am Gehäusedeckel befestigt.
Anschluss: Ein USB-C-auf-Micro-USB-Kabel verbindet Arduino und Raspberry Pi Pico.
Herausforderung: Die Leitungen für Tastaturreihen und -spalten waren vertauscht. Daher wurde der Arduino-Sketch angepasst.
Alternative Tastatur: Die ZX8-KDLX-Tastatur [12] mit SMD-Mikrotastern verbessert das Tippgefühl. Dennoch wurde das Original für maximale Authentizität bevorzugt.
Joystick-Integration
Auf der Platine aufgesteckte 9 pol. Joystick –Port
Ein weiteres Highlight ist der Joystick-Port. Dieser ist über den UEXT1-Anschluss des RP2040-PICO-PC angeschlossen. Ein 9-poliger Sub-D-Stecker (inklusive Flachbandkabel) [10] ermöglicht den Anschluss klassischer Atari- oder Competition-Pro-Joysticks.
Hier die Zuordnung der Verbindungen: Joystick-Pin-Nummer -> UEXT1-Pin-Nummer
1 → 3
2 → 4
3 → 6
4 → 5
6 → 10
8 → 2
Um den Joystick zu aktivieren, setzen Sie den Parameter „NinePinJoystick“ im Abschnitt [default] der Datei config.ini im Stammverzeichnis auf „On“.
Umsetzung:
Die sechs Leitungen des Flachbandkabels wurden gemäß UEXT1-Pinbelegung angeschlossen und verlötet.
Der Sub-D-Stecker wurde ins Gehäuse geklebt.
Hinweis: Ein günstiger Atari-Joystick wird noch gesucht. Vorschläge für Bezugsquellen sind willkommen.
Funktionstasten für den Emulator
Der picozx81-Emulator bietet praktische Funktionen, die über die Tasten F1–F9 und Escape aufgerufen werden:
F1: Zurücksetzen
F2: Laden
F3: Emulator-Konfiguration anzeigen
F4: Pause
F5: Tastatur-Overlay anzeigen
F6: Ändern
F7: Neustart
F8: Reboot
F9: Schnappschuss speichern
ESC: Menü verlassen
Da die ZX81 Folientastatur keine Funktionstasten hat, wurde ein seitlicher Taster eingebaut. Wird dieser gedrückt und gleichzeitig eine Zifferntaste (1–9) betätigt, werden die Funktionstasten F1–F9 ausgelöst. Mit der Zifferntaste (0) wird die Taste Escape simuliert. Der angepasste Arduino-Sketch ist weiter unten einzusehen.
Abschluss und Ausblick
Nach über 40 Jahren den ZX81 wieder in Händen zu halten, kleine Basic-Programme zu schreiben, alte Spiele zu zocken ist ein tolle Sache – vor allem wenn man die Vorteile der Emulation genießen kann, wie Verwendung moderner Monitore, Load und Save auf SD-Karte ohne Wartezeit, 16 kB RAM Erweiterung, Speichern der ZX81 Games auf SD Karte, Anlegen von SnapShots via Funktionstaste, Joystick-Port, Stromversorgung via USB-C Kabel.
Was ich in den Jahren verdrängt hatte, ist die Tatsache wie langsam die Abarbeitung der Basic-Programme ist. Wenn man eine Variable hochzählt und anzeigen lässt, geht das gefühlt im Sekundentakt. Will man „flüssige“ Spiele damit programmieren muss man zwangsläufig in die Z80 Assembler Programmierung einsteigen.
Vielleicht spüren einige Retro-Begeisterte Leser nun ebenfalls den Wunsch, den ZX81 wieder zum Leben zu erwecken – wenn ja, ist dies die passende Anleitung dazu.
Dieser Ansatz wäre auch für den ZX Spectrum [14] denkbar, und möglicherweise gibt es eine Emulation des C64 für den Pico.
Übrigens habe ich mir zu Weihnachten den „The Spectrum“ [15] gegönnt. Vielleicht ein Thema, über das im LOAD-Magazin berichtet werden könnte…
Arduino-Sketch für die Tastatur
Die aktualisierte Version des Sketches [16] für den Arduino Pro Micro wurde an die Tastaturverkabelung und Funktionstasten angepasst:
ZX81 Version
04.04.2025 Manfred Becker v1.0: Adjustment rows and columns
07.04.2025 Manfred Becker v1.1: Adjustment additional button
*/
#include <Arduino.h>
#include <Keyboard.h>
// global variables
#define SERIAL_BAUDRATE 9600
#define NUM_ROWS 8
#define NUM_COLUMNS 5
#define DEBOUNCE_SCANS 5
// 8 row drivers - outputs
const uint8_t row1 = 2;
const uint8_t row2 = 3;
const uint8_t row3 = 4;
const uint8_t row4 = 5;
const uint8_t row5 = 6;
const uint8_t row6 = 7;
const uint8_t row7 = 8;
const uint8_t row8 = 9;
uint8_t rowPins[NUM_ROWS] = {row1, row2, row3, row4, row5, row6, row7, row8};
// 5 column inputs - pulled high
const uint8_t column1 = 18;
const uint8_t column2 = 15;
const uint8_t column3 = 14;
const uint8_t column4 = 16;
const uint8_t column5 = 10;
uint8_t columnPins[NUM_COLUMNS] = {column1, column2, column3, column4, column5};
const uint8_t resetRow = row7;
const uint8_t resetColumn = column1;
char keyMap[NUM_ROWS][NUM_COLUMNS] = {
{'1','2','3','4','5'},
{'q','w','e','r','t'},
{'0','9','8','7','6'},
{'a','s','d','f','g'},
{'p','o','i','u','y'},
{KEY_LEFT_SHIFT,'z','x','c','v'},
{KEY_RETURN,'l','k','j','h'},
{' ','.','m','n','b'},
};
const uint8_t shiftKeyRow = 5;
const uint8_t shiftKeyColumn = 0;
char keyMapShifted[NUM_ROWS][NUM_COLUMNS] = {
{'\0','\0','\0','\0','\0'},
{'\0','\0','\0','\0','\0'},
{'\0','\0','\0','\0','\0'},
{'\0','\0','\0','\0','\0'},
{'\0','\0','\0','\0','\0'},
{'\0','\0','\0','\0','\0'},
{'\0','\0','\0','\0','\0'},
{'\0',',','\0','\0','\0'},
};
// Additional button for F1-F10
const uint8_t functionKeyPin = A1; // Pin 19 auf Pro Micro
// Function key mapping for digits 0-9
const uint8_t functionKeys[10] = {
KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4,
KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9
};
// class definitions
class KeyboardKey {
public:
int row;
int column;
int lastState;
int debounceCount;
char keyCode;
char keyCodeShifted;
uint8_t lastFunctionKey; // Neue Variable für Funktionstasten
// default constructor
KeyboardKey() {
lastFunctionKey = 0; // Initialisiere mit 0 (keine Taste)
}
// init constructor;
KeyboardKey(int rowNum, int colNum){
// log matrix position
row = rowNum;
column = colNum;
// get keycode from keyMap array
keyCode = keyMap[row][column];
keyCodeShifted = keyMapShifted[row][column];
// initialise state and debounce
lastState = 0;
debounceCount = 0;
lastFunctionKey = 0; // Initialisiere mit 0
}
void updateKey(KeyboardKey shiftKey){
// row driver set by matrix handler
// scan key
int thisState = digitalRead(columnPins[column]);
int shiftKeyState;
if(thisState != lastState) {
// state changing
debounceCount ++;
// is debounce finished
if (debounceCount >= DEBOUNCE_SCANS){
// key state has changed
lastState = thisState;
debounceCount = 0;
// high = not pressed, low = pressed
if(thisState == 1){
//key released
releaseKeys();
//Serial.println(keyCode);
//delay(10);
}
else {
// key pressed
// Prüfe den Zustand der Zusatztaste
int functionKeyState = digitalRead(functionKeyPin);
// decide which key to pree based on shift key state
shiftKeyState = shiftKey.lastState;
if (functionKeyState == LOW) { // Additional key pressed
// Check whether it is a numeric key (0-9)
if (keyCode >= '0' && keyCode <= '9') {
uint8_t digit = keyCode - '0'; // Convert char to index (0-9)
lastFunctionKey = functionKeys[digit]; // Save the sent key
Keyboard.press(lastFunctionKey); // Send F1-F9 or ESC
return; // Exit the method to skip normal processing
}
}
if((shiftKeyState == 1) || (keyCodeShifted == '\0')) {
// no shift
Keyboard.press(keyCode);
}
else {
// shift key pressed - press shift keycode
// release shift key
shiftKey.releaseKeys();
Keyboard.press(keyCodeShifted);
}
//Serial.println(keyCode);
//delay(10);
}
}
}
else {
// no change in state
// make sure debounce reset
debounceCount = 0;
}
}
void releaseKeys(){
Keyboard.release(keyCode);
Keyboard.release(keyCodeShifted);
if (lastFunctionKey != 0) { // If a function key has been sent...
Keyboard.release(lastFunctionKey); // release and
lastFunctionKey = 0; // reset
}
}
}; // end class KeyboardKey
// global key handler array
// initialised in setup
KeyboardKey keyHandlers[NUM_ROWS][NUM_COLUMNS];
class MatrixDriver{
public:
MatrixDriver() {}
void scanMatrix() {
int row;
int column;
for(row = 0; row < NUM_ROWS; row ++){
// trun on this row line
activateRowLine(row);
// do column keys
for(column = 0; column < NUM_COLUMNS; column ++){
keyHandlers[row][column].updateKey(keyHandlers[shiftKeyRow][shiftKeyColumn]);
}
}
}
void activateRowLine(int rowNum){
// rowNum is zero based to match arrays
int row;
for(row = 0; row < NUM_ROWS; row ++){
if(row == rowNum){
// turn on this row
digitalWrite(rowPins[row], LOW);
}
else {
// turn off this row
digitalWrite(rowPins[row], HIGH);
}
}
}
}; // end class Matrix Driver
// global matrix driver instance
MatrixDriver matrix = MatrixDriver();
void setup() {
int row;
int column;
// Init serial port and clean garbage
Serial.begin(SERIAL_BAUDRATE);
// Zusatztaste als Eingang mit Pull-up
pinMode(functionKeyPin, INPUT_PULLUP);
// reset button
pinMode(resetColumn, INPUT_PULLUP);
pinMode(resetRow, OUTPUT);
delay(10);
// Check whether the additional key is pressed at the start
if (digitalRead(functionKeyPin) == LOW) {
// Additional key pressed: Wait for ENTER for programmability
Serial.println("Additional key pressed - wait for ENTER...");
while(digitalRead(resetColumn)){
delay(100);
}
Serial.println("ENTER pressed - start keyboard");
} else {
Serial.println("No additional key pressed - start immediately");
}
// start keyboard
Keyboard.begin();
// init columns
pinMode(column1, INPUT_PULLUP);
pinMode(column2, INPUT_PULLUP);
pinMode(column3, INPUT_PULLUP);
pinMode(column4, INPUT_PULLUP);
pinMode(column5, INPUT_PULLUP);
// init rows as output and set high - inactive
pinMode(row1, OUTPUT);
digitalWrite(row1, HIGH);
pinMode(row2, OUTPUT);
digitalWrite(row2, HIGH);
pinMode(row3, OUTPUT);
digitalWrite(row3, HIGH);
pinMode(row4, OUTPUT);
digitalWrite(row4, HIGH);
pinMode(row5, OUTPUT);
digitalWrite(row5, HIGH);
pinMode(row6, OUTPUT);
digitalWrite(row6, HIGH);
pinMode(row7, OUTPUT);
digitalWrite(row7, HIGH);
pinMode(row8, OUTPUT);
digitalWrite(row8, HIGH);
// setup key array
for(row = 0; row < NUM_ROWS; row ++){
for(column = 0; column < NUM_COLUMNS; column ++){
keyHandlers[row][column] = KeyboardKey(row, column);
}
}
Serial.println("finished setup");
delay(10);
}
void loop() {
// scan key matrix every 1 ms (+ execution time)
//Serial.println("scanning");
matrix.scanMatrix();
delay(1);
}
Über den Autor
Manfred (ManiB) ist ein Retro-Computing-Enthusiast und seit April 2025 aktiv im Vereinsforum des VzEkC e.V. Er liebt es, alte Computer wie den ZX81 mit moderner Technik wiederzubeleben und hat auch weitere Projekte realisiert:
Der Colour Maximite 2 G2 V2 ist ein kleiner, eigenständiger Computer, inspiriert von den Heimcomputern der frühen 80er Jahre wie dem Tandy TRS-80, Sinclair Spectrum, Commodore 64 und Apple II. Er enthält einen eigenen BASIC-Interpreter und bootet in weniger als einer Sekunde in diesen. Das Projekt wurde von Geoff Graham und Peter Mather ins Leben gerufen.
Leistung und Funktionen:
Im Vergleich zu seinen Vorbildern ist der BASIC-Interpreter mit einer Verarbeitungsgeschwindigkeit von bis zu 270.000 Zeilen pro Sekunde so schnell, dass Animationen und Spiele direkt in BASIC programmiert werden können. Die Nutzung von Assembler und C ist möglich, aber nicht mehr notwendig.
Die neueste Version des CMM2 G2 V2 kommt mit 32 MB externem RAM und der neuesten Software.
Lieferumfang:
Eine SD-Karte mit allen verfügbaren Handbüchern und den wichtigsten Programmen ist enthalten, ebenso wie eine kurze deutsche Bedienungsanleitung.
Zusätzliche Informationen:
Die Homepage des Projekts findet ihr hier, oder ihr googelt nach „Geoff“ und „CMM2“.
Eine Rarität und schwer zu bekommen. Ich habe es bei eBay per Sofortkauf ergattern können. Das ideale Tool für die BASIC-Computer-Generation. Endlich kann man in BASIC schnelle Spiele und Animationen schreiben, ohne den Umweg über Assembler. Das mächtige MMBasic umfasst auch 3D-Grafik, Interrupts und Routinen für externe Sensoren und LEDs.
Die 40-polige Steckerleiste ist Raspberry Pi kompatibel.
Die Platine ist neu vom Bestücker und mit der neuesten Firmware geflasht. Vollständig getestet und direkt einsatzbereit inkl. Batterie für Uhrzeit und Optionen.
Lieferumfang:
Getestetes Mainboard im 3D-gedruckten Gehäuse
MMBasic Ver 5.07.02b11
SD-Karte mit Sammlung von CMM2-Programmen und Informationen zum CMM
Es gibt einen weiteren interessanten Einplatinencomputer, welcher einen BASIC-Interpreter direkt nach dem Einschalten bereithält. Es ist ein Open Source Projekt und es gibt eigentlich mehrere Versionen:
Es handelt sich um einen Einplatinencomputer Retro-Computer mit Z80 und BBC Basic.
Das besondere daran ist, dass hier nichts emuliert wird, sondern ein echter Zilog Z80 Prozessor zum Einsatz kommt. Genau genommen ist es der Zilog eZ80F92, welche mit 20MHz getaktet wird und zusätzliche Features hat, wie den ADL-Modus, bei dem auf 24-Bit Register und Adressen zugegriffen werden können.
Es gibt eine zweite CPU, einen ESP32, der für die Steuerung von Video, Sound und Tastatur zuständig ist. Dieser Co-Prozessor ist über einen UART mit dem eZ80F92 verbunden und fungiert als Grafikterminal.
Ich hab mir das Board Agon Light 2 von Olimex bestellt, inkl. Gehäuse. Mein Tipp um die hohen Versandkosten zu sparen: bestellt bei Mouser Electronics 😉
Nach dem Sinclair ZX 81 war der ZX Spectrum mein zweiter Homecomputer, den ich 1984 erworben hatte. Ihn jetzt als Retro-Gerät in Händen zu halten ist ein tolles Gefühl und die Möglichkeit, ihn mit Basic zu programmieren zu können war letztlich die Kaufentscheidung für mich.
Aber wenn es um die Basic-Programmierung geht, bietet der Colour Maximite 2 noch mehr Möglichkeiten. Als ich bei eBay die Auktion eines CMM2 G2 V2 entdeckte musste ich sofort zuschlagen.
mehr und mehr berichten von Datei Download Problem in Chrome Browser. Ich konnte selbst hier im Blog keine Zip-Files mehr herunterladen. Scheinbar bricht der Download sofort ab.
Nach kurzer suche nach der Ursache bin ich im Netzt fündig geworden. Es gibt eine einfache Möglichkeit das Problem zu beheben, in dem man einen Wert in der Windows Registry ändert. Danach funktionieren wieder alle Downloads wie gewohnt.
Starte den Registrierungs Editor (REGEDIT) im Administrator-Modus