Files
xteink-web-emulator/ISSUES.md
T
evan 68deac2d8f Reader renders correctly in WASM: grayscale persistence model
Bumps third_party/qemu to the X3 grayscale persistence render. The
in-browser reader now shows crisp black text on white (no inversion, no
muddle). Marks the grayscale defect resolved in ISSUES.
2026-07-21 10:27:36 -04:00

38 lines
3.0 KiB
Markdown

# Known Issues
## Resolved: directory-backed SD reads corrupted WASM state
Opening `/Test/example.txt` through QEMU `vvfat` could corrupt coroutine/guest state. The browser now builds a standards-compliant 64 MiB FAT32 image from OPFS and mounts it as a raw block device, bypassing the failing host-file mapping path. The official CrossPoint 1.4.1 firmware can traverse `Test/example.txt` without a WASM trap or guest panic.
## Resolved: SD card remained in `receivingdata`
`ssi-sd` consumed a write-data token while leaving response mode, then parsed payload bytes as commands. The adapter now enters token mode immediately after the final R1 byte. SPI CMD13 also uses the upstream-correct `sd_r1` internal response so status polling no longer loops on `Unexpected response to cmd 13`.
## Worked around: WASM reader panic in uzlib font decompression
Opening a book panicked **only in WASM** (`Invalid read ... reason: rejected` → Load access fault) inside `uzlib_uncompress` during the reader's font `prewarmCache`. Native QEMU from the same submodule decompresses the identical static flash font and renders text, so it is a wasm32 TCG backend miscompile, not firmware/SD.
Worked around by forcing store-containing TBs to TCI (`wasm_tci_only_tb = true` in `tcg_out_qemu_st`). Reader now opens and paints in the browser. This is a workaround with a perf ceiling (store-containing TBs run interpreted); the precise miscompiled op is not yet localized. Full investigation and next steps: `docs/wasm-inflate-panic.md`.
## Resolved: reader grayscale rendered inverted and muddled
The reader drew a crisp BW page, then a 4-level grayscale antialiasing pass (inverted plane polarity, near-empty planes) that the old model rendered as a full frame, wiping the page to an inverted muddle. The `xteink_x3_eink` model now keeps a persistent surface, detects grayscale vs BW by DTM2's set-fraction, and treats grayscale level 0 as no-drive (keep pixel) so only antialiased edges repaint over the retained BW page. Reader text renders sharp on native and wasm.
Ceiling: the BW-vs-grayscale detector assumes the background is the white pixel majority, so a genuinely mostly-black BW frame would flip. Upgrade path: decode the loaded LUT directly.
## Cold boot requires a manual power-button hold
If the power button is not held until the Booting icon appears, the firmware can enter an unwanted watchdog reboot path:
```text
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0)
```
The emulator should model a cold-boot power hold and release automatically rather than requiring precisely timed user input. The preceding NVS `NOT_FOUND` messages are expected first-boot initialization noise.
## WASM heap balloons after watchdog reboot
The committed WASM heap starts near 176.3 MiB but can grow to approximately 631.8 MiB after the watchdog reboot described above.
This indicates translated-block or dynamic WebAssembly module state is retained across guest reboot. TB cleanup must release old dynamic instances during reset; reboot-time growth should remain bounded.