Skip to content

v0.4.1: QEMU display

Choose a tag to compare

@rvben rvben released this 03 Jul 09:26
v0.4.1
590732e

Highlights

The QEMU backend gained a display (tier 2)

A qemu-backed target whose firmware is built against Espressif's esp_lcd_qemu_rgb component now renders into esprite's framebuffer via QMP screendump:

  • New target qemu_esp32c3_rgb (320x240 virtual RGB panel). screenshot, serve --shot, and the live --window work exactly as on native targets - the bezel window shows the real emulated guest's pixels, refreshed at 10 Hz.
  • Draw full frames in cooperating firmware: the virtual panel consumes one pending draw per host-side capture, so per-line drawing stalls headless. The bundled fixture (tools/qemu/rgb_demo) shows the pattern.
  • New error kind capture_failed (exit 9) for a screendump or decode failure after boot.

Qemu targets are data, not code

Board specs live in targets/qemu/*.json (key, machine, arch, optional display dimensions) and ship inside the binary. ESPRITE_QEMU_BOARD=/path/to/board.json registers your own qemu board at runtime, no rebuild. The serial-only qemu_esp32c3 target is unchanged in behavior, now defined by data.

More

  • Gated end-to-end display tests against a scripted esp_lcd_qemu_rgb fixture image (make qemu-fixtures); the default build and tests still never require QEMU.
  • A qemu boot now records the active target, so board-aware capability gating works identically across backends.

Binaries below carry the generic native targets (sample_gfx, cyd, cyd_tft) plus both qemu board specs; the waveshare_amoled_18 target needs a source build against a firmware checkout (see README). esprite is alpha software; interfaces may change.