878d911065
✅ 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)
2.1 KiB
2.1 KiB
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) viaAPP_OPEN. - Vérifier la route de scène (
entry_screen) et la cohérence UI/LVGL.
7. Critères d’Acceptation
- 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_READYaprès fermeture app.
8. Tests Recommandés
APP_OPEN nes_emulatorpuis contrôleUI_SCENE_STATUS.- Exécuter 3-5 actions clés de
NesEmulatorModule(serial/API). APP_CLOSEpuis validationAPP_IDLEet absence de fuite mémoire visible.