KITAQ SYSTÈME DE DÉVELOPPEMENT
MANUEL D'UTILISATION 2026.09

KITAQ SERIES • ÉDITION DE RÉFÉRENCE

KOKURA

Exécuter, observer et enregistrer

De votre première ligne à l'exécution, à l'observation et aux nouveaux tests.
Copie des sources : 14 septembre 2026 · Édition anglaise de référence : 14 septembre 2026

Outil Windows prêt à l'emploi

Le dépôt contient kokura-cli.exe à sa racine. Téléchargez l'archive ZIP du dépôt et conservez les mentions de licence avec l'exécutable. Cet outil Windows x64 en ligne de commande ne nécessite aucune installation de Rust, Python ou .NET pour fonctionner. Les étapes de compilation ci-dessous servent à le reconstruire depuis les sources. Le code propre au projet est proposé par DAISUKE OBA sous licence MIT ; les conditions des dépendances sont conservées dans BINARY_NOTICES.md et licenses/.

1. À quoi sert KOKURA ?

KOKURA émule les logiciels GB/CGB et enregistre des observations sur l'image, le son, l'exécution du processeur, la mémoire, les banques, les commandes et les événements de diagnostic. L’exécutable en ligne de commande est kokura-cli.exe.

2. Compiler et lancer votre première ROM

powershell
Push-Location .\kokura
.\scripts\build.ps1
Pop-Location
.\kokura\kokura-cli.exe .\out\hello.gb --run-frames 120 --png .\out\hello.png --dump-report .\out\hello.json

Installez Rust et Cargo. Compilez la crate indiquée si vous n'avez besoin que de l'outil en ligne de commande. Utilisez la ROM hello du volume 1. Le nombre d'images par défaut est un ; précisez --run-frames pour atteindre la scène souhaitée. Cette valeur compte des images émulées, pas des secondes d'attente.

3. Choisir DMG ou CGB

--hardware auto est le réglage par défaut ; dmg et cgb imposent un modèle. Testez les ROM à deux modes sur les deux modèles. Le refus de démarrage d'une ROM réservée à la CGB en mode DMG n'indique pas, à lui seul, une panne de l'émulateur.

powershell
.\kokura\kokura-cli.exe .\out\game.gbc --hardware cgb --run-frames 180 --png .\out\cgb.png

4. Fournir des commandes

--input maintient une combinaison de boutons simultanés ; --input-seq fournit une séquence dans le temps. Les noms sont A,B,START,SELECT,UP,DOWN,LEFT,RIGHT ; utilisez NONE pour les intervalles sans bouton appuyé. Dans PowerShell, entourez de guillemets les séquences contenant des points-virgules.

powershell
.\kokura\kokura-cli.exe .\out\game.gb --run-frames 120 --input-seq "NONE:30;A:1;NONE:89" --png .\out\after_a.png --dump-report .\out\after_a.json

Prévoyez un intervalle de relâchement pour tester les nouveaux appuis. Maintenir A pendant 120 images n'équivaut pas à appuyer 120 fois sur A. Avec l'exercice du compteur d'appuis, la séquence ci-dessus doit incrémenter le compteur une seule fois.

5. Images, vidéo et audio

--png enregistre l'écran final. --screenshot, associé à --screenshot-frames, capture les images choisies. --record-video enregistre une vidéo et --record-wav l'audio. Il est normal d'obtenir un WAV silencieux à partir d'un programme hello qui n'utilise pas l'APU.

powershell
.\kokura\kokura-cli.exe .\out\sound.gb --run-frames 180 --record-wav .\out\sound.wav --record-wav-frames 1:180 --png .\out\sound.png
.\kokura\kokura-cli.exe .\out\game.gb --run-frames 180 --record-video .\out\play.gif --record-video-frames 30:120

Les plages s'écrivent start:end. Conservez le rapport pour distinguer les numéros d'images accumulés dans un état chargé des positions dans l'exécution courante. Vérifiez séparément le son audible, la hauteur, les coupures et l'écrêtage. Un enregistrement d'émulateur ne prouve pas une égalité échantillon par échantillon avec le matériel physique.

