Aller au contenu
Phosphoneowiki
Sommaire

Sauvegarde d'état

Une sauvegarde d’état contient le 65C02, la partie hôte (horloge, palette, chemins, fichiers ouverts), le hasard du programme (le rand() de la libc est compté puis rejoué), la phase du minuteur à 100 Hz et l’état entier du firmware lié. La reprise est exacte : écran et console sont identiques, octet pour octet, à ceux d’une exécution qui ne se serait jamais arrêtée.

--save-state-at

Syntaxe : --save-state-at CYCLES:FICHIER

Sauve l’état après N cycles ; l’émulation continue ensuite normalement. Un seul fichier par option ; le format est versionné (une sauvegarde d’une ancienne version est refusée plutôt que mal relue).

Exemple

$ phosphoneo asteroneo.neo --headless --cycles 40000000 --save-state-at 30000000:jeu.state
phosphoneo : état sauvegardé dans jeu.state (cycle 30000003)

À savoir. Même binaire seulement : un état ne se relit pas avec une autre version de Phosphoneo (le format est en version 3 ; les états de la version 2 sont refusés avec un message). Le mode disquette (--floppy) n’est pas couvert. Le contenu du dossier de stockage n’est pas dans l’état : un fichier écrit par le programme avant le point doit être conservé avec lui, sinon la reprise diverge.

--load-state

Syntaxe : --load-state FICHIER

Reprend une sauvegarde avant la première instruction. Les fichiers que le programme avait ouverts sont rouverts à leur position (chemin, mode, position) ; un fichier disparu est signalé et sa poignée fermée. Code de sortie 1 si la sauvegarde est refusée.

Exemple

$ phosphoneo --load-state jeu.state --headless --cycles 40000000 --screenshot-at 39900000:b.ppm

À savoir. La reprise repart au cycle sauvé (30 000 003 ici) : --cycles et --screenshot-at comptent depuis le début, pas depuis la reprise.

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