xteink QEMU fork
Espressif's QEMU fork carrying the xteink X3/X4 (ESP32-C3) machine model and a wasm32 TCG backend (ported from ktock/qemu-wasm), used by xteink-web-emulator to run CrossPoint firmware in the browser.
Branch
main— the working branch. Base is Espressif'sesp-develop-9.2.2-20260417(40edccac).
Remotes
origin— https://ssh.gitea.va.reichard.io/evan/qemu-xteinkupstream— https://github.com/espressif/qemuqemu-wasm— https://github.com/ktock/qemu-wasm (source of the wasm32 backend)
Building
Native (parity check — authoritative)
nix develop
./configure --target-list=riscv32-softmmu --with-devices-riscv32=xteink --enable-gcrypt
ninja -C build qemu-system-riscv32
Or build the native xteink target into dist/qemu-native for direct script use:
make xteink
uv run --script scripts/xteink-emu.py --help
Agent emulator
nix run .#xteink-emu -- start --firmware firmware.bin --sdcard sdcard.img
nix run .#xteink-emu -- interactive --firmware firmware.bin --sdcard sdcard.img
nix run .#xteink-emu -- wait --timeout 30 --match 'ready'
nix run .#xteink-emu -- button bottom-2 --hold-ms 100
nix run .#xteink-emu -- screenshot --output screen.png
nix run .#xteink-emu -- stop
State defaults to /tmp/xteink-emu-$UID; pass --state-dir to any subcommand for parallel instances. interactive opens the display and maps Left/Right, 1–4, and P to the matching device buttons. Hold P for a long power press and close the window to stop. wait advances a persistent log cursor after each match. The emulator exposes the open Wi-Fi network qemu; guest traffic uses QEMU's user-mode NAT.
WebAssembly
Driven by the parent repo, not here:
cd ../xteink-web-emulator
make web-dev # incremental build straight from this tree
The parent's scripts/build-qemu-wasm.sh compiles this checkout inside the
emsdk Docker image defined in xteink-web-emulator/qemu/wasm/Dockerfile.