6. Sauvegarder et reprendre un état

powershell
.\kokura\kokura-cli.exe .\out\game.gb --run-frames 120 --save-state .\out\title.kqs
.\kokura\kokura-cli.exe .\out\game.gb --load-state .\out\title.kqs --input START --run-frames 30 --save-state .\out\started.kqs --png .\out\started.png

Utilisez normalement la même ROM et la même version de l'émulateur. Un état d'émulateur diffère de la sauvegarde propre au jeu. Les fichiers KQS de l'outil en ligne de commande et les états JSON de l'API C sont des formats distincts ; changer leur extension ne les rend pas interchangeables.

7. Observer les symboles et la mémoire

Les fichiers annexes .map, .source_map.txt, .dbg2.json et .build_report.json peuvent être détectés à côté de la ROM. Conservez chaque ROM avec les fichiers de sa compilation : ceux d'une autre version peuvent conduire à des observations trompeuses.

powershell
.\kokura\kokura-cli.exe .\out\game.gb --symbols .\out\game.map --watch-window wram:0xC000:0x40 --run-frames 60 --dump-report .\out\watch.json

wram est le nom de la fenêtre d'observation, 0xC000 son adresse de départ et 0x40 sa longueur. De petites fenêtres facilitent l'identification des variables modifiées. --watch-baseline-mode choisit une comparaison avec les valeurs initiales, l'image précédente ou une référence nommée.

8. Conditions d'arrêt, rejeu et rétroanalyse

--breakpoint, --watchpoint, --run-until et --snapshot-at arrêtent ou sauvegardent l'exécution selon des conditions. La syntaxe de leurs arguments diffère ; consultez la référence et l'aide enregistrée ci-dessous.

powershell
.\kokura\kokura-cli.exe .\out\game.gb --run-frames 120 --replay-interval 1 --replay-max-checkpoints 120 --dump-replay-tape .\out\baseline.replay.json --dump-report .\out\baseline.json
.\kokura\kokura-cli.exe .\out\game.gb --run-frames 120 --replay-interval 1 --compare-replay-tape .\out\baseline.replay.json --dump-report .\out\compare.json

Repérez la première divergence, puis observez un intervalle plus court autour d'elle. --decompile-out produit du pseudocode et des informations de flot de contrôle ; --disassemble-out affiche les instructions du processeur. La décompilation ne restaure pas parfaitement le code C d'origine ni les noms des variables.

9. Envoyer les diagnostics à SARAKURA

powershell
.\kokura\kokura-cli.exe .\out\game.gb --run-frames 300 --emit-diagnostics .\out\gb_events.jsonl --dump-report .\out\run.json
.\sarakura\target\debug\sarakura.exe gb analyze --metadata .\out\build.json --events .\out\gb_events.jsonl --out .\out\gb_report --fail-on error

Dans KOKURA, --emit-diagnostics reçoit un nom de fichier JSONL, par exemple out/gb_events.jsonl. Un rapport d'exécution JSON ordinaire ou une trace processeur JSONL ne constitue pas la même entrée qu'un fichier d'événements de diagnostic.

10. Tâches de communication

pair modélise deux machines. four_player_adapter organise des échanges logiques dans lesquels l'hôte sélectionne son correspondant. dmg07 modélise le protocole physique DMG-07. Fournissez une tâche JSON à --link-job ou configurez les sessions avec --link-topology et --link-session.

powershell
.\kokura\kokura-cli.exe --link-topology pair --run-frames 120 --link-session "name=p1|slot=0|rom=out/host.gb|input=NONE" --link-session "name=p2|slot=1|rom=out/peer.gb|input=NONE" --dump-report .\out\pair.json

Chaque ROM doit implémenter la communication. Exécuter deux programmes hello ordinaires ne teste pas la bibliothèque de liaison. Consignez la ROM, l'emplacement, les commandes et l'état de chaque session, et indiquez les comportements du périphérique physique qui restent non testés.

11. Applications externes

