- Custom lua_psram_alloc uses heap_caps_malloc(SPIRAM|8BIT) fallback to reduce internal heap pressure
- Fixes sdmmc_read_sectors not enough mem (0x101) and MemoryChecker low 359 bytes
- Audio skipped for solitaire (no sfx/tone in source) to save RAM: 'audio not needed, skipping SfxEngine'
- Exit: game.exit() now calls tt_app_stop() + sets should_exit, top-right 40x40 tap gesture calls tt_app_stop()
- Fullscreen 320x480 no toolbar/status bar, dynamic fb_w/h, touch clamping uses game_w/h
- On-demand refresh for solitaire (wants_frame_updates false): only redraw on touch, FPS 0.1-1.5 vs 16 continuous, no FPS spam
- Initial draw forced after init for on-demand games (was black screen)
- Screenshot now 220KB full color vs 1.2K 4-bit, shows solitaire cards with optimized LEFT=4 GAP=4 TOP_Y=4 TAB_Y=60 (was 37/10/30/98) - no window chrome
- Tested solitaire loads external 24430 bytes, pico=1, no Lua errors
- Manifest: HideStatusBar flag, version 0.2.0
- app_on_show: remove toolbar, get display resolution via lv_display_get_horizontal_resolution, allocate 320x480 framebuffer in PSRAM
- Dynamic game_w/h, fb_w/h in AppCtx, set_px/fill_rect use dynamic size
- touch_event_cb uses dynamic max_w/h
- On-demand refresh: l_game_set_frame_updates sets wants_frame_updates flag
- Pico games without set_frame_updates (solitaire) only redraw on touch events
- Continuous games (breakout, pong) with set_frame_updates(true) use FRAME_TICK every 16ms
- Initial draw after init for on-demand games
- FPS tracking only when redraw occurs
- Solitaire optimized: LEFT 37->4, GAP 10->4, TOP_Y 30->4, TAB_Y 98->60, removed draw_terminal_chrome (outer frame + title bar + window controls)
- Uploaded optimized solitaire via /fs/upload?path=/sdcard/lua/solitaire.lua (24430 bytes)
- Tested fullscreen: display 320x480, no toolbar, screenshot shows chrome removed, white pixels 3197 (cards only)
- Logs show no continuous FPS spamming for solitaire (on-demand)
- Document SfxEngine audio mapping
- Document 4.5x ball speed, 17.5 FPS after direct FB font
- Document Pico API shim (renderer, game, INPUT) and 17 games portability
- Tested Pong runs with no Lua errors