Lys Entertainment System
Seltsame Nachbildung eines Konsolensystems, erstellt mit Arduino/ESP8266

Ein seltsamer Prototyp eines Konsolensystems, erstellt mit Arduino/ESP32. Es handelt sich um ein Hobbyprojekt,
kein echtes Produkt. Die endgültige Idee ist ein kleines Handheld, auf dem meine eigenen
Spiele mit Sound und einem Farbdisplay laufen. Davon ist es noch weit entfernt. Es sollte
Spiele aus der NES- und SNES-Ära problemlos ausführen können. Höhere Auflösungen sind das, was
auf einer Platine mit PSRAM noch möglich ist.
Es kommt auf den Arbeitsspeicher an. Der Arduino Mega 2560, auf dem es derzeit läuft, verfügt nur über 8 KB
SRAM. Das reicht nicht für einen Farb-Framebuffer, daher bleibt es auf diesem Board bei reiner Textanzeige.
Die nächste Plattform ist ein ESP32 WROOM, der auf etwa 520 KB SRAM und einen
schnellen Dual-Core-Prozessor aufstockt. Das reicht für einen 240x240-Framebuffer (ca. 115 KB) und ermöglicht echte
Spiele bei dieser Auflösung. Der WROOM verfügt über kein PSRAM, daher kann er die viel
größeren Framebuffer nicht speichern, die ein Bildschirm mit höherer Auflösung benötigen würde. Ein ESP32-WROVER oder
ESP32-S3 deckt dies später mit mehreren Megabyte PSRAM und integriertem Speicher ab, was
für einen Bildschirm mit mehr als 240p erforderlich ist.
Status
Frühes und unfertiges Stadium. Derzeit bootet das System, erkennt den Netzschalter, spielt Musik
über eine nicht blockierende Melodie-Engine ab und zeigt Text auf dem LCD an. Es gibt noch keine
Spiele.
Derzeit läuft es auf einem Arduino Mega mit einem 16x2-Zeichen-LCD, worauf der
Code ausgelegt ist. Die nächste Plattform steht fest: ein ESP32 WROOM, der ein 1,54-Zoll-
240x240-IPS-ST7789-Display über SPI ansteuert. Beide Komponenten laufen mit 3,3 V und lassen sich ohne
Pegelumsetzung miteinander verbinden, im Gegensatz zum aktuellen 5-V-LCD. Diese Bauteile sind unterwegs, und
es wird nichts portiert, bis sie eintreffen.
Die Spiele werden auf lyszt.net gehostet und über WLAN auf das Board heruntergeladen. In der
ersten Version befinden sie sich im integrierten Flash-Speicher des ESP32.
Hardware
- MCU: vorerst Arduino Mega 2560 (ATmega2560)
- Display: 16×2-I2C-Zeichen-LCD (Adresse
0x27) - Audio: passiver Summer an Pin 3
- Eingabe:
- Ein-/Aus-Taste an Pin 2 (
INPUT_PULLUP, entprellt) - Richtungstasten: oben / unten / links / rechts, bisher nur einfache Tasten,
noch nicht angeschlossen - Aktionstasten: A / B, dasselbe gilt, noch nicht verdrahtet
- Ein-/Aus-Taste an Pin 2 (
Geplant (nächste Plattform)
- MCU: ESP32 WROOM (3,3 V, Dual-Core, ~520 KB SRAM)
- Display: 1,54 Zoll, 240×240 IPS ST7789 über SPI
- Speicher: Spiele im integrierten Flash-Speicher, über WLAN heruntergeladen
- Später: ESP32-WROVER oder ESP32-S3 für PSRAM-Kapazität über 240p hinaus
Aufbau
PlatformIO-Projekt, Arduino-Framework. Das eigentliche Projekt befindet sich unterLys Entertainment System/.
platform = atmelavr
board = megaatmega2560
framework = arduino
lib_deps = marcoschwartz/LiquidCrystal_I2C
Layout
Der Quellcode befindet sich unter Lys Entertainment System/src/:
main.cpp— Einstiegspunkt: Verdrahtung, Einschaltknopf, Hauptschleife.system/— derSystem-Kern; verwaltet den Stromzustand, das LCD und die Audioausgabe.sounds/— Audio, unterteilt in Daten und Logik:notes.h— Tonhöhenkonstanten.songs.{h,cpp}– Musikdaten (dieSong-Struktur und Melodiedefinitionen).sounds.{h,cpp}– die nicht blockierende Melodie-Engine und die Sound-API.audio_manager.{h,cpp}– OO-Wrapper um die Engine.
lcd/– LCD-Text-Helper.utils/– wiederverwendbare Helper (z. B. ein nicht blockierendeswait).