L'ABI C publiée se trouve dans kokura-capi ; l'accès Python est fourni par la passerelle et la crate Python. Établissez une reproduction minimale en ligne de commande avant d'examiner un problème d'intégration.

12. Lire les rapports dans l'ordre

Vérifiez d'abord le nombre d'images exécutées et le motif d'arrêt, puis l'écran, le résultat des commandes, le son, les erreurs et avertissements, et enfin le profil. Une longue observation d'un écran titre sans aucune entrée peut naturellement produire des avertissements d'écran statique ou de compteur ordinal répété. Comparez les avertissements à la scène attendue au lieu de considérer mécaniquement chacun d'eux comme une anomalie.

13. Exemples de commandes et syntaxe exacte des arguments

Exécutez ces commandes PowerShell depuis le répertoire parent des dépôts placés côte à côte. Créez d’abord le dossier de sortie avec New-Item -ItemType Directory -Force out. Remplacez out/game.gb par votre ROM. KOKURA place ses options après le chemin de la ROM ; il n’utilise pas la sous-commande run de KUROSAKI. --help affiche les options de l’exécutable installé.

13.1 Choisir une opération et une limite d’images

ArgumentRôle et comportement
ROMFichier ROM pour une exécution ordinaire. Une tâche ou une matrice peut fournir sa propre ROM.
--hardware auto, dmg, cgbSélection du matériel. La valeur par défaut est auto ; testez explicitement les deux modes pour un jeu compatible avec les deux machines.
--run-frames 120Nombre maximal d’images en exécution directe, fixé à 1 par défaut. Une condition d’arrêt peut terminer l’exécution plus tôt. Les séquences d’entrée ont aussi leurs propres durées.
--job out/test.jsonExécute une tâche JSON. Sa limite d’images se définit dans run.frames ; la ROM, l’état, les entrées et les captures proviennent de la tâche. Les chemins relatifs internes sont résolus par rapport au fichier de tâche.
--dump-report out/run.jsonEnregistre le rapport JSON obtenu. Sans destination, une exécution ordinaire écrit le rapport sur la sortie standard.
--regression-matrix out/matrix.jsonExécute des tâches accompagnées d’observations attendues. Examinez les résultats de chaque cas dans le JSON : la réussite de la commande ne signifie pas que tous les cas ont passé les vérifications.

Choisissez une opération par invocation. L’ordre de priorité est : décompilation, désassemblage, matrice de régression, tâche de liaison, sessions liées définies dans la commande, puis exécution ordinaire. Combiner les modes ne les exécute pas successivement.

powershell
.\kokura\kokura-cli.exe out/game.gb --hardware dmg --run-frames 120 --png out/game.png --dump-report out/run.json

Cette commande avance d’au plus 120 images émulées et enregistre l’écran final ainsi qu’un rapport. Vérifiez le nombre réel d’images et la raison de l’arrêt avant d’interpréter la capture.

13.2 Maintenir des boutons ou fournir une séquence temporisée

OptionSyntaxe et utilisation
--input "A,RIGHT"Maintient les deux boutons pendant une exécution directe. Les noms ne sont pas sensibles à la casse. NONE relâche tous les boutons.
--input-seq "NONE:30;A:1;NONE:89"Intervalles BUTTONS:FRAMES séparés par des points-virgules et exécutés dans l’ordre. Ici : relâchement pendant 30 images, appui sur A pendant une image, puis relâchement pendant 89 images.
--input-script "NONE:30;A:1;NONE:89"Accepte le même texte de séquence ; ce n’est pas un nom de fichier. Si les deux options de séquence sont présentes, --input-script a priorité.

Les noms de boutons sont RIGHT,LEFT,UP,DOWN,A,B,SELECT,START. Les masques hexadécimaux sont RIGHT=0x01, LEFT=0x02, UP=0x04, DOWN=0x08, A=0x10, B=0x20, SELECT=0x40 et START=0x80. Ce sont les masques d’entrée de KOKURA ; ne réutilisez pas ceux des manettes NES. Dans PowerShell, placez toute la séquence entre guillemets. Pour tester un nouvel appui, prévoyez des intervalles de relâchement et faites couvrir à la séquence toute la période d’observation souhaitée.

powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 120 --input-seq "NONE:30;A:1;NONE:89" --png out/after-a.png --dump-report out/after-a.json

Dans l’exemple du compteur de boutons, le compteur doit augmenter une fois. Une seule image fixe ne permet pas d’établir si la répétition d’un bouton maintenu fonctionne : comparez un appui prolongé à plusieurs appuis distincts.

13.3 Capturer l’écran, les mouvements et le son

OptionSyntaxe et utilisation
--png out/final.pngEnregistre l’écran final ; a priorité sur --screenshot si les deux sont présents.
--screenshot out/frame.pngAutre destination pour une capture d’écran. PNG et BMP sont pris en charge ; un chemin sans extension reçoit .png.
--screenshot-frames 30:32Enregistre chaque image sélectionnée en ajoutant son numéro au nom de fichier. Nécessite une destination de capture.
--record-wav out/audio.wavEnregistre le son au format WAV. Utilisez une ROM et un intervalle où du son est réellement joué.
--record-wav-frames 1:180Sélectionne l’intervalle d’enregistrement, bornes incluses. Il s’agit de numéros d’images, pas de nombres d’échantillons.
--record-video out/motion.gifEnregistre les mouvements en GIF ou Y4M. Un chemin sans extension reçoit .gif ; MP4 n’est pas un format accepté.
--record-video-frames 30:120Sélectionne l’intervalle vidéo, bornes incluses.
--audio-buffer-frames 8192Définit la capacité du tampon audio en trames d’échantillons stéréo, et non en images vidéo émulées ou en échantillons gauche/droite individuels.

Les intervalles de capture sont décimaux et commencent à 1 : 30 sélectionne une image, tandis que 30:32 inclut les images 30, 31 et 32. Zéro et les intervalles inversés sont rejetés. Les indices concernent l’exécution en cours : conservez donc le rapport lorsque vous reprenez un état antérieur. Créez les dossiers parents avant la capture.

powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 180 --record-wav out/audio.wav --record-wav-frames 1:180 --record-video out/motion.gif --record-video-frames 30:120

Examinez plusieurs images pour évaluer un défilement ou une animation. Évaluez le son avec le WAV ; un numéro de fin visible à l’écran ne prouve pas que le canal attendu a joué.

13.4 Enregistrer et reprendre l’état de la machine

OptionRôle et priorité
--save-state out/checkpoint.kqsEnregistre l’état de la machine en fin d’exécution.
--snapshot out/checkpoint.kqsMême rôle de sortie ; a priorité sur --save-state.
--load-state out/checkpoint.kqsCharge un état KQS avant l’exécution.
--resume-state out/checkpoint.kqsA priorité sur --load-state et peut remplacer l’état d’entrée d’une tâche.
--snapshot-at "frame=60&&frame_end=>out/frame60.kqs"Enregistre lorsqu’une condition d’observation est remplie. Répétez l’option pour plusieurs demandes. Sans =>path, un nom numéroté est dérivé du nom de la ROM dans le répertoire courant.

Utilisez un état correspondant à la ROM et à la version de l’émulateur. KQS représente l’état de la machine, pas la RAM de sauvegarde de la cartouche ni la sérialisation JSON de l’API C.

powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 120 --save-state out/title.kqs
.\kokura\kokura-cli.exe out/game.gb --resume-state out/title.kqs --input START --run-frames 30 --png out/started.png --snapshot out/started.kqs

13.5 Examiner des zones mémoire nommées

