{"id":4379,"date":"2025-09-15T21:47:34","date_gmt":"2025-09-15T19:47:34","guid":{"rendered":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?p=4379"},"modified":"2025-09-27T09:09:56","modified_gmt":"2025-09-27T07:09:56","slug":"ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur","status":"publish","type":"post","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur\/","title":{"rendered":"Ein ZX81 Emulator im 3D-gedruckten Geh\u00e4use mit Folientastatur"},"content":{"rendered":"<p>Vor \u00fcber 40 Jahren war der Sinclair ZX81 ein Meilenstein. Dieser Homecomputer weckte Begeisterung f\u00fcr Computertechnik. Mit diesem Retro-Projekt [<a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35482-zx81-emulator-picozx81-im-3d-gedrucktem-geh%C3%A4use-und-folientastatur\/\" target=\"_blank\" rel=\"noopener\">1<\/a>] wurde der ZX81 als Emulation (picozx81) auf modernen Komponenten wiederbelebt. Das Geh\u00e4use ist 3D-gedruckt, die Folientastatur originalgetreu. Ziel war es, Nostalgie zu bewahren und gleichzeitig moderne Vorteile zu nutzen. Dazu geh\u00f6ren ein HDMI-Anschluss, schnelles Laden und Speichern auf SD-Karte sowie Joystick-Unterst\u00fctzung. Nachfolgend wird der Weg zum funktionierenden ZX81-Emulator beschrieben.<\/p>\n<h2>Projekt\u00fcberblick<\/h2>\n<div id=\"attachment_4380\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4380\" class=\"wp-image-4380 size-medium\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01-300x148.jpg\" alt=\"\" width=\"300\" height=\"148\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01-300x148.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01-1024x507.jpg 1024w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01-768x380.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01.jpg 1409w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-4380\" class=\"wp-caption-text\">Der fertig aufgebaute ZX81 Emulator<\/p><\/div>\n<p><span style=\"color: #000000;\">\u00a0<\/span>Der ZX81 wurde m\u00f6glichst authentisch nachgebaut, jedoch mit moderner Technik:<\/p>\n<ul>\n<li><strong>Geh\u00e4use<\/strong>: 3D-gedruckt, mit originalen Abmessungen des ZX81.<\/li>\n<li><strong>Tastatur<\/strong>: Originalgetreue Folientastatur, trotz schwierigem Tippgef\u00fchl unverzichtbar f\u00fcr die Nostalgie.<\/li>\n<li><strong>Emulation<\/strong>: picozx81-Emulator auf einem Raspberry Pi Pico.<\/li>\n<li><strong>Hardware<\/strong>: Olimex RP2040-PICO-PC als Motherboard, Arduino Pro Micro f\u00fcr Tastatursteuerung, weitere Kleinteile.<\/li>\n<li><strong>Zusatzfunktionen<\/strong>: Joystick-Port, Funktionstasten f\u00fcr Emulator-Steuerung, USB-C-Stromversorgung.<\/li>\n<\/ul>\n<h2>Bauteile und Vorbereitung<\/h2>\n<div id=\"attachment_4383\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4383\" class=\"wp-image-4383 size-medium\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02-300x224.jpg\" alt=\"\" width=\"300\" height=\"224\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02-300x224.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02-1024x764.jpg 1024w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02-768x573.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02.jpg 1369w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-4383\" class=\"wp-caption-text\">Ein paar notwendige Elektronik Kleinteile<\/p><\/div>\n<p dir=\"auto\">F\u00fcr das Projekt sind einige Bauteile notwendig. Ein 3D-Drucker wird vorausgesetzt, um das Geh\u00e4use zu drucken (ca. 6 \u20ac Druckkosten). Dann ben\u00f6tigen Sie eine Folientastatur (ca. 27 \u20ac) und passende Steckleisten (ca. 7 \u20ac). Der Raspberry Pi Pico 2 (ca. 6 \u20ac) wird auf ein Motherboard (ca. 12 \u20ac) gesteckt, das alle notwendigen Anschl\u00fcsse wie HDMI-Monitor und USB-Tastatur bereitstellt. Damit die Anschl\u00fcsse der Folientastatur als USB-Tastatur verwendet werden k\u00f6nnen, wird ein Arduino Pro Micro (ca. 6 \u20ac) mit passendem Sketch programmiert. Mit einer kleinen Lochrasterplatine und den notwendigen elektrischen Bauteilen (Kabel, Buchsen, Taster, LEDs, Dioden) (ca. 15 \u20ac) kann die Schaltung zum Arduino Pro Micro einfach aufgebaut werden. Damit ergeben sich Gesamtkosten von ca. 79 \u20ac f\u00fcr das Projekt.<\/p>\n<p dir=\"auto\">Hier die Auflistung der notwendigen Komponenten:<\/p>\n<ul>\n<li>3D-gedrucktes Geh\u00e4use [<a href=\"https:\/\/www.printables.com\/model\/321667-sinclair-zx81-case?lang=de\" target=\"_blank\" rel=\"noopener\">2<\/a>] und Folientastatur [<a href=\"https:\/\/www.ebay.de\/itm\/193682625447\" target=\"_blank\" rel=\"noopener\">3<\/a>] mit Anschlussleisten [<a href=\"https:\/\/www.ebay.de\/itm\/385851124606\" target=\"_blank\" rel=\"noopener\">4<\/a>].<\/li>\n<li>Raspberry Pi Pico [<a href=\"https:\/\/www.amazon.de\/dp\/B0DCKH85WR?ref=ppx_yo2ov_dt_b_fed_asin_title\" target=\"_blank\" rel=\"noopener\">5<\/a>] mit picozx81-Emulator [<a href=\"https:\/\/github.com\/ikjordan\/picozx81\" target=\"_blank\" rel=\"noopener\">6<\/a>].<\/li>\n<li>Arduino Pro Micro f\u00fcr Tastatursteuerung (fungiert als USB-Tastatur) [<a href=\"https:\/\/www.amazon.de\/dp\/B0CXXPNQS1?ref=ppx_yo2ov_dt_b_fed_asin_title\" target=\"_blank\" rel=\"noopener\">7<\/a>].<\/li>\n<li>Olimex RP2040-PICO-PC als Basisplatine [<a href=\"https:\/\/www.mouser.de\/ProductDetail\/Olimex-Ltd\/RP2040-PICO-PC?qs=By6Nw2ByBD0sUAtT4YjHxw%3D%3D\" target=\"_blank\" rel=\"noopener\">8<\/a>].<\/li>\n<li>Lochrasterplatine, Dioden, Kabel, Pfostenstecker und USB-C-auf-Micro-USB-Kabel [<a href=\"https:\/\/www.amazon.de\/dp\/B0DJ173F5L\" target=\"_blank\" rel=\"noopener\">9<\/a>].<\/li>\n<li>9-poliger Sub-D-Stecker mit Flachbandkabel f\u00fcr Joystick-Anschluss (via UEXT1-Port) [<a href=\"https:\/\/www.amazon.de\/DIGITUS-Seriell-Port-Slotblech-Adapter-Kabel-Flachband-Kabel\/dp\/B006DYQNIK\/ref=sr_1_28\" target=\"_blank\" rel=\"noopener\">10<\/a>].<\/li>\n<\/ul>\n<p dir=\"auto\">Im GitHub-Repository des \u201epicozx81-Emulators\u201c k\u00f6nnen Sie die passende UF2-Datei (picozx81_olimexpc_rp2350.uf2 oder picozx81_olimexpc_hdmi_sound_rp2350.uf2) f\u00fcr 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\u00e4sst sich ein erster Start mittels angeschlossenem HDMI-Monitor und normaler USB-Tastatur durchf\u00fchren.<\/p>\n<p dir=\"auto\">Der Arduino Pro Micro kann bereits vorab \u00fcber die Arduino IDE [<a href=\"https:\/\/www.arduino.cc\/en\/software\/\" target=\"_blank\" rel=\"noopener\">13<\/a>] programmiert werden. Das notwendige Sketch wird weiter unten beschrieben. Einmal programmiert, verh\u00e4lt sich der Arduino Pro Micro wie eine USB-Tastatur, wenn die Tasten der Folientastatur gedr\u00fcckt werden.<\/p>\n<h2>Aufbau der Tastaturschaltung<\/h2>\n<div id=\"attachment_4382\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4382\" class=\"wp-image-4382 size-medium\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03-300x223.jpg\" alt=\"\" width=\"300\" height=\"223\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03-300x223.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03-1024x762.jpg 1024w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03-768x572.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03.jpg 1373w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-4382\" class=\"wp-caption-text\">Die USB-Tastaturschaltung angeschlossen an der Folientastatur<\/p><\/div>\n<p>Die Tastatur ist das Herzst\u00fcck des Projekts. Eine originale Folientastatur wurde gew\u00e4hlt, um Nostalgie zu bewahren, trotz ihres ber\u00fcchtigten Tippgef\u00fchls. Aber es gibt auch alternative Tastaturen [<a href=\"https:\/\/ginger-electronic.com\/en\/zx8-kdlx-keyboard\/\" target=\"_blank\" rel=\"noopener\">12<\/a>], wenn etwas mehr Komfort gew\u00fcnscht wird. Die Schaltung basiert auf einem YouTube-Tutorial [<a href=\"https:\/\/youtu.be\/_qXddJCthWs\" target=\"_blank\" rel=\"noopener\">11<\/a>].<\/p>\n<p><strong>Schritte<\/strong>:<\/p>\n<ol>\n<li><strong>L\u00f6ten der Platine<\/strong>: Auf die Lochrasterplatine wurden Arduino Pro Micro, acht Dioden und zwei Pfostenstecker f\u00fcr die Folientastatur gel\u00f6tet. Verbindungen entstanden mit WireWrap-Draht f\u00fcr pr\u00e4zise L\u00f6tstellen.<\/li>\n<li><strong>Montage<\/strong>: Die Platine wurde mit Hei\u00dfkleber am Geh\u00e4usedeckel befestigt.<\/li>\n<li><strong>Anschluss<\/strong>: Ein USB-C-auf-Micro-USB-Kabel verbindet Arduino und Raspberry Pi Pico.<\/li>\n<\/ol>\n<p><strong>Herausforderung<\/strong>: Die Leitungen f\u00fcr Tastaturreihen und -spalten waren vertauscht. Daher wurde der Arduino-Sketch angepasst.<\/p>\n<p><strong>Alternative Tastatur<\/strong>: Die ZX8-KDLX-Tastatur [<a href=\"https:\/\/www.ginger-electronic.com\/en\/retro-computer\/24-40-zx8-kdlx-keyboard-for-sinclair-zx81-and-zx80.html#\/26-model-zx81\" target=\"_blank\" rel=\"noopener\">12<\/a>] mit SMD-Mikrotastern verbessert das Tippgef\u00fchl. Dennoch wurde das Original f\u00fcr maximale Authentizit\u00e4t bevorzugt.<\/p>\n<h2>Joystick-Integration<\/h2>\n<div id=\"attachment_4381\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-4381\" class=\"wp-image-4381 size-medium\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04-300x189.jpg\" alt=\"\" width=\"300\" height=\"189\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04-300x189.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04-1024x644.jpg 1024w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04-768x483.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04.jpg 1191w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-4381\" class=\"wp-caption-text\">Auf der Platine aufgesteckte 9 pol. Joystick \u2013Port<\/p><\/div>\n<p>Ein weiteres Highlight ist der Joystick-Port. Dieser ist \u00fcber den UEXT1-Anschluss des RP2040-PICO-PC angeschlossen. Ein 9-poliger Sub-D-Stecker (inklusive Flachbandkabel) [<a href=\"https:\/\/www.amazon.de\/DIGITUS-Seriell-Port-Slotblech-Adapter-Kabel-Flachband-Kabel\/dp\/B006DYQNIK\/ref=sr_1_28\" target=\"_blank\" rel=\"noopener\">10<\/a>] erm\u00f6glicht den Anschluss klassischer Atari- oder Competition-Pro-Joysticks.<\/p>\n<p>Hier die Zuordnung der Verbindungen: Joystick-Pin-Nummer -&gt; UEXT1-Pin-Nummer<\/p>\n<ul>\n<li>1 \u2192 3<\/li>\n<li>2 \u2192 4<\/li>\n<li>3 \u2192 6<\/li>\n<li>4 \u2192 5<\/li>\n<li>6 \u2192 10<\/li>\n<li>8 \u2192 2<\/li>\n<\/ul>\n<p dir=\"auto\">Um den Joystick zu aktivieren, setzen Sie den Parameter \u201eNinePinJoystick\u201c im Abschnitt [default] der Datei config.ini im Stammverzeichnis auf \u201eOn\u201c.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Umsetzung<\/strong>:<\/p>\n<ul>\n<li>Die sechs Leitungen des Flachbandkabels wurden gem\u00e4\u00df UEXT1-Pinbelegung angeschlossen und verl\u00f6tet.<\/li>\n<li>Der Sub-D-Stecker wurde ins Geh\u00e4use geklebt.<\/li>\n<\/ul>\n<p><strong>Hinweis<\/strong>: Ein g\u00fcnstiger Atari-Joystick wird noch gesucht. Vorschl\u00e4ge f\u00fcr Bezugsquellen sind willkommen.<\/p>\n<h2>Funktionstasten f\u00fcr den Emulator<\/h2>\n<p>Der picozx81-Emulator bietet praktische Funktionen, die \u00fcber die Tasten F1\u2013F9 und Escape aufgerufen werden:<\/p>\n<ul>\n<li><strong>F1<\/strong>: Zur\u00fccksetzen<\/li>\n<li><strong>F2<\/strong>: Laden<\/li>\n<li><strong>F3<\/strong>: Emulator-Konfiguration anzeigen<\/li>\n<li><strong>F4<\/strong>: Pause<\/li>\n<li><strong>F5<\/strong>: Tastatur-Overlay anzeigen<\/li>\n<li><strong>F6<\/strong>: \u00c4ndern<\/li>\n<li><strong>F7<\/strong>: Neustart<\/li>\n<li><strong>F8<\/strong>: Reboot<\/li>\n<li><strong>F9<\/strong>: Schnappschuss speichern<\/li>\n<li><strong>ESC<\/strong>: Men\u00fc verlassen<\/li>\n<\/ul>\n<p>Da die ZX81 Folientastatur keine Funktionstasten hat, wurde ein seitlicher Taster eingebaut. Wird dieser gedr\u00fcckt und gleichzeitig eine Zifferntaste (1\u20139) bet\u00e4tigt, werden die Funktionstasten F1\u2013F9 ausgel\u00f6st. Mit der Zifferntaste (0) wird die Taste Escape simuliert. Der angepasste Arduino-Sketch ist weiter unten einzusehen.<\/p>\n<h2>Abschluss und Ausblick<\/h2>\n<p>Nach \u00fcber 40 Jahren den ZX81 wieder in H\u00e4nden zu halten, kleine Basic-Programme zu schreiben, alte Spiele zu zocken ist ein tolle Sache &#8211; vor allem wenn man die Vorteile der Emulation genie\u00dfen kann, wie Verwendung moderner Monitore, Load und Save auf SD-Karte ohne Wartezeit, 16 kB\u00a0RAM Erweiterung, Speichern der ZX81 Games auf SD Karte, Anlegen von SnapShots via Funktionstaste, Joystick-Port, Stromversorgung via USB-C Kabel.<\/p>\n<p>Was ich in den Jahren verdr\u00e4ngt hatte, ist die Tatsache wie langsam die Abarbeitung der Basic-Programme ist. Wenn man eine Variable hochz\u00e4hlt und anzeigen l\u00e4sst, geht das gef\u00fchlt im Sekundentakt. Will man &#8222;fl\u00fcssige&#8220; Spiele damit programmieren muss man zwangsl\u00e4ufig in die Z80 Assembler Programmierung einsteigen.<\/p>\n<p dir=\"auto\">Vielleicht sp\u00fcren einige Retro-Begeisterte Leser nun ebenfalls den Wunsch, den ZX81 wieder zum Leben zu erwecken \u2013 wenn ja, ist dies die passende Anleitung dazu.<\/p>\n<p dir=\"auto\">Dieser Ansatz w\u00e4re auch f\u00fcr den ZX Spectrum [<a href=\"https:\/\/github.com\/fruit-bat\/pico-zxspectrum\" target=\"_blank\" rel=\"noopener\">14<\/a>] denkbar, und m\u00f6glicherweise gibt es eine Emulation des C64 f\u00fcr den Pico.<\/p>\n<p dir=\"auto\">\u00dcbrigens habe ich mir zu Weihnachten den \u201eThe Spectrum\u201c [<a href=\"https:\/\/retrogames.biz\/products\/thespectrum\/\" target=\"_blank\" rel=\"noopener\">15<\/a>] geg\u00f6nnt. Vielleicht ein Thema, \u00fcber das im LOAD-Magazin berichtet werden k\u00f6nnte\u2026<\/p>\n<h2>Arduino-Sketch f\u00fcr die Tastatur<\/h2>\n<p>Die aktualisierte Version des Sketches [<a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/ArduinoKeyboard_ZX81.zip\" target=\"_blank\" rel=\"noopener\">16<\/a>] f\u00fcr den Arduino Pro Micro wurde an die Tastaturverkabelung und Funktionstasten angepasst:<\/p>\n<pre><code>\r\n\/*\r\nArduino Pro Micro based USB keyboard driver\r\n<blockquote class=\"wp-embedded-content\" data-secret=\"Y0qloQtCyN\"><a href=\"https:\/\/bytesnbits.co.uk\/3d-print-your-own-zx81\/\">3D print your own ZX81 and turn it into a USB keyboard for emulation<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;3D print your own ZX81 and turn it into a USB keyboard for emulation&#8221; &#8212; Bytes N Bits\" src=\"https:\/\/bytesnbits.co.uk\/3d-print-your-own-zx81\/embed\/#?secret=BnyvDXv8Mt#?secret=Y0qloQtCyN\" data-secret=\"Y0qloQtCyN\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\r\n<iframe loading=\"lazy\" title=\"3D print your own ZX81 and turn it into a USB keyboard for emulation\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/_qXddJCthWs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\r\n\r\nZX81 Version\r\n\r\n04.04.2025 Manfred Becker v1.0: Adjustment rows and columns \r\n07.04.2025 Manfred Becker v1.1: Adjustment additional button\r\n\r\n*\/\r\n\r\n#include &lt;Arduino.h&gt;\r\n#include &lt;Keyboard.h&gt;\r\n\r\n\/\/ global variables\r\n#define SERIAL_BAUDRATE     9600\r\n\r\n#define NUM_ROWS 8\r\n#define NUM_COLUMNS 5\r\n\r\n#define DEBOUNCE_SCANS 5\r\n\r\n\/\/ 8 row drivers - outputs\r\nconst uint8_t  row1 = 2;\r\nconst uint8_t  row2 = 3;\r\nconst uint8_t  row3 = 4;\r\nconst uint8_t  row4 = 5;\r\nconst uint8_t  row5 = 6;\r\nconst uint8_t  row6 = 7;\r\nconst uint8_t  row7 = 8;\r\nconst uint8_t  row8 = 9;\r\n\r\nuint8_t  rowPins[NUM_ROWS] = {row1, row2, row3, row4, row5, row6, row7, row8};\r\n\r\n\/\/ 5 column inputs - pulled high\r\nconst uint8_t  column1 = 18;\r\nconst uint8_t  column2 = 15;\r\nconst uint8_t  column3 = 14;\r\nconst uint8_t  column4 = 16;\r\nconst uint8_t  column5 = 10;\r\n\r\nuint8_t  columnPins[NUM_COLUMNS] = {column1, column2, column3, column4, column5};\r\n\r\nconst uint8_t  resetRow = row7;\r\nconst uint8_t  resetColumn = column1;\r\n\r\nchar keyMap[NUM_ROWS][NUM_COLUMNS] = {\r\n  {'1','2','3','4','5'},\r\n  {'q','w','e','r','t'},\r\n  {'0','9','8','7','6'},\r\n  {'a','s','d','f','g'},\r\n  {'p','o','i','u','y'},\r\n  {KEY_LEFT_SHIFT,'z','x','c','v'},\r\n  {KEY_RETURN,'l','k','j','h'},\r\n  {' ','.','m','n','b'},\r\n};\r\n\r\nconst uint8_t shiftKeyRow = 5;\r\nconst uint8_t shiftKeyColumn = 0;\r\n\r\nchar keyMapShifted[NUM_ROWS][NUM_COLUMNS] = {\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0','\\0','\\0','\\0','\\0'},\r\n  {'\\0',',','\\0','\\0','\\0'},\r\n};\r\n\r\n\/\/ Additional button for F1-F10\r\nconst uint8_t functionKeyPin = A1; \/\/ Pin 19 auf Pro Micro\r\n\r\n\/\/ Function key mapping for digits 0-9\r\nconst uint8_t functionKeys[10] = {\r\n  KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4,\r\n  KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9\r\n};\r\n\r\n\/\/ class definitions\r\n\r\nclass KeyboardKey {\r\n\r\n  public:\r\n\r\n    int row;\r\n    int column;\r\n    int lastState;\r\n    int debounceCount;\r\n    char keyCode;\r\n    char keyCodeShifted;\r\n    uint8_t lastFunctionKey; \/\/ Neue Variable f\u00fcr Funktionstasten\r\n\r\n    \/\/ default constructor\r\n    KeyboardKey() {\r\n      lastFunctionKey = 0; \/\/ Initialisiere mit 0 (keine Taste)\r\n    }\r\n    \r\n    \/\/ init constructor;\r\n    KeyboardKey(int rowNum, int colNum){\r\n      \/\/ log matrix position\r\n      row = rowNum;\r\n      column = colNum;\r\n      \/\/ get keycode from keyMap array\r\n      keyCode = keyMap[row][column];\r\n      keyCodeShifted = keyMapShifted[row][column];\r\n      \/\/ initialise state and debounce\r\n      lastState = 0;\r\n      debounceCount = 0;\r\n      lastFunctionKey = 0; \/\/ Initialisiere mit 0\r\n    } \r\n\r\n    void updateKey(KeyboardKey shiftKey){\r\n      \/\/ row driver set by matrix handler\r\n      \/\/ scan key\r\n      int thisState = digitalRead(columnPins[column]);\r\n      int shiftKeyState;\r\n      if(thisState != lastState) {\r\n        \/\/ state changing\r\n        debounceCount ++;\r\n        \/\/ is debounce finished\r\n        if (debounceCount &gt;= DEBOUNCE_SCANS){\r\n          \/\/ key state has changed\r\n          lastState = thisState;\r\n          debounceCount = 0;\r\n          \/\/ high = not pressed, low = pressed\r\n          if(thisState == 1){\r\n            \/\/key released\r\n            releaseKeys();\r\n            \/\/Serial.println(keyCode);\r\n            \/\/delay(10);\r\n          }\r\n          else {\r\n            \/\/ key pressed\r\n            \/\/ Pr\u00fcfe den Zustand der Zusatztaste\r\n            int functionKeyState = digitalRead(functionKeyPin);\r\n            \r\n            \/\/ decide which key to pree based on shift key state\r\n            shiftKeyState = shiftKey.lastState;\r\n\r\n            if (functionKeyState == LOW) { \/\/ Additional key pressed\r\n              \/\/ Check whether it is a numeric key (0-9)\r\n              if (keyCode &gt;= '0' &amp;&amp; keyCode &lt;= '9') {\r\n                uint8_t digit = keyCode - '0'; \/\/ Convert char to index (0-9)\r\n                lastFunctionKey = functionKeys[digit]; \/\/ Save the sent key\r\n                Keyboard.press(lastFunctionKey); \/\/ Send F1-F9 or ESC \r\n                return; \/\/ Exit the method to skip normal processing\r\n              }\r\n            }\r\n            \r\n            if((shiftKeyState == 1) || (keyCodeShifted == '\\0')) {\r\n              \/\/ no shift\r\n              Keyboard.press(keyCode);\r\n            }\r\n            else {\r\n              \/\/ shift key pressed - press shift keycode\r\n              \/\/ release shift key\r\n              shiftKey.releaseKeys();\r\n              Keyboard.press(keyCodeShifted);\r\n            }\r\n            \r\n            \/\/Serial.println(keyCode);\r\n            \/\/delay(10);\r\n          }\r\n        }\r\n      }\r\n      else {\r\n        \/\/ no change in state\r\n        \/\/ make sure debounce reset\r\n        debounceCount = 0;\r\n      }\r\n\r\n    }\r\n\r\n    void releaseKeys(){\r\n      Keyboard.release(keyCode);\r\n      Keyboard.release(keyCodeShifted);\r\n      if (lastFunctionKey != 0) { \/\/ If a function key has been sent...\r\n        Keyboard.release(lastFunctionKey); \/\/ release and\r\n        lastFunctionKey = 0; \/\/ reset\r\n      }\r\n    }\r\n\r\n}; \/\/ end class KeyboardKey\r\n\r\n\/\/ global key handler array\r\n\/\/ initialised in setup\r\nKeyboardKey keyHandlers[NUM_ROWS][NUM_COLUMNS];\r\n\r\nclass MatrixDriver{\r\n\r\n  public:\r\n\r\n    MatrixDriver() {}\r\n\r\n    void scanMatrix() {\r\n      int row;\r\n      int column;\r\n\r\n      for(row = 0; row &lt; NUM_ROWS; row ++){\r\n        \/\/ trun on this row line\r\n        activateRowLine(row);\r\n        \/\/ do column keys\r\n        for(column = 0; column &lt; NUM_COLUMNS; column ++){\r\n          keyHandlers[row][column].updateKey(keyHandlers[shiftKeyRow][shiftKeyColumn]);\r\n        }\r\n      }\r\n\r\n    }\r\n\r\n    void activateRowLine(int rowNum){\r\n      \/\/ rowNum is zero based to match arrays\r\n      int row;\r\n      for(row = 0; row &lt; NUM_ROWS; row ++){\r\n        if(row == rowNum){\r\n          \/\/ turn on this row\r\n          digitalWrite(rowPins[row], LOW);\r\n        }\r\n        else {\r\n          \/\/ turn off this row\r\n          digitalWrite(rowPins[row], HIGH);\r\n        }\r\n      }\r\n    }\r\n\r\n}; \/\/ end class Matrix Driver\r\n\r\n\/\/ global matrix driver instance\r\nMatrixDriver matrix = MatrixDriver();\r\n\r\nvoid setup() {\r\n  int row;\r\n  int column;\r\n\r\n  \/\/ Init serial port and clean garbage\r\n  Serial.begin(SERIAL_BAUDRATE);\r\n\r\n  \/\/ Zusatztaste als Eingang mit Pull-up\r\n  pinMode(functionKeyPin, INPUT_PULLUP);\r\n  \r\n  \/\/ reset button\r\n  pinMode(resetColumn, INPUT_PULLUP);\r\n  pinMode(resetRow, OUTPUT);\r\n\r\n  delay(10);\r\n\r\n  \/\/ Check whether the additional key is pressed at the start\r\n  if (digitalRead(functionKeyPin) == LOW) {\r\n    \/\/ Additional key pressed: Wait for ENTER for programmability\r\n    Serial.println(\"Additional key pressed - wait for ENTER...\");\r\n\r\n    while(digitalRead(resetColumn)){\r\n      delay(100);\r\n    }\r\n\r\n    Serial.println(\"ENTER pressed - start keyboard\");\r\n\r\n  } else {\r\n    Serial.println(\"No additional key pressed - start immediately\");\r\n  }\r\n\r\n  \/\/ start keyboard\r\n  Keyboard.begin();\r\n\r\n  \/\/ init columns\r\n  pinMode(column1, INPUT_PULLUP);\r\n  pinMode(column2, INPUT_PULLUP);\r\n  pinMode(column3, INPUT_PULLUP);\r\n  pinMode(column4, INPUT_PULLUP);\r\n  pinMode(column5, INPUT_PULLUP);\r\n\r\n  \/\/ init rows as output and set high - inactive\r\n  pinMode(row1, OUTPUT);\r\n  digitalWrite(row1, HIGH);\r\n  pinMode(row2, OUTPUT);\r\n  digitalWrite(row2, HIGH);\r\n  pinMode(row3, OUTPUT);\r\n  digitalWrite(row3, HIGH);\r\n  pinMode(row4, OUTPUT);\r\n  digitalWrite(row4, HIGH);\r\n  pinMode(row5, OUTPUT);\r\n  digitalWrite(row5, HIGH);\r\n  pinMode(row6, OUTPUT);\r\n  digitalWrite(row6, HIGH);\r\n  pinMode(row7, OUTPUT);\r\n  digitalWrite(row7, HIGH);\r\n  pinMode(row8, OUTPUT);\r\n  digitalWrite(row8, HIGH);\r\n\r\n  \/\/ setup key array\r\n  for(row = 0; row &lt; NUM_ROWS; row ++){\r\n    for(column = 0; column &lt; NUM_COLUMNS; column ++){\r\n      keyHandlers[row][column] = KeyboardKey(row, column);\r\n    }\r\n  }\r\n\r\n  Serial.println(\"finished setup\");\r\n  delay(10);\r\n\r\n}\r\n\r\nvoid loop() {\r\n  \/\/ scan key matrix every 1 ms (+ execution time)\r\n  \/\/Serial.println(\"scanning\");\r\n  matrix.scanMatrix();\r\n  delay(1);\r\n}\r\n<\/code><\/pre>\n<h2>\u00dcber den Autor<\/h2>\n<p>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:<\/p>\n<p>02.04.2025: <a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35482-zx81-emulator-picozx81-im-3d-gedrucktem-geh%C3%A4use-und-folientastatur\/\" target=\"_blank\" rel=\"noopener\">ZX81 Emulator (picozx81) im 3D gedrucktem Geh\u00e4use und Folientastatur<\/a><br \/>\n14.04.2025: <a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35594-picomitehdmiusb-motherboard-reference-design\/\" target=\"_blank\" rel=\"noopener\">PicoMiteHDMIUSB motherboard reference design<\/a><br \/>\n29.04.2025: <a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35726-picomite-vga-ps2-reference-design\/\" target=\"_blank\" rel=\"noopener\">PicoMite VGA\/PS2 Reference Design<\/a><br \/>\n20.05.2025: <a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35909-colour-maximite-2-generation-2-version-2-reference-design\/\" target=\"_blank\" rel=\"noopener\">Colour Maximite 2 Generation 2 Version 2 Reference Design<\/a><br \/>\n25.07.2025: <a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/36585-versaterm-ein-diy-serielles-terminal-rp2040-reference-design\/\" target=\"_blank\" rel=\"noopener\">VersaTerm &#8211; Ein DIY-Serielles Terminal (RP2040) &#8211; Reference Design<\/a><\/p>\n<h2>Bildverzeichnis<\/h2>\n<ol>\n<li>Absatz \u201c Projekt\u00fcberblick \u201d, Datei \u201c<strong>zx81-emulator-01.jpg<\/strong>\u201d: \u00a0Der fertig aufgebaute ZX81 Emulator<\/li>\n<li>Absatz \u201c Bauteile und Vorbereitung\u201d, Datei \u201c<strong>zx81-emulator-02.jpg<\/strong>\u201d: \u00a0Ein paar notwendige Elektronik Kleinteile<\/li>\n<li>Absatz \u201c Aufbau der Tastaturschaltung\u201d, Datei \u201c<strong>zx81-emulator-03.jpg<\/strong>\u201d: \u00a0Die USB-Tastaturschaltung angeschlossen an der Folientastatur<\/li>\n<li>Absatz \u201c Joystick-Integration \u201d, Datei \u201c<strong>zx81-emulator-04.jpg<\/strong>\u201d: \u00a0Auf der Platine aufgesteckte 9 pol. Joystick \u2013Port<\/li>\n<\/ol>\n<h2>Links<\/h2>\n<ol>\n<li id=\"link1\"><strong>Zugeh\u00f6riger Thread im VzEkC e. V. Forum<\/strong><br \/>\n<a href=\"https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35482-zx81-emulator-picozx81-im-3d-gedrucktem-geh%C3%A4use-und-folientastatur\/\" target=\"_blank\" rel=\"noopener\">https:\/\/forum.classic-computing.de\/forum\/index.php?thread\/35482-zx81-emulator-picozx81-im-3d-gedrucktem-geh%C3%A4use-und-folientastatur\/<\/a><\/li>\n<li id=\"link2\"><strong>Sinclair ZX81 Geh\u00e4use<\/strong><br \/>\n<a href=\"https:\/\/www.printables.com\/model\/321667-sinclair-zx81-case?lang=de\" target=\"_blank\" rel=\"noopener\">https:\/\/www.printables.com\/model\/321667-sinclair-zx81-case?lang=de<\/a><\/li>\n<li id=\"link3\"><strong>Sinclair ZX81 Tastaturfolie<\/strong><br \/>\n<a href=\"https:\/\/www.ebay.de\/itm\/193682625447\" target=\"_blank\" rel=\"noopener\">https:\/\/www.ebay.de\/itm\/193682625447<\/a><\/li>\n<li id=\"link4\"><strong>Sinclair ZX81 Anschussleisten f\u00fcr Tastaturfolie links\/rechts<\/strong><br \/>\n<a href=\"https:\/\/www.ebay.de\/itm\/385851124606\" target=\"_blank\" rel=\"noopener\">https:\/\/www.ebay.de\/itm\/385851124606<\/a><\/li>\n<li id=\"link5\"><strong>Raspberry Pi Pico 2, RP2350 Mikrocontroller-Board<\/strong><br \/>\n<a href=\"https:\/\/www.amazon.de\/dp\/B0DCKH85WR?ref=ppx_yo2ov_dt_b_fed_asin_title\" target=\"_blank\" rel=\"noopener\">https:\/\/www.amazon.de\/dp\/B0DCKH85WR?ref=ppx_yo2ov_dt_b_fed_asin_title<\/a><\/li>\n<li id=\"link6\"><strong>picozx81-Emulator, a Sinclair ZX81 and ZX80 Emulator for the Raspberry Pi Pico<\/strong><br \/>\n<a href=\"https:\/\/github.com\/ikjordan\/picozx81\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/ikjordan\/picozx81<\/a><\/li>\n<li id=\"link7\"><strong>Arduino Pro Micro Entwicklungsboard<\/strong><br \/>\n<a href=\"https:\/\/www.amazon.de\/dp\/B0CXXPNQS1?ref=ppx_yo2ov_dt_b_fed_asin_title\" target=\"_blank\" rel=\"noopener\">https:\/\/www.amazon.de\/dp\/B0CXXPNQS1?ref=ppx_yo2ov_dt_b_fed_asin_title<\/a><\/li>\n<li id=\"link8\"><strong>Olimex RP2040-PICO-PC<\/strong><br \/>\n<a href=\"https:\/\/www.mouser.de\/ProductDetail\/Olimex-Ltd\/RP2040-PICO-PC?qs=By6Nw2ByBD0sUAtT4YjHxw%3D%3D\" target=\"_blank\" rel=\"noopener\">https:\/\/www.mouser.de\/ProductDetail\/Olimex-Ltd\/RP2040-PICO-PC?qs=By6Nw2ByBD0sUAtT4YjHxw%3D%3D<\/a><\/li>\n<li id=\"link9\"><strong>USB-C-auf-Micro-USB-Kabel Adapter<\/strong><br \/>\n<a href=\"https:\/\/www.amazon.de\/dp\/B0DJ173F5L\" target=\"_blank\" rel=\"noopener\">https:\/\/www.amazon.de\/dp\/B0DJ173F5L<\/a><\/li>\n<li id=\"link10\"><strong>Adapter-Kabel &#8211; IDC 10-Pin zu D-Sub 9<\/strong><br \/>\n<a href=\"https:\/\/www.amazon.de\/DIGITUS-Seriell-Port-Slotblech-Adapter-Kabel-Flachband-Kabel\/dp\/B006DYQNIK\/ref=sr_1_28\" target=\"_blank\" rel=\"noopener\">https:\/\/www.amazon.de\/DIGITUS-Seriell-Port-Slotblech-Adapter-Kabel-Flachband-Kabel\/dp\/B006DYQNIK\/ref=sr_1_28<\/a><\/li>\n<li id=\"link11\"><strong>YouTube-Tutorial zum ZX81 USB-Tastaturaufbau:<\/strong><br \/>\n<a href=\"https:\/\/youtu.be\/_qXddJCthWs\" target=\"_blank\" rel=\"noopener\">https:\/\/youtu.be\/_qXddJCthWs<\/a><\/li>\n<li id=\"link12\"><strong>ZX8-KDLX-Tastatur f\u00fcr verbessertes Tippgef\u00fchl:<\/strong><br \/>\n<a href=\"https:\/\/www.ginger-electronic.com\/en\/retro-computer\/24-40-zx8-kdlx-keyboard-for-sinclair-zx81-and-zx80.html#\/26-model-zx81\" target=\"_blank\" rel=\"noopener\">https:\/\/www.ginger-electronic.com\/en\/retro-computer\/24-40-zx8-kdlx-keyboard-for-sinclair-zx81-and-zx80.html#\/26-model-zx81<\/a><\/li>\n<li id=\"link13\"><strong>Arduino IDE f\u00fcr die Programmierung des Arduino Pro Micro:<\/strong><br \/>\n<a href=\"https:\/\/www.arduino.cc\/en\/software\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.arduino.cc\/en\/software\/<\/a><\/li>\n<li id=\"link14\"><strong>48k\/128k ZX Spectrum for Raspberry Pico Pi RP2040:<\/strong><br \/>\n<a href=\"https:\/\/github.com\/fruit-bat\/pico-zxspectrum\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/fruit-bat\/pico-zxspectrum<\/a><\/li>\n<li id=\"link15\"><strong>Retrogames: The Spectrum<\/strong><br \/>\n<a href=\"https:\/\/retrogames.biz\/products\/thespectrum\/\" target=\"_blank\" rel=\"noopener\">https:\/\/retrogames.biz\/products\/thespectrum\/<\/a><\/li>\n<li id=\"link16\"><strong>Arduino-Sketch f\u00fcr die Tastatur, ArduinoKeyboard_ZX81.ino<\/strong><br \/>\n<a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/ArduinoKeyboard_ZX81.zip\" target=\"_blank\" rel=\"noopener\">https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/ArduinoKeyboard_ZX81.zip<\/a><\/li>\n<\/ol>\n<div><\/div>\n<div>\n<h2>Bilder-Galerie<\/h2>\n<\/div>\n<div>\n<div id='gallery-1' class='gallery galleryid-4379 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-08\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-08-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur\/zx81-emulator-01\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-01-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur\/zx81-emulator-02\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-02-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur\/zx81-emulator-03\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-03-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur\/zx81-emulator-04\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-04-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-05\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-05-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-06\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-06-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-07\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-07-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-09\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-09-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-10\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-10-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-11\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-11-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-13\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-13-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-12\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-12-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-18\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-18-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-14\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-14-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-15\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-15-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-16\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-16-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-17\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-17-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-19\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-19-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-20\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-20-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-21\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-21-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-22\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-22-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-24\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-24-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-25\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-25-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-27\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-27-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-26\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-26-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/mikrocontroller.bplaced.net\/wordpress\/zx81-emulator-28\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2025\/09\/zx81-emulator-28-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl>\n\t\t\t<br style='clear: both' \/>\n\t\t<\/div>\n\n<span id=\"post-ratings-4379\" class=\"post-ratings\" data-nonce=\"a8ee521d3b\"><img decoding=\"async\" id=\"rating_4379_1\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/plugins-secure\/wp-postratings\/images\/stars\/rating_off.gif\" alt=\"1 Stern\" title=\"1 Stern\" onmouseover=\"current_rating(4379, 1, '1 Stern');\" onmouseout=\"ratings_off(0, 0, 0);\" onclick=\"rate_post();\" onkeypress=\"rate_post();\" style=\"cursor: pointer; border: 0px;\" \/><img decoding=\"async\" id=\"rating_4379_2\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/plugins-secure\/wp-postratings\/images\/stars\/rating_off.gif\" alt=\"2 Sterne\" title=\"2 Sterne\" onmouseover=\"current_rating(4379, 2, '2 Sterne');\" onmouseout=\"ratings_off(0, 0, 0);\" onclick=\"rate_post();\" onkeypress=\"rate_post();\" style=\"cursor: pointer; border: 0px;\" \/><img decoding=\"async\" id=\"rating_4379_3\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/plugins-secure\/wp-postratings\/images\/stars\/rating_off.gif\" alt=\"3 Sterne\" title=\"3 Sterne\" onmouseover=\"current_rating(4379, 3, '3 Sterne');\" onmouseout=\"ratings_off(0, 0, 0);\" onclick=\"rate_post();\" onkeypress=\"rate_post();\" style=\"cursor: pointer; border: 0px;\" \/><img decoding=\"async\" id=\"rating_4379_4\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/plugins-secure\/wp-postratings\/images\/stars\/rating_off.gif\" alt=\"4 Sterne\" title=\"4 Sterne\" onmouseover=\"current_rating(4379, 4, '4 Sterne');\" onmouseout=\"ratings_off(0, 0, 0);\" onclick=\"rate_post();\" onkeypress=\"rate_post();\" style=\"cursor: pointer; border: 0px;\" \/><img decoding=\"async\" id=\"rating_4379_5\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/plugins-secure\/wp-postratings\/images\/stars\/rating_off.gif\" alt=\"5 Sterne\" title=\"5 Sterne\" onmouseover=\"current_rating(4379, 5, '5 Sterne');\" onmouseout=\"ratings_off(0, 0, 0);\" onclick=\"rate_post();\" onkeypress=\"rate_post();\" style=\"cursor: pointer; border: 0px;\" \/> (Noch keine Bewertungen)<br \/><span class=\"post-ratings-text\" id=\"ratings_4379_text\"><\/span><\/span><span id=\"post-ratings-4379-loading\" class=\"post-ratings-loading\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/plugins-secure\/wp-postratings\/images\/loading.gif\" width=\"16\" height=\"16\" class=\"post-ratings-image\" \/>Loading...<\/span>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vor \u00fcber 40 Jahren war der Sinclair ZX81 ein Meilenstein. Dieser Homecomputer weckte Begeisterung f\u00fcr Computertechnik. Mit diesem Retro-Projekt [1] wurde der ZX81 als Emulation (picozx81) auf modernen Komponenten wiederbelebt. Das Geh\u00e4use ist 3D-gedruckt, die Folientastatur originalgetreu. Ziel war es, &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/ein-zx81-emulator-im-3d-gedruckten-gehaeuse-mit-folientastatur\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[334],"tags":[],"class_list":["post-4379","post","type-post","status-publish","format-standard","hentry","category-einplatinen-computer"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/posts\/4379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=4379"}],"version-history":[{"count":24,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/posts\/4379\/revisions"}],"predecessor-version":[{"id":4744,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/posts\/4379\/revisions\/4744"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=4379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=4379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=4379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}