- ESP32 Dual-Core @ 240 MHz
- FreeRTOS-Task-Scheduling
- ILI9341 SPI-TFT + DMA
- Google Test (33 Tests bestanden)
ESP32 / EMBEDDED REAL-TIME EMULATION
Zyklusgenaue Emulation auf hardwarenahen Mikrocontrollern
Die Portierung eines zeitkritischen Konsolen-Emulators auf einen Mikrocontroller erfordert ein durchdachtes Systemdesign. Mit 520 KB internem SRAM und zwei mit 240 MHz getakteten Xtensa-LX6-Kernen bietet der ESP32 ausreichend Leistung, doch flüssiges Rendering gelingt nur durch die saubere Aufteilung von Aufgaben über FreeRTOS, speicherabgebildete Ein-/Ausgabe und nicht blockierende SPI-DMA-Übertragungen.
Dual-Core-Task-Architektur
Core 0 übernimmt die Scanline-Erzeugung der PPU, Farbpaletten-Zuordnung und DMA-gestützte SPI-Übertragung an das ILI9341-Display. Core 1 führt die 6502-CPU-Befehle aus, regelt die Buszuteilung, APU-Audiosynthese und Controller-Abfrage ohne Ruckler.
Speicher- & DMA-Optimierung
Der ESP32 verfügt nicht über genügend SRAM für einen vollständigen, unkomprimierten 16-Bit-Doppelpuffer. Stattdessen werden Scanlines in Ping-Pong-DMA-Puffern berechnet und direkt an das Display gestreamt, während die CPU die nächste Zeile vorbereitet.
Host-Tests mit Google Test
Vor dem Flashen auf den Chip über PlatformIO prüft eine desktopbasierte CMake-Testsuite mit 33 Google-Test-Fällen Adressierungsarten, offizielle sowie inoffizielle Opcodes, Speicher-Mirroring und Interrupts, um Fehler frühzeitig auszuschließen.
Peripherie- & Hardwareanbindung
Anbindung eines 2,8" ILI9341 SPI-LCDs (320 × 240), eines SPI-MicroSD-Kartenmoduls zum Laden von ROM-Dateien, I2S-DAC / PWM-Audioausgabe sowie Tasterabfrage über CD4021-Schieberegister.
Hardware-Komponenten & Schnittstellen
- Mikrocontroller
- ESP32-WROOM-32 (Dual-Core @ 240 MHz, 4MB Flash)
- Display
- ILI9341 2,8" SPI TFT LCD (240 × 320, 16-Bit-Farbe)
- Speichermedium
- MicroSD-Kartenmodul über SPI-Bus (ROM-Ladevorgang)
- Steuerung
- 8-Tasten-NES-Controller über CD4021-Schieberegister / GPIOs
- Audio
- I2S DAC / PWM-Audioausgabe mit analogem RC-Tiefpass
- Toolchain
- PlatformIO + VS2022 + CMake + Google Test
Test- und Build-Pipeline
Das Projekt setzt Visual Studio 2022 und PlatformIO für ESP32-Builds ein, ergänzt durch eine plattformunabhängige CMake-Konfiguration für schnelle Desktop-Tests. 33 Unit-Tests gewährleisten verlässliche 6502-CPU-Emulation.
ESP32-Repository auf GitHub ansehen