OptionSyntaxe et utilisation
--symbols out/game.mapCharge les symboles issus de la compilation correspondante.
--source-map out/game.source_map.txtAssocie l’exécution aux emplacements du code source.
--toolchain-metadata out/game.dbg2.jsonCharge les métadonnées structurées de la chaîne de compilation. Les fichiers compagnons correspondants peuvent aussi être détectés à côté de la ROM.
--watch-window "player:0xC700:16"Observe 16 octets à partir de 0xC700 sous le nom player. Répétez l’option pour d’autres zones. Elle observe la mémoire, mais n’arrête pas elle-même l’exécution.
--watch-baseline-mode initialCompare aux valeurs initiales. previous-frame compare des images successives ; named sélectionne une référence explicitement capturée.
--watch-baseline-tag readyChoisit le nom de la référence pour une comparaison nommée.
--capture-watch-baseline "ready=>frame=30&&frame_end"Capture une référence nommée lorsque la condition est remplie. Répétez pour d’autres références.
--watch-fields preview,diffChoisit les groupes de champs observés : hash, activity, preview, baseline, diff, insights ou all. Les octets d’aperçu ne constituent qu’un aperçu limité, pas un vidage mémoire sans limite.
--report-sections cpu,watched_memoryConserve les sections indiquées. meta et schema_version restent présents. Un nom inconnu ne crée pas de nouvelle section.
--report-minimal cpu,watched_memoryAutre entrée pour la liste des sections, prioritaire sur --report-sections. Exige des valeurs séparées par des virgules ; ce n’est pas un simple commutateur booléen.

Les adresses et tailles acceptent le décimal ou l’hexadécimal préfixé par 0x. Trouvez les variables avec les symboles de la compilation actuelle ; 0xC700 n’est ici qu’un exemple d’adresse, pas un emplacement standard du joueur.

powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 60 --watch-window "player:0xC700:16" --watch-fields preview,diff --report-sections cpu,watched_memory --dump-report out/watch.json

13.6 S’arrêter sur des événements d’exécution ou matériels

OptionSyntaxe et rôle
--breakpoint "pc:0x0150"S’arrête à une adresse CPU. symbol:main utilise les symboles ; ajoutez @bank:2 pour limiter la banque.
--watchpoint "player@0xC700+4"S’arrête lors d’une écriture dans une plage de quatre octets. Le préfixe facultatif nomme le point de surveillance ; sans +size, un seul octet est surveillé.
--stop-on-mmio "scroll@0xFF43"S’arrête lors d’une écriture dans le registre MMIO indiqué, ici SCX.
--stop-on-irq "vblank:serviced"Sélectionne une source d’interruption et une phase : requested, serviced, blocked ou any. Une phase seule correspond à toutes les sources.
--stop-on-dma oam_startSélectionne un événement DMA. Noms acceptés : oam_start, oam_complete, hdma_start, hdma_block, hdma_complete, hdma_cancel, gdma_stall, hdma_deferred, hdma_ignored.
--run-until "frame=60&&frame_end"S’arrête lorsque tous les termes d’une condition d’observation correspondent. Répétez l’option pour ajouter des demandes.

Les marqueurs de point d’arrêt pc:, symbol: et @bank: sont sensibles à la casse. Adresses mémoire et banques utilisent le décimal ou l’hexadécimal préfixé par 0x. Conservez une limite d’images même si vous demandez un arrêt dont la condition pourrait ne jamais se produire.

Les conditions d’observation utilisent && pour ET ; ce ne sont pas des expressions C. Les termes acceptés sont frame=, ly=, pc=, bank=, bank_pc=bank:pc, symbol=, source=, event=, ppu_mode= (ou mode=) et basis=. Les valeurs d’image et de LY sont décimales. Les termes de symbole, source et événement comparent du texte. Les valeurs de basis comprennent frame_start, frame_end, step, event, trace, snapshot, stop ; les termes seuls frame_start, frame_end, stop et vblank sont également acceptés. Les comparaisons telles que hp<10 ne font pas partie de cette grammaire.

powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 120 --breakpoint "pc:0x0150" --snapshot out/entry.kqs --dump-report out/entry.json
.\kokura\kokura-cli.exe out/game.gb --run-frames 120 --stop-on-mmio "scroll@0xFF43" --dump-report out/scroll-write.json

La première commande permet d’examiner le point d’entrée ; la seconde repère le code qui modifie le défilement horizontal. Vérifiez que l’arrêt demandé s’est effectivement produit.

