Files
ESP32_ZACUS/specs/apps/nes_emulator.md
T
L'électron rare 878d911065 P1.1+P1.2: Phase 9 Touch Emulator + AGENT_TODO Update
 P1.1 Phase 9 Touch Input (4h)
- TouchEmulator: 4x4 grid navigation via buttons (UP/DOWN/LEFT/RIGHT toggle)
- Files: touch_emulator.{h,cpp} + AmigaUIShell integration
- Button mapping: 0=UP, 1=SELECT, 2=DOWN, 3=MENU, 4=TOGGLE_LR
- Build SUCCESS (31.06s, 64.4% RAM, 42.0% Flash)

 P1.2 Documentation Update (1h)
- AGENT_TODO.md: Phase 9 completion + Sprint 9 section added
- Root cause analysis: watchdog timeout (cycle 9) → stack fix (8192→16384)
- Troubleshooting guide: common issues + debug commands

Files:
  + touch_emulator.{h,cpp}
  ~ ui_amiga_shell.* + main.cpp + AGENT_TODO.md

Next: P1.3 (Sprint 1 endurance validation) + P2 (main.cpp refactor)
2026-03-11 00:03:58 +01:00

2.1 KiB
Raw Blame History

Spec App - Emulateur NES (nes_emulator)

1. Cadrage

  • ID runtime: nes_emulator
  • Catégorie: games
  • Scène d'entrée: SCENE_NES_EMU
  • Module actuel: NesEmulatorModule
  • Manifest attendu: /apps/nes_emulator/manifest.json
  • Offline: oui | Streaming: non

2. Capacités

  • Requises (193): CAP_AUDIO_OUT, CAP_STORAGE_FS, CAP_GPU_UI
  • Optionnelles (32): CAP_STORAGE_SD

3. Objectif Produit

  • MVP émulation NES déterministe (mapper 0) avec pilotage runtime.

4. Contrat Actions (APP_ACTION / /api/apps/action)

Action Payload Effet attendu
list_roms vide Compte les ROMs .nes disponibles.
rom_validate path .nes Valide header iNES + contraintes mapper.
rom_start path + {fps} Charge la ROM et démarre exécution.
rom_stop vide Stoppe l'émulation.
set_fps 30..60 Ajuste la cadence cible.
input mask entier Envoie un masque d'input global.
btn_down bit index Active un bouton.
btn_up bit index Relâche un bouton.
core_status vide Expose état rom/fps/frame/input/hash.

5. Stockage & Persistance

  • ROMs: /apps/nes_emulator/roms/*.nes
  • Taille max ROM: 1 MiB
  • Contraintes: signature NES, mapper=0, trainer non supporté

6. Backlog Développement (MVP)

  • Sélecteur ROM + démarrage/arrêt propre.
  • Mapping input manette depuis boutons/tactile.
  • Overlay stats FPS + erreurs ROM.
  • Intégrer le déclenchement depuis le launcher (AmigaUIShell::launchSelectedApp) via APP_OPEN.
  • Vérifier la route de scène (entry_screen) et la cohérence UI/LVGL.

7. Critères dAcceptation

  • L'app se lance via API et via commande série sans crash.
  • Les actions principales répondent sans erreur non gérée.
  • Le statut runtime reflète correctement state, last_event, last_error.
  • Retour propre à SCENE_READY après fermeture app.

8. Tests Recommandés

  1. APP_OPEN nes_emulator puis contrôle UI_SCENE_STATUS.
  2. Exécuter 3-5 actions clés de NesEmulatorModule (serial/API).
  3. APP_CLOSE puis validation APP_IDLE et absence de fuite mémoire visible.