Files
Meck/examples
pelgraine b6963e9411 GBC emulator: robust after Bluetooth, background saves, faster typing, font prefs on games menus
Follow-up to the v1.14 emulator commits. T-Deck Max unless noted.

MEMORY AND STABILITY (GBCEmulatorScreen.cpp)
- Emulator task stack is now 8 KB, static, reserved at boot. Once
  Bluetooth has been switched on in a boot its stack stays resident
  (SerialBLEInterface::disable() never releases it) and a later game
  launch could not find 12 KB of internal RAM in one piece. Measured
  use is about 2 KB.
- Core context released on every failed launch, not just on quit; a
  failure no longer holds 50 KB.
- No periodic full refresh during play (too distracting). The full
  refresh on quit stays, to clear ghosting before the ROM list.

SAVES
- .sav written in the background: cart-RAM writes mark it dirty and
  the UI task writes the file once the game has left its cart RAM
  alone for 2 s, i.e. shortly after the user saves in-game. Quit
  writes only if still dirty, and no longer draws and refreshes an
  intermediate "Saving..." frame (that frame cost 650 ms by itself).

INPUT
- Both-shifts keyboard-backlight chord works mid-game: it is the one
  key raw joypad mode lets through. The toggle body moved from
  handleKeyboardInput() into toggleKeyboardBacklight() (main.cpp) so
  the game and the normal path share one on/off state.
- On quit the keyboard stays in raw mode, still drained through the
  panel's busy wait, until the ROM list has been drawn. Keys pressed
  during the quit flash used to queue in the TCA8418 and replay as
  navigation afterwards (one held Q ran four screens back).

PICTURE
- Game pictures after the first refresh only the 216-line game window
  (GxEPDDisplay::requestWindowRefresh, consumed by endFrame). Measured
  at 652 ms either way, the same as full-panel: the panel's waveform
  time is the floor, so this saves data transfer only.

TYPING (main.cpp, all e-ink builds)
- COMPOSE_REFRESH_INTERVAL 700 -> 0. lastComposeRefresh is stamped
  after the blocking e-ink refresh completes, so the interval only
  added dead time on top of it. Worst-case keystroke-to-screen drops
  from about 1.6 s to about 0.9 s. COMPOSE_TYPING_PAUSE unchanged.

GAMES MENUS
- Games menu and Game Boy ROM list rows follow the user's font size
  and style via the NodePrefs helpers (as the channel picker does);
  Max touch hit-test updated to match. Footers read Q:Back.

BUILD ENVS (Pro)
- meck_audio_wifi_hyn and meck_audio_standalone_hyn, the HYN-touch
  counterparts of the existing meck_audio_ble_hyn.

Files: examples/companion_radio/{main.cpp, ui-new/GBCEmulatorScreen.{h,cpp},
ui-new/GamesMenuScreen.h}, src/helpers/ui/GxEPDDisplay.{h,cpp},
variants/lilygo_tdeck_max/TCA8418Keyboard.h,
variants/lilygo_tdeck_pro/platformio.ini
2026-09-13 07:21:33 +10:00
..