13.7 Enregistrer des points d’observation et comparer les exécutions

OptionRôle
--trace-point "frame=30&&frame_end"Enregistre une observation lorsque la condition est remplie. Répétez pour plusieurs points.
--timeline-out out/timeline.jsonlEnregistre la chronologie des observations.
--trace-jsonl out/timeline.jsonlAutre destination de chronologie, prioritaire sur --timeline-out. Ne demande pas une trace exhaustive de toutes les instructions.
--timeline-format jsonlSélectionne jsonl (par défaut) ou csv ; choisissez vous-même l’extension correspondante.
--replay-interval 1Active les points de contrôle de rejeu et définit leur intervalle en images.
--replay-max-checkpoints 120Limite les points de contrôle conservés. Par défaut, le rejeu en conserve 16 avec un intervalle de 1.
--rewind-on-stop-frames 10Demande un retour en arrière après un arrêt, à partir de l’historique de rejeu conservé.
--stop-on-divergenceActive le comportement d’arrêt sur divergence du contrôleur de rejeu.
--dump-replay-tape out/baseline.jsonExporte les données de rejeu enregistrées. Il faut activer leur enregistrement pour les produire.
--compare-replay-tape out/baseline.jsonCompare avec un enregistrement de rejeu exporté. Pour une comparaison déterministe, utilisez la même ROM, les mêmes entrées et le même état initial.
--compare-replay-watch-onlyLimite la comparaison aux observations de la mémoire surveillée, sans la considérer comme une comparaison complète de la machine.
--snapshot-on-replay-mismatch out/mismatchFournit un préfixe aux fichiers d’investigation créés lorsqu’une différence est détectée.
powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 60 --replay-interval 1 --replay-max-checkpoints 60 --dump-replay-tape out/baseline.json --dump-report out/baseline-report.json
.\kokura\kokura-cli.exe out/game.gb --run-frames 60 --replay-interval 1 --replay-max-checkpoints 60 --compare-replay-tape out/baseline.json --dump-report out/compare.json

Vérifiez le résultat de la comparaison et la première différence dans le rapport. La seule production des deux fichiers ne signifie pas que la comparaison est réussie.

13.8 Diagnostics et investigation reproductible

OptionComportement réel
--emit-diagnostics out/events.jsonlExporte les événements de diagnostic pour SARAKURA.
--diagnostics-jsonl out/events.jsonlAutre destination des diagnostics en exécution directe ; --emit-diagnostics a priorité.
--repro-bundle out/repro.zipRegroupe un rapport, les événements de diagnostic et un manifeste. La ROM et les métadonnées sont référencées par chemin, sans être incorporées ; les captures, états et traces ne sont pas ajoutés automatiquement.
--break-on-diagnostic allExamine les diagnostics du rapport final pour déclencher la capture de fichiers d’investigation. Cela n’arrête pas le CPU à la première instruction fautive. Avec un filtre non vide, n’importe quel diagnostic final peut déclencher le chemin de capture.
--png-on-diagnostic out/diagnostic-imagesRépertoire de l’écran final lors d’une capture de diagnostic. Le nom du fichier est diagnostic_000001.png.
--snapshot-on-diagnostic out/diagnostic-statesRépertoire de sortie de diagnostic_000001.kqs. Ces captures reflètent l’état final actuel, pas l’instant initial de chaque événement.
--diagnostic-pack NAMEArgument accepté ; le chemin d’exécution n’applique pas de pack de diagnostics.
--diagnostic-rule RULEArgument accepté et répétable ; le chemin d’exécution n’applique pas ces sélections de règles.
--diagnostic-summary-limit NArgument accepté ; le chemin d’exécution n’applique pas cette limite de résumé.
powershell
.\kokura\kokura-cli.exe out/game.gb --run-frames 180 --emit-diagnostics out/events.jsonl --dump-report out/run.json --break-on-diagnostic all --png-on-diagnostic out/diagnostic-images --snapshot-on-diagnostic out/diagnostic-states --repro-bundle out/repro.zip

