KITAQ SERIES • ÉDITION DE RÉFÉRENCE
VÉRIFICATION
Capture de l’exécution
Copie des sources : 14 septembre 2026 · Édition anglaise de référence : 14 septembre 2026
Vérification du compilateur natif
Les constructions natives et vérifications d'exécution ont réussi sous Windows, Linux, macOS ARM et macOS Intel. KITAQGB a passé 48 tests et 395 vérifications d'outils par environnement ; KITAQFC en a passé 55 et 401. Rust 1.85 a également été testé. PUBLIC_DISTRIBUTION.json consigne les empreintes des binaires installés et la provenance des validations. Les workflows GitHub Actions publics reconstruisent et testent ces sources indépendamment.
Les sorties de référence conservées vérifient les octets ROM, les diagnostics et les formats des outils. Les anciennes preuves d'émulation C# restent des résultats historiques liés à leurs empreintes sources. Elles ne prouvent pas automatiquement toutes les API Rust, le matériel réel ou le démarrage complet d'un jeu par le BIOS FDS. Le script PNG d'origine, indisponible, a été réimplémenté d'après sa spécification ; l'identité des octets avec ce script ne peut être affirmée.
Bibliothèque locale : changements et vérification du 2026-10-03
Les sources de C:/kitaqgb_project/lib ont été comparées à la révision publique 2de7f4b. Les dates seules ne déterminent pas la version la plus récente. La version locale comporte des ajouts ; la version publique contient d’autres ajouts et corrections. Cette section décrit les sources locales conservées, séparément des preuves existantes de l’API publique.
physics2d.c conserve l’API de contact et ajoute des implémentations avec cache pour les contacts et la limite de vitesse sous KQ2D_CACHE_SURFACE. Réservez la banque ROM 13 si vous l’activez. Définir KQ2D_EXTERNAL_SCALE_Q8, KQ2D_EXTERNAL_REST_COMPONENT ou KQ2D_EXTERNAL_SURFACE exige de fournir l’implémentation correspondante. Les 8 872 cas ci-dessous utilisent le chemin par défaut, sans ces définitions.
KQ3D_BODY_SPHERE=0x04 sélectionne les contacts sphère–boîte. Le rayon est half_x. kq3d_overlap_sphere_aabb(sphere, box) inclut la tangence et renvoie 0 si un pointeur est NULL ou si le rayon est nul ou négatif. Aucun solveur dédié aux paires de sphères n’est fourni. Gardez différences, produits et sommes des carrés dans leurs plages de 16 bits.
Un body actif portant KQ3D_BODY_KINEMATIC=0x02 met à jour vitesse et position X/Y dans kq3d_step, même avec une masse inverse nulle. Sa position et sa vitesse Z restent inchangées. Les contacts ne déplacent pas un body de masse inverse nulle. kq3d_integrate_body ignore toujours les bodies statiques. break_speed et KQ3D_BODY_BROKEN ne déclenchent aucune destruction automatique.
Le bank_switch local écrit kq_bank_current et l’adresse 0x2000. Contrairement au chemin public __bankswitch, il ne met pas à jour le suivi de banque du compilateur. Changez de banque depuis la banque fixe ; utilisez __bankswitch si l’état de restauration doit aussi être maintenu.
Les fonctions locales cgb_bg_color/cgb_obj_color et leurs enveloppes RGB unitaires n’activent pas l’incrément automatique de l’index. L’exécution CGB confirme que l’octet bas de 0x1234 est écrasé par 0x12. Utilisez la correction publique ou une API colors prenant un tableau. Aucun accès en écriture n’est effectué sur DMG.
Le metasprite_draw local étend le compteur à first_id+count uniquement après achèvement. Un retour anticipé à la limite de 40 sprites ne le met pas à jour. Avec first_id=39 et count=2, le résultat est 1, l’emplacement 39 est actif et le compteur vaut 0. La version publique actualise le compteur à chaque emplacement traité.
La version locale fournit vram_get_queue_used et vram_get_queue_free, mais pas le vram_get_queue_capacity public. La capacité est VRAM_QUEUE_MAX, soit 32 par défaut. Une commande donne used=1 et free=31.
wire3d_dmg.h déclare DrawRect2D uniquement pour le profil de 96 lignes. DrawBoxEdges2D est déclaré pour les deux profils, DrawIndexedEdges seulement pour 120 lignes. Choisissez une seule source adaptée au profil. Le rendu de ces fonctions n’a pas été revérifié ici. Aucune implémentation de DrawRect2D ou DrawBoxEdges2D n’a été trouvée dans les sources lib conservées. Ce sont des déclarations seules ; leur appel exige une implémentation séparée.
Le audio_vblank local ne contient ni AudioVBlank_QueueReset/QueueRefill/QueuePlay ni audio_vblank_queue.inc de la version publique. ZX0 n’existe également que dans la version publique. Ces ajouts sont exclus des fonctions locales déclarées vérifiées.
kq3d_overlap_sphere_aabb
u8 kq3d_overlap_sphere_aabb(const KQBody3D* sphere, const KQBody3D* box);KQ3D_BODY_SPHERE=0x04 sélectionne les contacts sphère–boîte. Le rayon est half_x. kq3d_overlap_sphere_aabb(sphere, box) inclut la tangence et renvoie 0 si un pointeur est NULL ou si le rayon est nul ou négatif. Aucun solveur dédié aux paires de sphères n’est fourni. Gardez différences, produits et sommes des carrés dans leurs plages de 16 bits.
Vérifications exécutées
Chemin 2D par défaut : 8 872 cas réussis via l’API C de KOKURA, avec sélection automatique du matériel. Limite de vitesse, contacts, multiplication Q8 signée et instant de contact ont été contrôlés. Il ne s’agit pas de deux exécutions DMG/CGB explicitement sélectionnées.
Limites physiques : 19 cas sur DMG et CGB, soit 38 exécutions réussies. Les essais séparés d’extensions 3D et de reproduction sprite/VRAM/palette correspondent aux attentes dans les deux modes. Les résultats palette et sprite reproduisent des défauts ; ils ne valident pas un fonctionnement correct.
Ces essais sur émulateur concernent les ROM produites par le compilateur C#. Ils ne prouvent ni l’équivalence Rust, ni le matériel réel, ni l’audio, ni le rendu, ni la validité de toutes les API. Les images et essais existants restent des résultats historiques liés aux empreintes de sources enregistrées.
Empreintes des sources, entrées, valeurs attendues et observées, procédure de reproduction · evidence.tar.gz · verify_rom_cases.py · verify_surface.py
Captures d’écran
Les captures de l’émulateur accompagnent les explications des exemples. Comparez la sortie au résultat attendu indiqué ; une image seule ne permet pas de vérifier le son, les entrées de la manette, les périphériques ou le matériel réel.
Afficher le jeu de caractères fourni gb_font
Objectif : Présente les lettres, chiffres et signes de ponctuation de la police originale fournie, ainsi que leur affichage.
Fonctionnement : m_init prépare l’affichage et la police. m_text dessine chaque ligne ; m_put dessine le guillemet double avec le code de caractère 34.
Commandes et résultat attendu : Repérez les 26 lettres majuscules, les 26 minuscules, les 10 chiffres et les 30 signes de ponctuation. Vérifiez que chaque glyphe est lisible. Aucune saisie n’est nécessaire.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Votre premier affichage de texte gb_hello
Objectif : Présente les étapes de base pour démarrer une ROM et dessiner du texte et un nombre sur le fond.
Fonctionnement : Après m_init, m_text dessine le message d’accueil et m_number formate 42. La boucle finale attend les images en conservant l’affichage.
Commandes et résultat attendu : L’écran affiche HELLO WORLD et 042. Le zéro initial provient du format décimal sur trois chiffres.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Calculer avec un intermédiaire plus large gb_arithmetic
Objectif : Montre comment conserver un résultat intermédiaire qui dépasse huit bits.
Fonctionnement : (u16)200 + 100 donne 300. Le programme divise ce résultat par 10, puis le convertit en u8 pour l’afficher. Notez que la conversion vers le type plus large précède l’addition.
Commandes et résultat attendu : 030 représente le résultat calculé, 30.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Branchements et boucles gb_control
Objectif : Essaie for, continue, while, do/while et switch dans un petit calcul.
Fonctionnement : Additionner 0 à 7 en sautant 3 donne 25. La boucle while avance jusqu’à 30, do/while jusqu’à 32, puis switch choisit case 32 pour affecter 42.
Commandes et résultat attendu : 042 est le résultat final de ces boucles et branchements.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Fonctions, tableaux, structures et pointeurs gb_aggregate
Objectif : Montre comment regrouper des valeurs et y accéder par des fonctions et des pointeurs.
Fonctionnement : Le programme copie un Point contenant (10,20), puis écrit de 1 à 4 dans un tableau via un pointeur. Il additionne le résultat de fonction 30, les valeurs du tableau 1, 2 et 4 et la constante 5.
Commandes et résultat attendu : La somme est affichée sous la forme 042. Suivez la copie de structure, les écritures dans ptr[i] et la valeur renvoyée par la fonction.
![Fonctions, tableaux, structures et pointeurs : La somme est affichée sous la forme 042. Suivez la copie de structure, les écritures dans ptr[i] et la valeur renvoyée par la fonction.](../verification/gb_aggregate.png)
Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Drapeaux binaires et copie de tampon gb_bits_memory
Objectif : Regroupe des drapeaux dans un octet et copie un tampon dans une zone distincte.
Fonctionnement : __memset efface quatre octets. Le programme active le bit 3, inverse le bit 1, puis copie les quatre octets avec __memcpy.
Commandes et résultat attendu : le premier octet de destination est affiché sous la forme 010 ; le bit 3 apporte 8 et le bit 1 apporte 2.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Compter les nouveaux appuis sur un bouton gb_input
Objectif : Distingue un nouvel appui sur un bouton d’un bouton maintenu enfoncé.
Fonctionnement : Chaque image appelle input_update. Le compteur n’avance que si input_pressed(BTN_A) est vrai.
Commandes et résultat attendu : le compteur commence à 000. Appuyez sur A pour obtenir 001 ; maintenir le bouton n’ajoute rien. Relâchez-le puis appuyez de nouveau pour obtenir 002. Le compteur sur un octet revient de 255 à 000.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Multiplier des valeurs à virgule fixe Q8.8 gb_fixed
Objectif : Présente la conversion d’entier en Q8.8, la multiplication et le retour à un entier.
Fonctionnement : fix_from_int convertit 3 et 4 en Q8.8. fix_mul les multiplie, puis fix_to_int reconvertit le produit en entier.
Commandes et résultat attendu : 012 signifie 3 × 4 = 12. C’est l’entier converti, pas la valeur interne multipliée par 256.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Allouer dans un pool fixe d’objets gb_entity
Objectif : Crée un objet dans un ensemble fixe d’emplacements, sans allocation dynamique.
Fonctionnement : entity_init réinitialise le pool. entity_create crée un objet de type 1 en (20,30) ; le programme vérifie l’ID d’échec 0xFF avant de fixer vx à 2.
Commandes et résultat attendu : 001 est le nombre d’objets actifs, pas un ID ni une coordonnée. Cet exemple ne met pas à jour et ne dessine pas l’objet ; aucun personnage ne se déplace donc à l’écran.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Enregistrer une valeur de diagnostic en RAM gb_debug
Objectif : Conserve une valeur de jeu nommée dans un tampon de diagnostic, indépendamment de l’affichage.
Fonctionnement : Le programme initialise le débogage, fixe l’étiquette d’image à 1 et enregistre la valeur 42 sous le nom HP.
Commandes et résultat attendu : 001 est le nombre d’entrées de trace. HP=42 est stocké dans le tampon de diagnostic ; l’écran seul ne montre ni ne vérifie ce contenu.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Stocker un historique de positions gb_chain
Objectif : Montre comment stocker un historique de positions dans un tampon circulaire.
Fonctionnement : chain_init associe un tableau pouvant contenir quatre points. chain_push_head enregistre ensuite (20,30).
Commandes et résultat attendu : 042 est un repère fixe de fin, pas une coordonnée ni un compteur. Examinez trail et points pour vérifier l’historique stocké. Ce programme ne dessine pas de corps suiveur.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Lire le compteur d’images de la bibliothèque gb_system
Objectif : Montre l’effet des attentes comptées en images sur le compteur d’images de la bibliothèque.
Fonctionnement : Après system_init, le programme appelle deux fois system_wait_vblank et affiche system_get_frame8.
Commandes et résultat attendu : Le résultat est 002. La boucle d’attente utilise la fonction utilitaire m_wait du manuel ; la valeur affichée ne continue donc pas à augmenter.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Sélectionner l’ID de la scène courante gb_scene
Objectif : Montre comment sélectionner un ID pour distinguer des scènes, comme le titre et la partie en cours.
Fonctionnement : Le programme enregistre deux entrées SceneDef initialisées à zéro et sélectionne l’ID 1 avec scene_change.
Commandes et résultat attendu : 001 est l’ID courant renvoyé par scene_get_current. Cet exemple n’enregistre ni callbacks de scène ni dessin de transition.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Afficher le jeu de caractères fourni fc_font
Objectif : Présente les lettres, chiffres et signes de ponctuation de la police originale fournie, ainsi que leur affichage.
Fonctionnement : m_init prépare l’affichage et la police. m_text dessine chaque ligne ; m_put dessine le guillemet double avec le code de caractère 34.
Commandes et résultat attendu : Repérez les 26 lettres majuscules, les 26 minuscules, les 10 chiffres et les 30 signes de ponctuation. Vérifiez que chaque glyphe est lisible. Aucune saisie n’est nécessaire.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Votre premier affichage de texte fc_hello
Objectif : Présente les étapes de base pour démarrer une ROM et dessiner du texte et un nombre sur le fond.
Fonctionnement : Après m_init, m_text dessine le message d’accueil et m_number formate 42. La boucle finale attend les images en conservant l’affichage.
Commandes et résultat attendu : L’écran affiche HELLO WORLD et 042. Le zéro initial provient du format décimal sur trois chiffres.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Calculer avec un intermédiaire plus large fc_arithmetic
Objectif : Montre comment conserver un résultat intermédiaire qui dépasse huit bits.
Fonctionnement : (u16)200 + 100 donne 300. Le programme divise ce résultat par 10, puis le convertit en u8 pour l’afficher. Notez que la conversion vers le type plus large précède l’addition.
Commandes et résultat attendu : 030 représente le résultat calculé, 30.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Branchements et boucles fc_control
Objectif : Essaie for, continue, while et if/else dans un petit calcul.
Fonctionnement : La boucle for additionne les valeurs de 0 à 7 en sautant 3, ce qui donne 25. La boucle while avance jusqu’à 32 ; le if suivant affecte 42 lorsque cette valeur est atteinte.
Commandes et résultat attendu : 042 est le résultat final. Ce programme utilise un branchement if/else.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Fonctions, tableaux, structures et pointeurs fc_aggregate
Objectif : Montre comment regrouper des valeurs et y accéder par des fonctions et des pointeurs.
Fonctionnement : Le programme copie un Point contenant (10,20), puis écrit de 1 à 4 dans un tableau via un pointeur. Il additionne le résultat de fonction 30, les valeurs du tableau 1, 2 et 4 et la constante 5.
Commandes et résultat attendu : La somme est affichée sous la forme 042. Suivez la copie de structure, les écritures dans ptr[i] et la valeur renvoyée par la fonction.
![Fonctions, tableaux, structures et pointeurs : La somme est affichée sous la forme 042. Suivez la copie de structure, les écritures dans ptr[i] et la valeur renvoyée par la fonction.](../verification/fc_aggregate.png)
Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Drapeaux binaires et copie de tampon fc_bits_memory
Objectif : Regroupe des drapeaux dans un octet et copie un tampon dans une zone distincte.
Fonctionnement : __memset efface quatre octets. Le programme active le bit 3, inverse le bit 1, puis copie les quatre octets avec __memcpy.
Commandes et résultat attendu : le premier octet de destination est affiché sous la forme 010 ; le bit 3 apporte 8 et le bit 1 apporte 2.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Compter les nouveaux appuis sur un bouton fc_input
Objectif : Distingue un nouvel appui sur un bouton d’un bouton maintenu enfoncé.
Fonctionnement : Chaque image appelle input_update. Le compteur n’avance que si input_pressed(BTN_A) est vrai.
Commandes et résultat attendu : le compteur commence à 000. Appuyez sur A pour obtenir 001 ; maintenir le bouton n’ajoute rien. Relâchez-le puis appuyez de nouveau pour obtenir 002. Le compteur sur un octet revient de 255 à 000.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Multiplier des valeurs à virgule fixe Q8.8 fc_fixed
Objectif : Présente la conversion d’entier en Q8.8, la multiplication et le retour à un entier.
Fonctionnement : fix_from_int convertit 3 et 4 en Q8.8. fix_mul les multiplie, puis fix_to_int reconvertit le produit en entier.
Commandes et résultat attendu : 012 signifie 3 × 4 = 12. C’est l’entier converti, pas la valeur interne multipliée par 256.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Allouer dans un pool fixe d’objets fc_entity
Objectif : Crée un objet dans un ensemble fixe d’emplacements, sans allocation dynamique.
Fonctionnement : entity_init réinitialise le pool. entity_create crée un objet de type 1 en (20,30) ; le programme vérifie l’ID d’échec 0xFF avant de fixer vx à 2.
Commandes et résultat attendu : 001 est le nombre d’objets actifs, pas un ID ni une coordonnée. Cet exemple ne met pas à jour et ne dessine pas l’objet ; aucun personnage ne se déplace donc à l’écran.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Enregistrer une valeur de diagnostic en RAM fc_debug
Objectif : Conserve une valeur de jeu nommée dans un tampon de diagnostic, indépendamment de l’affichage.
Fonctionnement : Le programme initialise le débogage, fixe l’étiquette d’image à 1 et enregistre la valeur 42 sous le nom HP.
Commandes et résultat attendu : 001 est le nombre d’entrées de trace. HP=42 est stocké dans le tampon de diagnostic ; l’écran seul ne montre ni ne vérifie ce contenu.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Stocker un historique de positions fc_chain
Objectif : Montre comment stocker un historique de positions dans un tampon circulaire.
Fonctionnement : chain_init associe un tableau pouvant contenir quatre points. chain_push_head enregistre ensuite (20,30).
Commandes et résultat attendu : 042 est un repère fixe de fin, pas une coordonnée ni un compteur. Examinez trail et points pour vérifier l’historique stocké. Ce programme ne dessine pas de corps suiveur.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Lire le compteur d’images de la bibliothèque fc_system
Objectif : Montre l’effet des attentes comptées en images sur le compteur d’images de la bibliothèque.
Fonctionnement : Après system_init, le programme appelle deux fois system_wait_vblank et affiche system_get_frame8.
Commandes et résultat attendu : Le résultat est 002. La boucle d’attente utilise la fonction utilitaire m_wait du manuel ; la valeur affichée ne continue donc pas à augmenter.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Sélectionner l’ID de la scène courante fc_scene
Objectif : Montre comment sélectionner un ID pour distinguer des scènes, comme le titre et la partie en cours.
Fonctionnement : Le programme enregistre deux entrées SceneDef initialisées à zéro et sélectionne l’ID 1 avec scene_change.
Commandes et résultat attendu : 001 est l’ID courant renvoyé par scene_get_current. Cet exemple n’enregistre ni callbacks de scène ni dessin de transition.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Convertir les coordonnées du monde en coordonnées d’écran gb_camera
Objectif : Soustrait la position de la caméra pour obtenir la position à l’écran d’un point du monde.
Fonctionnement : Camera_Set reçoit la valeur Q8.8 2560, soit X=10 pixels. Camera_WorldToScreenX convertit ensuite la coordonnée du monde X=52.
Commandes et résultat attendu : 052 moins 010 donne le 042 affiché. C’est un calcul de coordonnées ; le fond ne défile pas.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Décompresser des données RLE en RAM gb_rle
Objectif : Essaie une représentation compacte des octets répétés sous forme de paires nombre/valeur.
Fonctionnement : Les octets compressés {3,42,0} représentent trois copies de 42, suivies d’un terminateur de compte nul. rle_decode écrit dans une destination de trois octets.
Commandes et résultat attendu : le dernier octet, out[2], est affiché sous la forme 042. Les trois octets décompressés doivent tous contenir 42.
![Décompresser des données RLE en RAM : le dernier octet, out[2], est affiché sous la forme 042. Les trois octets décompressés doivent tous contenir 42.](../verification/gb_rle.png)
Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Lire et écrire une case du plateau gb_board
Objectif : Montre comment les coordonnées d’une grille correspondent au stockage d’un jeu de plateau.
Fonctionnement : Un tableau de 16 octets stocke un plateau de 4×4. Le programme l’efface, écrit 42 dans la case (2,1), puis relit cette case.
Commandes et résultat attendu : 042 est la valeur relue. Le programme ne dessine pas le plateau de 4×4 lui-même.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Faire avancer une boîte d’un pas de physique gb_physics
Objectif : Initialise un monde et un corps rectangulaire, puis met à jour la position à partir de la vitesse.
Fonctionnement : Le corps démarre en (40,40), avec une vitesse (2,0) et une gravité nulle. Le programme appelle kq2d_step une fois.
Commandes et résultat attendu : 042 est la coordonnée X obtenue, mesurée ici en pixels entiers. Aucune boîte ni animation continue n’est dessinée.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Gérer la fin d’un transfert série et le dépassement du délai gb_link
Objectif : Distingue un transfert terminé d’un transfert qui n’aboutit pas dans le délai d’attente.
Fonctionnement : Le maître envoie 42 et attend avec Link_WaitByte. À la fin du transfert, l’octet reçu est affiché ; en cas de délai dépassé, le transfert est annulé et zéro est affiché.
Commandes et résultat attendu : Un transfert terminé sans connexion peut renvoyer 255. Un délai dépassé affiche 000 ; avec un pair connecté, l’écran montre l’octet reçu. Le résultat n’est pas toujours 042.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Lire des données ROM avec un argument de banque gb_bank
Objectif : Présente les arguments nécessaires pour copier des données de la ROM vers la RAM.
Fonctionnement : far_data_read copie les deux octets 7 et 42 dans copied, avec l’argument de banque 0 et une longueur de 2.
Commandes et résultat attendu : Le deuxième octet de destination est affiché sous la forme 042. L’exemple lit la ROM fixe ; il n’illustre pas un transfert entre différentes banques commutables.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Charger des données par ID de ressource gb_asset
Objectif : Enregistre l’emplacement et la longueur d’une ressource, puis récupère ses octets par ID.
Fonctionnement : La ressource 0 est de type RAW, dans la banque 0, avec un pointeur vers {7,42} et une longueur de 2. asset_load_raw la copie dans un tampon RAM de deux octets.
Commandes et résultat attendu : Le deuxième octet est affiché sous la forme 042. Cet exemple illustre la recherche et la copie d’une ressource, pas le rendu d’une image.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Allouer un projectile gb_danmaku
Objectif : Initialise le pool de projectiles et examine son occupation après une création.
Fonctionnement : Après danmaku_reset, le programme appelle danmaku_spawn(40,40,16,0) et affiche dm_count.
Commandes et résultat attendu : 001 est le nombre de projectiles alloués. Il n’y a ici ni boucle de mise à jour des projectiles ni composition du fond ; aucun projectile mobile n’est dessiné.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Cumuler un déplacement fractionnaire Q5.3 fc_subpixel
Objectif : Conserve le déplacement inférieur au pixel sous forme de reste et reporte les pixels entiers dans la position.
Fonctionnement : À partir de X=40, la boucle ajoute huit fois 2/8 de pixel. Un décalage à droite extrait les pixels entiers ; un masque conserve le reste.
Commandes et résultat attendu : le déplacement total est de deux pixels, donc X=42 s’affiche sous la forme 042. Cet exemple d’intégration manuelle traite les déplacements positifs ; les négatifs nécessitent une gestion correspondante de l’emprunt.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Définir une palette de fond CGB gb_cgb_palette
Objectif : Choisit les couleurs du fond et du texte à partir des composantes RGB de la Game Boy Color.
Fonctionnement : Le programme désactive le LCD pendant le VBlank, règle la couleur 0 de la palette 0 sur le blanc (31,31,31) et la couleur 3 sur le violet (12,0,22), puis réactive l’affichage.
Commandes et résultat attendu : Exécutez en mode CGB pour voir le texte violet et 042 sur fond blanc. L’affichage monochrome DMG ne peut pas montrer ces couleurs.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Faire défiler le fond horizontalement gb_scroll
Objectif : Déplace le point de vue sans redessiner le contenu du fond.
Fonctionnement : Chaque image incrémente phase et le transmet à Scroll_SetBg. La position sur huit bits revient à zéro après 255.
Commandes et résultat attendu : Le mot SCROLL se déplace vers la gauche. Observez sa position au fil du temps ; une seule capture ne peut pas montrer le mouvement.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Mettre une mise à jour de tuile en file gb_vram_queue
Objectif : Sépare une demande de dessin du transfert VRAM qui l’applique.
Fonctionnement : vram_queue_bg_tile met en file la tuile 52 à la coordonnée (3,8), puis vram_flush la transfère. Dans la police fournie, la tuile 52 correspond au chiffre 4.
Commandes et résultat attendu : Repérez un seul 4 à la coordonnée de tuile du fond (3,8). Il s’agit d’une mise à jour de tuile, pas d’un compteur numérique.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Afficher un sprite par DMA OAM gb_sprite
Objectif : Alloue et affiche un sprite indépendamment du fond.
Fonctionnement : Le pool initialisé fournit l’emplacement 0. Le programme choisit la tuile 65, fixe la position (70,80), active l’affichage OBJ et transfère l’OAM miroir à chaque image.
Commandes et résultat attendu : Une lettre A immobile apparaît à la position de sprite indiquée. Dans un jeu, vérifiez l’échec éventuel de l’allocation avant d’utiliser l’ID renvoyé.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Générer une valeur aléatoire reproductible gb_rng
Objectif : Utilise une graine pour reproduire une séquence pseudo-aléatoire.
Fonctionnement : rng_seed(1234) initialise le générateur, puis rng_range(10) est appelé une fois. La borne supérieure 10 est exclue.
Commandes et résultat attendu : L’écran affiche une valeur entre 000 et 009. Relancer le même programme avec la même graine reproduit cette valeur ; elle ne change pas à chaque image.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Stocker un drapeau d’état du jeu gb_flags
Objectif : Représente un état booléen, comme l’achèvement d’un événement, par un numéro de drapeau.
Fonctionnement : Le programme efface le drapeau 12, le définit, puis le relit avec flag_get.
Commandes et résultat attendu : 001 signifie que le drapeau 12 est vrai. Cet exemple utilise des drapeaux en RAM et ne les conserve pas après extinction.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Faire avancer un cercle d’un pas de physique gb_circle
Objectif : Configure un corps circulaire et met à jour sa position à partir de sa vitesse.
Fonctionnement : Le cercle actif a un rayon de 4, une position (40,40) et une vitesse (2,0). La gravité est nulle et linear_damping_q8 vaut 255 ; kq2dc_step s’exécute une fois.
Commandes et résultat attendu : 042 est la coordonnée X entière obtenue. Cet exemple ne dessine ni contour de cercle ni animation de collision.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Faire défiler le fond NES fc_scroll
Objectif : Déplace le fond en modifiant la position de défilement du PPU.
Fonctionnement : À partir de __scroll_set(0,0), le programme incrémente phase une fois par image et l’utilise comme position horizontale.
Commandes et résultat attendu : Le mot SCROLL change de position horizontale. phase revient de 255 à 0. Ce n’est pas un exemple de grande carte couvrant plusieurs tables de noms.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Appliquer une mise à jour de tuile par NMI fc_vram_queue
Objectif : Soumet une mise à jour PPU depuis le programme principal pour que le traitement NMI l’applique.
Fonctionnement : __vramq_put met en file la tuile 52 à l’adresse de table de noms 0x2103, puis __vramq_commit la soumet. Cette adresse correspond à la coordonnée de tuile (3,8).
Commandes et résultat attendu : Un seul 4 apparaît à la coordonnée du fond (3,8). La tuile 52 est le chiffre 4 dans la police fournie.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Afficher un sprite OAM NES fc_sprite
Objectif : Prépare les couleurs des sprites et les données OAM pour dessiner une image indépendamment du fond.
Fonctionnement : Le programme charge la palette des sprites, règle l’entrée 0 sur la position (70,80), la tuile 65 et les attributs 0, active le rendu et répète le DMA OAM.
Commandes et résultat attendu : Une lettre A immobile apparaît comme sprite. L’exemple montre la configuration et le transfert OAM, pas une animation.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Jouer un son pulsé avec l’APU fc_sound
Objectif : Règle les valeurs de contrôle, de temporisation et de longueur du canal pulsé intégré de la NES.
Fonctionnement : Après nes_apu_init, le programme appelle nes_sfx_square1(0xBF,400,20). Le contrôle 0xBF choisit un volume constant et arrête le compteur de longueur ; le son se prolonge donc. 20 est un indice de table de longueurs, pas une durée de 20 images.
Commandes et résultat attendu : Un son pulsé soutenu joue pendant l’affichage de 042. Appelez nes_apu_silence_all pour l’arrêter. Le repère affiché seul ne vérifie pas la sortie sonore.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques
Traiter un effet sonore à chaque image gb_sound
Objectif : Démarre un flux d’effet sonore et le fait progresser par des mises à jour régulières à chaque image.
Fonctionnement : Après Audio_Init, Audio_PlaySFX lance tone sur le canal d’ID 1. La boucle principale appelle Audio_Update une fois par image.
Commandes et résultat attendu : Un bref effet sonore pulsé joue pendant que 042 reste affiché. Ce nombre est un repère fixe, pas le volume ni la position de lecture. Évaluez le son à l’écoute ou à partir d’un enregistrement.

Revenir à l’exemple du manuel du compilateur / Revenir à l’exemple du manuel des bibliothèques