Aller au contenu
Phosphoneowiki
Sommaire

Recettes

Chaque recette combine plusieurs options pour un besoin réel. Les options citées sont décrites une par une dans les options.

1. Tester dans un script

On veut qu’un programme affiche « READY » en moins de 30 millions de cycles :

phosphoneo prog.neo --cycles 30000000 --screenshot-text out.txt
grep -q READY out.txt && echo OK || echo ÉCHEC

La console texte se prête mieux au grep qu’une image. Pour une comparaison d’image exacte, --screenshot produit un PPM dont on compare l’empreinte (sha256sum) à celle d’une référence.

2. Filmer une partie

phosphoneo jeu.neo --cycles 75000000 \
    --gamepad-at 5000000:04 --gamepad-at 12000000:0 \
    --gamepad-at 13000000:20 --gamepad-at 15000000:0 \
    --record partie.avi

La manette avance (04) de 5 à 12 millions de cycles, puis le bouton B (20, « utiliser ») ouvre une porte. 75 millions de cycles font douze secondes de vidéo à 60 images par seconde. Pour téléporter le joueur, ajouter des --poke-at.

3. Trouver un appel qui échoue

phosphoneo prog.neo --cycles 60000000 --api-log j.log:3
grep -v 'err=0' j.log | head

Le groupe 3 est celui des fichiers : toute ligne dont err n’est pas 0 est un appel refusé par le firmware (par exemple err=17, fichier absent). L’adresse pc= dit quelle instruction du programme l’a émis.

4. S’arrêter avant un appel et garder la mémoire

phosphoneo prog.neo --break-api 3,2 --break-dump ram.bin

Phosphoneo s’arrête avant le premier appel 3,2 (chargement de fichier), affiche les paramètres tels que le programme les a posés, écrit la RAM dans ram.bin et sort avec le code 3. On examine ensuite le fichier : le nom du fichier demandé est dans la RAM, à l’adresse que les paramètres indiquent.

5. Sauter une introduction

phosphoneo jeu.neo --headless --cycles 60000000 --save-state-at 40000000:apres-intro.state
phosphoneo --load-state apres-intro.state --headless --cycles 70000000 --screenshot-at 69900000:a.ppm

La première commande joue l’introduction une fois et sauve l’état au cycle 40 millions ; la seconde repart de là. Comme le temps compte depuis le début, --cycles doit dépasser le cycle sauvé.

6. Attendre une image précise

Si le programme tient un compteur d’images dans un mot 16 bits, par exemple à l’adresse $0A10 :

phosphoneo jeu.neo --screenshot-when 0A10:300:trame300.ppm --cycles 100000000

La capture est prise quand ce compteur vaut 300, quel que soit le cycle : l’essai reste correct si le programme change de vitesse.

Sources dans le dépôt : README.md, src/main.c, tests/integration/.