Pour arrêter sur une instruction ou une écriture précise, utilisez les options du débogueur en 13.6. Interprétez les diagnostics dans leur contexte : un écran-titre volontairement inactif peut produire des observations qui ne sont pas des défauts du jeu.

13.9 Désassembler les instructions ou examiner le pseudocode

OptionSyntaxe et rôle
--disassemble-out out/code.txtDécode les instructions de la ROM sans lancer la tâche ordinaire d’émulation.
--disassemble-range "0:0100-0150"Sélectionne BANK:START-END ; répétez pour plusieurs plages. Les trois nombres sont hexadécimaux, même sans 0x.
--disassemble-format texttext (par défaut), markdown ou json.
--decompile-out out/functions.jsonGénère du pseudocode et des informations de contrôle de flux.
--decompile-format jsonjson (par défaut), markdown ou text.
--decompile-function mainSélectionne une fonction ; répétez pour d’autres fonctions. Des symboles correspondants améliorent leur identification.
--decompile-allInclut toutes les fonctions nommées connues du décompilateur.
--decompile-annotations out/annotations.jsonLit des annotations au format JSON du décompilateur.
--decompile-trace out/trace.jsonLit les métadonnées de trace du décompilateur ; un journal de diagnostic JSONL quelconque ne peut pas les remplacer.
powershell
.\kokura\kokura-cli.exe out/game.gb --disassemble-range "0:0100-0150" --disassemble-out out/entry.txt --disassemble-format text
.\kokura\kokura-cli.exe out/game.gb --symbols out/game.map --decompile-function main --decompile-out out/main.md --decompile-format markdown

Le désassemblage permet de vérifier les instructions générées ; le pseudocode aide à parcourir le contrôle de flux. Aucun des deux ne restitue exactement le programme C d’origine. Conservez les symboles et métadonnées issus de la même compilation de la ROM.

13.10 Exécuter plusieurs machines liées

OptionSyntaxe et rôle
--link-job out/pair.jsonLit la topologie et les sessions d’une tâche de liaison JSON. Les chemins relatifs sont résolus depuis son répertoire.
--link-topology pairSélectionne pair, four_player_adapter ou dmg07 pour les sessions définies dans la commande.
--link-session SPECAjoute une session. Il en faut au moins deux. Dans PowerShell, placez entre guillemets la chaîne complète dont les champs sont séparés par des barres verticales.
--link-initial-peer-slot 1Choisit le correspondant initial lorsque la topologie permet cette sélection.

Les champs de session comprennent name, slot, rom, symbols, source_map, toolchain_metadata, load_state, save_state, input, input_sequence, audio_buffer_frames et watch_window. rom est obligatoire. Un champ de surveillance peut contenir plusieurs zones séparées par des virgules, par exemple a:0xC700:4,b:0xC710:4. Utilisez des programmes qui échangent réellement des données série ; deux écrans en cours d’exécution ne prouvent pas à eux seuls que la communication fonctionne.

Référence de syntaxe des commandes

L'aide ci-dessous a été enregistrée pour cette édition des sources. Consultez-la pour les arguments facultatifs, les valeurs par défaut et les valeurs acceptées. Remplacez les noms de fichiers illustratifs par vos propres sorties. Les réponses enregistrées des outils conservent leur texte d'origine.

kokura
help
Usage: kokura-cli.exe [OPTIONS] [ROM]

Arguments:
  [ROM]  

