Fast, modern ESP32 emulator for testing CYD (Cheap Yellow Display) firmware on your desktop
40+ MIPS execution speed with dual-core ESP32 emulation for accurate firmware testing
Hardware-accelerated 60 FPS rendering with complete touch input simulation
Auto-builds Python environment locally with UV package manager. No system Python required
Real-time register view, stack inspection, touch logging, and UART output monitoring
| Metric | Value | Description |
|---|---|---|
| Execution Speed | 40+ MIPS | Real-time Xtensa CPU emulation |
| Display Refresh | 60 FPS | Hardware-accelerated GPU rendering |
| Touch Latency | <1ms | Mouse to XPT2046 driver mapping |
| Startup Time | <1s | Instant launch after first build |
ESP32 • 2.8" 320×240 • XPT2046 touch • Micro-USB
ESP32 • 2.4" 320×240 • XPT2046 touch • USB-C
ESP32 • 3.5" 480×320 • GT911 capacitive • USB-C
ESP32-S3 • 4.3" 800×480 • GT911 capacitive • USB-C
git clone https://github.com/levkropp/cyders.git
cd cyders
run-cyders.bat
The launcher auto-builds demo firmware on first run (~5 minutes). Subsequent runs are instant.
Click anywhere on the display to simulate touch. Check the Touch Log panel for coordinates. Try the interactive LVGL demo with buttons, sliders, and animations.
// Display Pipeline
pixels → Hardware-accelerated pixel buffer
winit → Cross-platform windowing
wgpu → GPU rendering (60 FPS)
// Emulator Core
flexe → Xtensa CPU emulator (FFI)
dual-core → Full ESP32 simulation
peripherals → UART, SD card, NVS, touch
// User Interface
egui → Immediate-mode GUI
panels → Registers, stack, UART output
monitoring → Real-time performance metrics
// Event propagation chain
Mouse Click → TouchState (Rust)
↓
C Callback (FFI)
↓
XPT2046 Driver (Firmware)
↓
LVGL Event Handler
| Key | Action |
|---|---|
| Mouse Click | Simulate touch input at cursor position |
| ESC | Quit emulator |
| P | Pause/Resume execution |
| F10 | Toggle info panel visibility |