Options:
      --hardware <HARDWARE>
          [default: auto] [possible values: auto, dmg, cgb]
      --job <JOB>
          
      --link-job <LINK_JOB>
          
      --link-topology <LINK_TOPOLOGY>
          
      --link-initial-peer-slot <LINK_INITIAL_PEER_SLOT>
          
      --link-session <LINK_SESSIONS>
          
      --regression-matrix <REGRESSION_MATRIX>
          
      --run-frames <RUN_FRAMES>
          [default: 1]
      --input <INPUT>
          
      --input-seq <INPUT_SEQ>
          
      --load-state <LOAD_STATE>
          
      --resume-state <RESUME_STATE>
          
      --save-state <SAVE_STATE>
          
      --dump-report <DUMP_REPORT>
          
      --dump-replay-tape <DUMP_REPLAY_TAPE>
          
      --compare-replay-tape <COMPARE_REPLAY_TAPE>
          
      --snapshot-on-replay-mismatch <SNAPSHOT_ON_REPLAY_MISMATCH>
          
      --screenshot <SCREENSHOT>
          
      --png <PNG>
          
      --snapshot <SNAPSHOT>
          
      --trace-jsonl <TRACE_JSONL>
          
      --diagnostics-jsonl <DIAGNOSTICS_JSONL>
          
      --repro-bundle <REPRO_BUNDLE>
          
      --png-on-diagnostic <PNG_ON_DIAGNOSTIC>
          
      --snapshot-on-diagnostic <SNAPSHOT_ON_DIAGNOSTIC>
          
      --break-on-diagnostic <BREAK_ON_DIAGNOSTIC>
          
      --input-script <INPUT_SCRIPT>
          
      --screenshot-frames <SCREENSHOT_FRAMES>
          
      --record-wav <RECORD_WAV>
          
      --record-wav-frames <RECORD_WAV_FRAMES>
          
      --record-video <RECORD_VIDEO>
          
      --record-video-frames <RECORD_VIDEO_FRAMES>
          
      --audio-buffer-frames <AUDIO_BUFFER_FRAMES>
          
      --symbols <SYMBOLS>
          
      --source-map <SOURCE_MAP>
          
      --toolchain-metadata <TOOLCHAIN_METADATA>
          
      --watch-window <WATCH_WINDOWS>
          
      --watch-baseline-mode <WATCH_BASELINE_MODE>
          [default: initial] [possible values: initial, previous-frame, named]
      --watch-baseline-tag <WATCH_BASELINE_TAG>
          
      --capture-watch-baseline <CAPTURE_WATCH_BASELINE>
          
      --watch-fields <WATCH_FIELDS>
          
      --report-sections <REPORT_SECTIONS>
          
      --report-minimal <REPORT_MINIMAL>
          
      --snapshot-at <SNAPSHOT_AT>
          
      --run-until <RUN_UNTIL>
          
      --trace-point <TRACE_POINTS>
          
      --timeline-out <TIMELINE_OUT>
          
      --timeline-format <TIMELINE_FORMAT>
          [default: jsonl] [possible values: jsonl, csv]
      --breakpoint <BREAKPOINTS>
          
      --watchpoint <WATCHPOINTS>
          
      --stop-on-mmio <STOP_ON_MMIO>
          
      --stop-on-irq <STOP_ON_IRQ>
          
      --stop-on-dma <STOP_ON_DMA>
          
      --replay-interval <REPLAY_INTERVAL>
          
      --replay-max-checkpoints <REPLAY_MAX_CHECKPOINTS>
          
      --rewind-on-stop-frames <REWIND_ON_STOP_FRAMES>
          
      --stop-on-divergence
          
      --compare-replay-watch-only
          
      --decompile-out <DECOMPILE_OUT>
          
      --decompile-format <DECOMPILE_FORMAT>
          [default: json] [possible values: json, markdown, text]
      --decompile-function <DECOMPILE_FUNCTIONS>
          
      --decompile-all
          
      --decompile-annotations <DECOMPILE_ANNOTATIONS>
          
      --decompile-trace <DECOMPILE_TRACE>
          
      --disassemble-out <DISASSEMBLE_OUT>
          
      --disassemble-format <DISASSEMBLE_FORMAT>
          [default: text] [possible values: json, markdown, text]
      --disassemble-range <DISASSEMBLE_RANGES>
          
      --emit-diagnostics <EMIT_DIAGNOSTICS>
          
      --diagnostic-pack <DIAGNOSTIC_PACK>
          
      --diagnostic-rule <DIAGNOSTIC_RULES>
          
      --diagnostic-summary-limit <DIAGNOSTIC_SUMMARY_LIMIT>
          
  -h, --help
          Print help