KITAQ DEVELOPMENT SYSTEM
USER'S MANUAL 2026.09

KITAQ SERIES • REFERENCE EDITION

VERIFICATION

確認した実行画面

初めての一行から、実行・観測・再テストまで。
ローカルソース採取:2026年9月14日

ネイティブコンパイラの検証

Windows・Linux・macOS ARM・macOS Intelでネイティブビルドと実行検証が成功しています。KITAQGBは各環境48件のテストと395件の補助ツール検証、KITAQFCは55件と401件が成功しました。Rust 1.85でも確認済みです。PUBLIC_DISTRIBUTION.jsonに配置済みバイナリのハッシュと検証の出典を記録しています。公開GitHub Actionsでもこのソースを独立してビルド・検証します。

保存済みの比較データでROMのバイト列、診断と補助ツールの形式を検証しています。以前のC#版によるエミュレータ検証は、そのソース指紋に対応する過去の記録として残しています。これだけでRust版の全API、実機動作、FDSのBIOS経由のゲーム起動を保証するものではありません。元のPNG変換スクリプトは入手できないため仕様から再実装し、元スクリプトとのバイト一致は確認できません。

KITAQGB · SHA-256 · KITAQFC · SHA-256

2026-10-03 ローカル版ライブラリの差分と検証

C:/kitaqgb_project/lib のソースを、公開版 2de7f4b と比較しました。更新日時だけでは最新版を決められません。ローカル版には追加機能があり、公開版には別の追加機能と修正があります。以下は保存したローカルソースの契約です。従来の公開版APIの検証結果とは対象を区別します。

physics2d.c は既存の接触APIを保ち、KQ2D_CACHE_SURFACE による接触・速度制限のキャッシュ実装を追加しています。この設定はROMバンク13を使うため、そのバンクを確保してください。KQ2D_EXTERNAL_SCALE_Q8、KQ2D_EXTERNAL_REST_COMPONENT、KQ2D_EXTERNAL_SURFACE を定義した場合は、対応する実装を呼び出し側で提供します。今回の8,872ケースはこれらを定義しない標準経路の結果です。

KQ3D_BODY_SPHERE=0x04 は球と箱の接触を選びます。球の半径は half_x です。kq3d_overlap_sphere_aabb(sphere, box) は接する境界を含めて判定し、NULLまたは半径が0以下なら0を返します。球同士の専用ソルバはありません。座標差、積、二乗和を16ビットの範囲に収めてください。

KQ3D_BODY_KINEMATIC=0x02 を持つ有効なbodyは、kq3d_step で逆質量が0でもX/Y速度と位置を更新します。Z位置とZ速度は更新しません。逆質量0のbodyは接触で押し戻されません。kq3d_integrate_body は従来どおり静的bodyを積分しません。break_speed と KQ3D_BODY_BROKEN による自動破壊は行いません。

ローカルの bank_switch は kq_bank_current と0x2000へ書き込みます。公開版の __bankswitch 経由の処理とは、コンパイラのバンク追跡状態の更新が異なります。切替処理は固定バンクから実行し、コンパイラのバンク復帰状態も必要な場合は __bankswitch を使ってください。

ローカルの cgb_bg_color/cgb_obj_color(RGB単色ラッパーも同様)は、パレットのインデックスに自動インクリメントを設定しません。CGB実行では0x1234の下位バイトが0x12で上書きされることを確認しました。単色設定には公開版の修正、または colors 系の配列APIを使ってください。DMGでは書き込みを行いません。

ローカルの metasprite_draw は完了時に first_id+count へ使用数を伸ばします。上限40で途中終了した場合は使用数を更新しません。再現例では first_id=39、count=2 の戻り値は1、スロット39は有効、使用数は0でした。公開版は各スロットを処理する際に使用数を更新します。

ローカル版は vram_get_queue_used と vram_get_queue_free を提供しますが、公開版の vram_get_queue_capacity はありません。容量には VRAM_QUEUE_MAX(既定32)を使えます。1件の登録後は使用数1、空き31でした。

wire3d_dmg.h は DrawRect2D の宣言を96行プロファイルに限定します。DrawBoxEdges2D は両プロファイルで宣言され、DrawIndexedEdges は120行プロファイルだけです。プロファイルに対応するソースを1つ選んでください。今回これらの描画結果は再検証していません。 保存したlib内には DrawRect2D と DrawBoxEdges2D の実装が見つかりません。宣言だけの項目なので、呼び出すには別途実装が必要です。

ローカルの audio_vblank は公開版の AudioVBlank_QueueReset/QueueRefill/QueuePlay と audio_vblank_queue.inc を含みません。ZX0も公開版だけにあります。これらは公開版の追加機能として扱い、ローカル版の検証済み機能に含めません。

kq3d_overlap_sphere_aabb
u8 kq3d_overlap_sphere_aabb(const KQBody3D* sphere, const KQBody3D* box);

KQ3D_BODY_SPHERE=0x04 は球と箱の接触を選びます。球の半径は half_x です。kq3d_overlap_sphere_aabb(sphere, box) は接する境界を含めて判定し、NULLまたは半径が0以下なら0を返します。球同士の専用ソルバはありません。座標差、積、二乗和を16ビットの範囲に収めてください。

physics3d.c / physics3d.h

今回実行した検証

2D標準経路:KOKURA C APIの自動ハードウェア選択で8,872ケース。全件成功。速度制限、接触、符号付きQ8乗算、接触時刻を照合しました。明示的なDMG/CGB別試験ではありません。

物理境界試験:19ケースをDMG・CGBで実行し、計38実行が全件成功しました。3D追加機能とスプライト/VRAM/パレットの再現試験も、それぞれ両モードで期待値と一致しました。パレットとスプライトは不具合の再現成功であり、正常動作の合格とは区別します。

これはC#版コンパイラが生成したROMのエミュレータ検証です。Rust版の同等性、実機、音声、描画、全APIの正常動作を証明する結果ではありません。既存の画像・検証結果は各記録のソース指紋に結び付いた過去の結果です。

ソース指紋・入力・期待値・実測値・再実行手順 · evidence.tar.gz · verify_rom_cases.py · verify_surface.py

確認した実行画面

エミュレータで確認した画像を、サンプルの説明とともに掲載しています。説明にある期待結果と見比べてください。画像だけで音、操作入力、周辺機器、実機の動作まで確認できるわけではありません。

英数字・記号の一覧表示 gb_font

目的:同梱の自作フォントで使える文字と、その表示方法を確認します。

処理の流れ:m_initで画面とフォントを準備し、m_textで文字列を行ごとに表示します。二重引用符は文字コード34をm_putへ渡して描きます。

操作と期待する結果:大文字26字、小文字26字、数字10字、記号30字が並びます。各文字が欠けずに表示されるか確認してください。操作は不要です。

英数字・記号の一覧表示: 大文字26字、小文字26字、数字10字、記号30字が並びます。各文字が欠けずに表示されるか確認してください。操作は不要です。
表示例:大文字26字、小文字26字、数字10字、記号30字が並びます。各文字が欠けずに表示されるか確認してください。操作は不要です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

最初の文字表示 gb_hello

目的:ROMを起動し、文字列と数値を背景に表示する最小の流れを学びます。

処理の流れ:m_initの後にm_textで挨拶を描き、m_numberに42を渡します。最後のループは画面を保ったままフレームを待ちます。

操作と期待する結果:HELLO WORLDと042が表示されます。042は3桁にそろえた十進数42です。

最初の文字表示: HELLO WORLDと042が表示されます。042は3桁にそろえた十進数42です。
表示例:HELLO WORLDと042が表示されます。042は3桁にそろえた十進数42です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

桁あふれを避ける算術 gb_arithmetic

目的:8ビットに収まらない途中結果を16ビットで扱う方法を学びます。

処理の流れ:(u16)200 + 100で300を作り、10で割ってから表示用にu8へ変換します。足し算の前の型変換に注目してください。

操作と期待する結果:030、つまり計算結果30が表示されます。

桁あふれを避ける算術: 030、つまり計算結果30が表示されます。
表示例:030、つまり計算結果30が表示されます。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

条件分岐と繰り返し gb_control

目的:for、continue、while、do/while、switchを小さな計算で試します。

処理の流れ:0~7を加算しますが3はcontinueで飛ばすため合計は25です。whileで30、do/whileで32まで増やし、switchのcase 32で42に置き換えます。

操作と期待する結果:042が表示されます。各ループと分岐を順番に通った計算結果です。

条件分岐と繰り返し: 042が表示されます。各ループと分岐を順番に通った計算結果です。
表示例:042が表示されます。各ループと分岐を順番に通った計算結果です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

関数・配列・構造体・ポインタ gb_aggregate

目的:複数の値をまとめ、関数やポインタを通して扱う方法を学びます。

処理の流れ:Pointの(10,20)を別の構造体へコピーし、ポインタから配列に1~4を書きます。addの戻り値30に配列の1、2、4と定数5を加えます。

操作と期待する結果:合計42が042と表示されます。構造体コピー、ptr[i]による書き込み、関数の戻り値を順に追ってください。

関数・配列・構造体・ポインタ: 合計42が042と表示されます。構造体コピー、ptr[i]による書き込み、関数の戻り値を順に追ってください。
表示例:合計42が042と表示されます。構造体コピー、ptr[i]による書き込み、関数の戻り値を順に追ってください。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

ビット操作とバッファのコピー gb_bits_memory

目的:複数のフラグを1バイトにまとめ、バッファを別の領域へコピーします。

処理の流れ:__memsetで4バイトを0にし、ビット3を立て、ビット1を反転します。__memcpyで4バイトすべてを別配列にコピーします。

操作と期待する結果:コピー先の先頭バイトが010になります。ビット3の8とビット1の2を合わせた十進数10です。

ビット操作とバッファのコピー: コピー先の先頭バイトが010になります。ビット3の8とビット1の2を合わせた十進数10です。
表示例:コピー先の先頭バイトが010になります。ビット3の8とビット1の2を合わせた十進数10です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

押した瞬間だけを数える gb_input

目的:ボタンを押し続ける状態と、新しく押した瞬間を区別します。

処理の流れ:毎フレームinput_updateを呼び、input_pressed(BTN_A)が真のときだけカウンターを増やします。

操作と期待する結果:最初は000です。Aを押すと001になり、押し続けても増えません。離して押し直すと002になります。255の次は000に戻ります。

押した瞬間だけを数える: 最初は000です。Aを押すと001になり、押し続けても増えません。離して押し直すと002になります。255の次は000に戻ります。
表示例:最初は000です。Aを押すと001になり、押し続けても増えません。離して押し直すと002になります。255の次は000に戻ります。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

Q8.8固定小数点の掛け算 gb_fixed

目的:整数とQ8.8固定小数点の相互変換、および掛け算の基本を学びます。

処理の流れ:3と4をfix_from_intでQ8.8へ変換し、fix_mulで掛け、fix_to_intで整数へ戻します。

操作と期待する結果:3×4の結果12が012と表示されます。画面に出るのは内部の256倍された値ではなく、整数へ戻した値です。

Q8.8固定小数点の掛け算: 3×4の結果12が012と表示されます。画面に出るのは内部の256倍された値ではなく、整数へ戻した値です。
表示例:3×4の結果12が012と表示されます。画面に出るのは内部の256倍された値ではなく、整数へ戻した値です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

固定長プールからの生成 gb_entity

目的:動的メモリ確保を使わず、決まった個数の領域からオブジェクトを作ります。

処理の流れ:entity_initで初期化し、種類1のオブジェクトを(20,30)に作ります。IDが失敗値0xFFでないことを確認してvxへ2を設定します。

操作と期待する結果:001は使用中オブジェクトの個数です。IDや座標ではありません。この例は更新・描画を行わないので、動くキャラクターは表示されません。

固定長プールからの生成: 001は使用中オブジェクトの個数です。IDや座標ではありません。この例は更新・描画を行わないので、動くキャラクターは表示されません。
表示例:001は使用中オブジェクトの個数です。IDや座標ではありません。この例は更新・描画を行わないので、動くキャラクターは表示されません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

診断値をRAMへ記録する gb_debug

目的:画面表示とは別に、ゲーム中の変数を診断用バッファへ残します。

処理の流れ:debug_initで初期化し、フレームタグ1を設定してHPという名前で42を記録します。

操作と期待する結果:画面の001は記録件数です。HP=42という値そのものは画面ではなく診断バッファにあります。画面だけでは記録内容までは確認できません。

診断値をRAMへ記録する: 画面の001は記録件数です。HP=42という値そのものは画面ではなく診断バッファにあります。画面だけでは記録内容までは確認できません。
表示例:画面の001は記録件数です。HP=42という値そのものは画面ではなく診断バッファにあります。画面だけでは記録内容までは確認できません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

座標履歴のリングバッファ gb_chain

目的:キャラクターの軌跡などに使う座標履歴の格納方法を学びます。

処理の流れ:4点分の配列をchain_initに渡し、chain_push_headで(20,30)を1点追加します。

操作と期待する結果:042は処理後に表示する固定の目印です。保存した座標や件数を表していません。履歴の内容を確かめるにはtrailとpointsを観察します。追従する胴体の描画例ではありません。

座標履歴のリングバッファ: 042は処理後に表示する固定の目印です。保存した座標や件数を表していません。履歴の内容を確かめるにはtrailとpointsを観察します。追従する胴体の描画例ではありません。
表示例:042は処理後に表示する固定の目印です。保存した座標や件数を表していません。履歴の内容を確かめるにはtrailとpointsを観察します。追従する胴体の描画例ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

ライブラリのフレームカウンター gb_system

目的:フレーム待機とライブラリが管理する経過フレーム数の関係を確認します。

処理の流れ:system_initの後にsystem_wait_vblankを2回呼び、system_get_frame8の値を表示します。

操作と期待する結果:002が表示されます。その後のループは本書のm_waitを使うため、この表示値は増え続けません。

ライブラリのフレームカウンター: 002が表示されます。その後のループは本書のm_waitを使うため、この表示値は増え続けません。
表示例:002が表示されます。その後のループは本書のm_waitを使うため、この表示値は増え続けません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

現在のシーンIDを選ぶ gb_scene

目的:タイトル画面やゲーム本編などを区別するシーン番号の選択方法を学びます。

処理の流れ:0で初期化された2件のSceneDefを登録し、scene_change(1)でID 1を選択します。

操作と期待する結果:001はscene_get_currentが返す現在のIDです。この例にはシーンのコールバックや画面切り替えの描画は登録していません。

現在のシーンIDを選ぶ: 001はscene_get_currentが返す現在のIDです。この例にはシーンのコールバックや画面切り替えの描画は登録していません。
表示例:001はscene_get_currentが返す現在のIDです。この例にはシーンのコールバックや画面切り替えの描画は登録していません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

英数字・記号の一覧表示 fc_font

目的:同梱の自作フォントで使える文字と、その表示方法を確認します。

処理の流れ:m_initで画面とフォントを準備し、m_textで文字列を行ごとに表示します。二重引用符は文字コード34をm_putへ渡して描きます。

操作と期待する結果:大文字26字、小文字26字、数字10字、記号30字が並びます。各文字が欠けずに表示されるか確認してください。操作は不要です。

英数字・記号の一覧表示: 大文字26字、小文字26字、数字10字、記号30字が並びます。各文字が欠けずに表示されるか確認してください。操作は不要です。
表示例:大文字26字、小文字26字、数字10字、記号30字が並びます。各文字が欠けずに表示されるか確認してください。操作は不要です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

最初の文字表示 fc_hello

目的:ROMを起動し、文字列と数値を背景に表示する最小の流れを学びます。

処理の流れ:m_initの後にm_textで挨拶を描き、m_numberに42を渡します。最後のループは画面を保ったままフレームを待ちます。

操作と期待する結果:HELLO WORLDと042が表示されます。042は3桁にそろえた十進数42です。

最初の文字表示: HELLO WORLDと042が表示されます。042は3桁にそろえた十進数42です。
表示例:HELLO WORLDと042が表示されます。042は3桁にそろえた十進数42です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

桁あふれを避ける算術 fc_arithmetic

目的:8ビットに収まらない途中結果を16ビットで扱う方法を学びます。

処理の流れ:(u16)200 + 100で300を作り、10で割ってから表示用にu8へ変換します。足し算の前の型変換に注目してください。

操作と期待する結果:030、つまり計算結果30が表示されます。

桁あふれを避ける算術: 030、つまり計算結果30が表示されます。
表示例:030、つまり計算結果30が表示されます。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

条件分岐と繰り返し fc_control

目的:for、continue、while、if/elseを小さな計算で試します。

処理の流れ:0~7のうち3を飛ばして合計25を作り、whileで32まで増やします。ifで32との一致を判定し、成功側で42を代入します。

操作と期待する結果:042が表示されます。このプログラムで使う分岐はif/elseです。

条件分岐と繰り返し: 042が表示されます。このプログラムで使う分岐はif/elseです。
表示例:042が表示されます。このプログラムで使う分岐はif/elseです。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

関数・配列・構造体・ポインタ fc_aggregate

目的:複数の値をまとめ、関数やポインタを通して扱う方法を学びます。

処理の流れ:Pointの(10,20)を別の構造体へコピーし、ポインタから配列に1~4を書きます。addの戻り値30に配列の1、2、4と定数5を加えます。

操作と期待する結果:合計42が042と表示されます。構造体コピー、ptr[i]による書き込み、関数の戻り値を順に追ってください。

関数・配列・構造体・ポインタ: 合計42が042と表示されます。構造体コピー、ptr[i]による書き込み、関数の戻り値を順に追ってください。
表示例:合計42が042と表示されます。構造体コピー、ptr[i]による書き込み、関数の戻り値を順に追ってください。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

ビット操作とバッファのコピー fc_bits_memory

目的:複数のフラグを1バイトにまとめ、バッファを別の領域へコピーします。

処理の流れ:__memsetで4バイトを0にし、ビット3を立て、ビット1を反転します。__memcpyで4バイトすべてを別配列にコピーします。

操作と期待する結果:コピー先の先頭バイトが010になります。ビット3の8とビット1の2を合わせた十進数10です。

ビット操作とバッファのコピー: コピー先の先頭バイトが010になります。ビット3の8とビット1の2を合わせた十進数10です。
表示例:コピー先の先頭バイトが010になります。ビット3の8とビット1の2を合わせた十進数10です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

押した瞬間だけを数える fc_input

目的:ボタンを押し続ける状態と、新しく押した瞬間を区別します。

処理の流れ:毎フレームinput_updateを呼び、input_pressed(BTN_A)が真のときだけカウンターを増やします。

操作と期待する結果:最初は000です。Aを押すと001になり、押し続けても増えません。離して押し直すと002になります。255の次は000に戻ります。

押した瞬間だけを数える: 最初は000です。Aを押すと001になり、押し続けても増えません。離して押し直すと002になります。255の次は000に戻ります。
表示例:最初は000です。Aを押すと001になり、押し続けても増えません。離して押し直すと002になります。255の次は000に戻ります。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

Q8.8固定小数点の掛け算 fc_fixed

目的:整数とQ8.8固定小数点の相互変換、および掛け算の基本を学びます。

処理の流れ:3と4をfix_from_intでQ8.8へ変換し、fix_mulで掛け、fix_to_intで整数へ戻します。

操作と期待する結果:3×4の結果12が012と表示されます。画面に出るのは内部の256倍された値ではなく、整数へ戻した値です。

Q8.8固定小数点の掛け算: 3×4の結果12が012と表示されます。画面に出るのは内部の256倍された値ではなく、整数へ戻した値です。
表示例:3×4の結果12が012と表示されます。画面に出るのは内部の256倍された値ではなく、整数へ戻した値です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

固定長プールからの生成 fc_entity

目的:動的メモリ確保を使わず、決まった個数の領域からオブジェクトを作ります。

処理の流れ:entity_initで初期化し、種類1のオブジェクトを(20,30)に作ります。IDが失敗値0xFFでないことを確認してvxへ2を設定します。

操作と期待する結果:001は使用中オブジェクトの個数です。IDや座標ではありません。この例は更新・描画を行わないので、動くキャラクターは表示されません。

固定長プールからの生成: 001は使用中オブジェクトの個数です。IDや座標ではありません。この例は更新・描画を行わないので、動くキャラクターは表示されません。
表示例:001は使用中オブジェクトの個数です。IDや座標ではありません。この例は更新・描画を行わないので、動くキャラクターは表示されません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

診断値をRAMへ記録する fc_debug

目的:画面表示とは別に、ゲーム中の変数を診断用バッファへ残します。

処理の流れ:debug_initで初期化し、フレームタグ1を設定してHPという名前で42を記録します。

操作と期待する結果:画面の001は記録件数です。HP=42という値そのものは画面ではなく診断バッファにあります。画面だけでは記録内容までは確認できません。

診断値をRAMへ記録する: 画面の001は記録件数です。HP=42という値そのものは画面ではなく診断バッファにあります。画面だけでは記録内容までは確認できません。
表示例:画面の001は記録件数です。HP=42という値そのものは画面ではなく診断バッファにあります。画面だけでは記録内容までは確認できません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

座標履歴のリングバッファ fc_chain

目的:キャラクターの軌跡などに使う座標履歴の格納方法を学びます。

処理の流れ:4点分の配列をchain_initに渡し、chain_push_headで(20,30)を1点追加します。

操作と期待する結果:042は処理後に表示する固定の目印です。保存した座標や件数を表していません。履歴の内容を確かめるにはtrailとpointsを観察します。追従する胴体の描画例ではありません。

座標履歴のリングバッファ: 042は処理後に表示する固定の目印です。保存した座標や件数を表していません。履歴の内容を確かめるにはtrailとpointsを観察します。追従する胴体の描画例ではありません。
表示例:042は処理後に表示する固定の目印です。保存した座標や件数を表していません。履歴の内容を確かめるにはtrailとpointsを観察します。追従する胴体の描画例ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

ライブラリのフレームカウンター fc_system

目的:フレーム待機とライブラリが管理する経過フレーム数の関係を確認します。

処理の流れ:system_initの後にsystem_wait_vblankを2回呼び、system_get_frame8の値を表示します。

操作と期待する結果:002が表示されます。その後のループは本書のm_waitを使うため、この表示値は増え続けません。

ライブラリのフレームカウンター: 002が表示されます。その後のループは本書のm_waitを使うため、この表示値は増え続けません。
表示例:002が表示されます。その後のループは本書のm_waitを使うため、この表示値は増え続けません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

現在のシーンIDを選ぶ fc_scene

目的:タイトル画面やゲーム本編などを区別するシーン番号の選択方法を学びます。

処理の流れ:0で初期化された2件のSceneDefを登録し、scene_change(1)でID 1を選択します。

操作と期待する結果:001はscene_get_currentが返す現在のIDです。この例にはシーンのコールバックや画面切り替えの描画は登録していません。

現在のシーンIDを選ぶ: 001はscene_get_currentが返す現在のIDです。この例にはシーンのコールバックや画面切り替えの描画は登録していません。
表示例:001はscene_get_currentが返す現在のIDです。この例にはシーンのコールバックや画面切り替えの描画は登録していません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

世界座標から画面座標へ gb_camera

目的:カメラ位置を引いて、ゲーム世界の位置を画面内の位置へ変換します。

処理の流れ:Camera_SetにQ8.8の2560、つまりX=10ピクセルを渡します。世界座標X=52をCamera_WorldToScreenXで変換します。

操作と期待する結果:52−10=42なので042と表示されます。このプログラムは座標変換の例で、背景を動かすものではありません。

世界座標から画面座標へ: 52−10=42なので042と表示されます。このプログラムは座標変換の例で、背景を動かすものではありません。
表示例:52−10=42なので042と表示されます。このプログラムは座標変換の例で、背景を動かすものではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

RLEデータをRAMへ展開する gb_rle

目的:同じ値の繰り返しを、個数と値の組で保存する簡単な圧縮形式を試します。

処理の流れ:packedの{3,42,0}は「42を3回、0の個数で終了」です。rle_decodeへ3バイトの展開先を渡します。

操作と期待する結果:最後のバイトout[2]が042と表示されます。展開先の3バイトはすべて42になる想定です。

RLEデータをRAMへ展開する: 最後のバイトout[2]が042と表示されます。展開先の3バイトはすべて42になる想定です。
表示例:最後のバイトout[2]が042と表示されます。展開先の3バイトはすべて42になる想定です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

盤面のセルを読み書きする gb_board

目的:マス目のゲームで使う2次元座標と、保存用配列の関係を学びます。

処理の流れ:16バイトの配列を4×4の盤面として登録し、0でクリアしてからセル(2,1)へ42を書きます。同じ座標を読み返します。

操作と期待する結果:読み出した42が042と表示されます。4×4の盤面そのものを描画する例ではありません。

盤面のセルを読み書きする: 読み出した42が042と表示されます。4×4の盤面そのものを描画する例ではありません。
表示例:読み出した42が042と表示されます。4×4の盤面そのものを描画する例ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

矩形ボディを1ステップ進める gb_physics

目的:ワールドと矩形ボディを初期化し、速度から位置を更新する最小の例です。

処理の流れ:X=40、Y=40にボディを作り、速度を(2,0)、重力を0にしてkq2d_stepを1回呼びます。

操作と期待する結果:更新後のX=42が042と表示されます。この例の位置は整数ピクセルです。箱の形や連続したアニメーションを描く例ではありません。

矩形ボディを1ステップ進める: 更新後のX=42が042と表示されます。この例の位置は整数ピクセルです。箱の形や連続したアニメーションを描く例ではありません。
表示例:更新後のX=42が042と表示されます。この例の位置は整数ピクセルです。箱の形や連続したアニメーションを描く例ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

バンクを指定してROMを読む gb_bank

目的:ROMのデータをRAMへコピーするAPIの引数を学びます。

処理の流れ:値7と42の2バイトをfar_data_readでcopiedへ読み込みます。バンク引数は0、コピー長は2です。

操作と期待する結果:コピー先の2バイト目が042と表示されます。この例は固定ROMの読み出しで、異なる切替バンク間の転送を実証するものではありません。

バンクを指定してROMを読む: コピー先の2バイト目が042と表示されます。この例は固定ROMの読み出しで、異なる切替バンク間の転送を実証するものではありません。
表示例:コピー先の2バイト目が042と表示されます。この例は固定ROMの読み出しで、異なる切替バンク間の転送を実証するものではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

素材IDからデータを読み込む gb_asset

目的:素材の位置と長さを表へ登録し、IDで参照する仕組みを学びます。

処理の流れ:ID 0に種類RAW、バンク0、{7,42}のポインタ、長さ2を登録します。asset_load_rawで2バイトのRAMへ読み込みます。

操作と期待する結果:コピー先の2バイト目が042と表示されます。画像表示ではなく、生のバイト列を素材IDで取得する例です。

素材IDからデータを読み込む: コピー先の2バイト目が042と表示されます。画像表示ではなく、生のバイト列を素材IDで取得する例です。
表示例:コピー先の2バイト目が042と表示されます。画像表示ではなく、生のバイト列を素材IDで取得する例です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

弾をプールへ1個登録する gb_danmaku

目的:弾の管理領域を初期化し、発射後の使用数を調べます。

処理の流れ:danmaku_resetの後にdanmaku_spawn(40,40,16,0)を呼び、dm_countを表示します。

操作と期待する結果:001は登録された弾の個数です。この例には更新ループや背景への弾描画処理がないため、画面に弾が飛ぶ様子は表示されません。

弾をプールへ1個登録する: 001は登録された弾の個数です。この例には更新ループや背景への弾描画処理がないため、画面に弾が飛ぶ様子は表示されません。
表示例:001は登録された弾の個数です。この例には更新ループや背景への弾描画処理がないため、画面に弾が飛ぶ様子は表示されません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

Q5.3で端数の移動を積み重ねる fc_subpixel

目的:1ピクセル未満の移動を端数として保持し、整数座標へ繰り上げる方法を学びます。

処理の流れ:X=40から、2/8ピクセルの移動を8回加算します。右シフトで整数部分を取り出し、マスクで端数を残します。

操作と期待する結果:合計2ピクセル進み、X=42が042と表示されます。これは正方向の手動積算例です。負方向には対応する繰り下げ処理が必要です。

Q5.3で端数の移動を積み重ねる: 合計2ピクセル進み、X=42が042と表示されます。これは正方向の手動積算例です。負方向には対応する繰り下げ処理が必要です。
表示例:合計2ピクセル進み、X=42が042と表示されます。これは正方向の手動積算例です。負方向には対応する繰り下げ処理が必要です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

CGB背景パレットの色を設定する gb_cgb_palette

目的:Game Boy ColorのRGB値で、背景と文字の色を指定します。

処理の流れ:VBlank中にLCDを止め、パレット0の色0を白(31,31,31)、色3を紫(12,0,22)へ設定してから表示を再開します。

操作と期待する結果:CGBモードで実行すると白い背景に紫色の文字と042が表示されます。DMGの白黒表示では色の結果を確認できません。

CGB背景パレットの色を設定する: CGBモードで実行すると白い背景に紫色の文字と042が表示されます。DMGの白黒表示では色の結果を確認できません。
表示例:CGBモードで実行すると白い背景に紫色の文字と042が表示されます。DMGの白黒表示では色の結果を確認できません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

背景を横へスクロールする gb_scroll

目的:背景の内容を書き換えず、表示開始位置を動かす方法を学びます。

処理の流れ:毎フレームphaseを1増やし、Scroll_SetBgへ渡します。8ビット値なので255の次は0になります。

操作と期待する結果:SCROLLという文字が左へ動きます。画面の数字ではなく、時間を追って文字の位置が変わることを確認してください。

背景を横へスクロールする: SCROLLという文字が左へ動きます。画面の数字ではなく、時間を追って文字の位置が変わることを確認してください。
表示例:SCROLLという文字が左へ動きます。画面の数字ではなく、時間を追って文字の位置が変わることを確認してください。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

タイル更新をキューへ積む gb_vram_queue

目的:描画の要求と、VRAMへ実際に書き込むタイミングを分けます。

処理の流れ:vram_queue_bg_tileでタイル座標(3,8)へ番号52を予約し、vram_flushで転送します。同梱フォントの番号52は数字4です。

操作と期待する結果:背景のタイル座標(3,8)に数字4が表示されます。全画面の数値カウンターではなく、1マスへの描画結果です。

タイル更新をキューへ積む: 背景のタイル座標(3,8)に数字4が表示されます。全画面の数値カウンターではなく、1マスへの描画結果です。
表示例:背景のタイル座標(3,8)に数字4が表示されます。全画面の数値カウンターではなく、1マスへの描画結果です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

OAM DMAでスプライトを表示する gb_sprite

目的:背景とは別に動かせるスプライトの割り当てと表示を学びます。

処理の流れ:空のプールから最初のスロット0を確保し、タイル65と位置(70,80)を設定します。OBJ表示を有効にして、毎フレームシャドーOAMを転送します。

操作と期待する結果:指定位置に文字Aのスプライトが表示されます。位置は固定です。実際のゲームでは割り当て失敗値を確認してからIDを使います。

OAM DMAでスプライトを表示する: 指定位置に文字Aのスプライトが表示されます。位置は固定です。実際のゲームでは割り当て失敗値を確認してからIDを使います。
表示例:指定位置に文字Aのスプライトが表示されます。位置は固定です。実際のゲームでは割り当て失敗値を確認してからIDを使います。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

シード付き疑似乱数 gb_rng

目的:同じ初期値から同じ乱数列を再現する方法を学びます。

処理の流れ:rng_seed(1234)で初期化し、rng_range(10)を1回呼びます。上限10は結果に含まれません。

操作と期待する結果:000~009のいずれかが表示されます。同じプログラムを同じシードで起動すれば同じ値になります。毎フレーム変化する例ではありません。

シード付き疑似乱数: 000~009のいずれかが表示されます。同じプログラムを同じシードで起動すれば同じ値になります。毎フレーム変化する例ではありません。
表示例:000~009のいずれかが表示されます。同じプログラムを同じシードで起動すれば同じ値になります。毎フレーム変化する例ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

ゲーム進行フラグ gb_flags

目的:イベントを達成したかなどの真偽値を、フラグ番号で管理します。

処理の流れ:フラグ12をクリアしてから立て、flag_getで読み返します。

操作と期待する結果:001はフラグ12が真であることを示します。この例はRAM上のフラグ操作で、電源を切っても残るセーブ処理は行いません。

ゲーム進行フラグ: 001はフラグ12が真であることを示します。この例はRAM上のフラグ操作で、電源を切っても残るセーブ処理は行いません。
表示例:001はフラグ12が真であることを示します。この例はRAM上のフラグ操作で、電源を切っても残るセーブ処理は行いません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

円形ボディを1ステップ進める gb_circle

目的:円の物理ワールドへボディを登録し、速度による位置更新を試します。

処理の流れ:半径4、位置(40,40)、速度(2,0)の円を有効にします。重力0、linear_damping_q8=255でkq2dc_stepを1回呼びます。

操作と期待する結果:更新後のX=42が042と表示されます。円の輪郭や衝突アニメーションを描画する例ではなく、整数座標の更新例です。

円形ボディを1ステップ進める: 更新後のX=42が042と表示されます。円の輪郭や衝突アニメーションを描画する例ではなく、整数座標の更新例です。
表示例:更新後のX=42が042と表示されます。円の輪郭や衝突アニメーションを描画する例ではなく、整数座標の更新例です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

NES背景を横へスクロールする fc_scroll

目的:PPUのスクロール位置を更新して背景を動かします。

処理の流れ:__scroll_set(0,0)で開始し、フレームごとにphaseを1増やして横位置へ設定します。

操作と期待する結果:SCROLLという文字の横位置が変わります。phaseは255から0へ戻ります。複数のネームテーブルを使う広いマップの例ではありません。

NES背景を横へスクロールする: SCROLLという文字の横位置が変わります。phaseは255から0へ戻ります。複数のネームテーブルを使う広いマップの例ではありません。
表示例:SCROLLという文字の横位置が変わります。phaseは255から0へ戻ります。複数のネームテーブルを使う広いマップの例ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

NMIでタイル更新を反映する fc_vram_queue

目的:メイン処理からPPU更新をキューへ送り、NMI側で反映する流れを学びます。

処理の流れ:__vramq_putでネームテーブルの0x2103へタイル52を予約し、__vramq_commitで送信します。0x2103はタイル座標(3,8)です。

操作と期待する結果:背景の(3,8)に数字4が表示されます。番号52は同梱フォントの数字4に対応します。

NMIでタイル更新を反映する: 背景の(3,8)に数字4が表示されます。番号52は同梱フォントの数字4に対応します。
表示例:背景の(3,8)に数字4が表示されます。番号52は同梱フォントの数字4に対応します。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

NESのOAMスプライト fc_sprite

目的:スプライト用の色とOAM情報を準備して、背景とは別の画像を表示します。

処理の流れ:スプライトパレットを読み込み、スロット0へ位置(70,80)、タイル65、属性0を設定します。表示を有効にしてOAM DMAを繰り返します。

操作と期待する結果:文字Aのスプライトが固定位置に表示されます。動く画像ではなく、OAM設定と転送の基本例です。

NESのOAMスプライト: 文字Aのスプライトが固定位置に表示されます。動く画像ではなく、OAM設定と転送の基本例です。
表示例:文字Aのスプライトが固定位置に表示されます。動く画像ではなく、OAM設定と転送の基本例です。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

APUのパルス音を鳴らす fc_sound

目的:NES本体のパルスチャンネルへ音量・タイマー・長さを設定します。

処理の流れ:nes_apu_initの後にnes_sfx_square1(0xBF,400,20)を呼びます。0xBFは一定音量と長さカウンター停止を指定するため、音は持続します。20は長さテーブルの番号で、20フレームという意味ではありません。

操作と期待する結果:042を表示しながらパルス音が鳴り続けます。音を止めるにはnes_apu_silence_allを呼びます。042自体は発音確認の結果ではありません。

APUのパルス音を鳴らす: 042を表示しながらパルス音が鳴り続けます。音を止めるにはnes_apu_silence_allを呼びます。042自体は発音確認の結果ではありません。
表示例:042を表示しながらパルス音が鳴り続けます。音を止めるにはnes_apu_silence_allを呼びます。042自体は発音確認の結果ではありません。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る

フレーム更新で効果音を再生する gb_sound

目的:効果音データを開始し、毎フレームの更新で最後まで進める方法を学びます。

処理の流れ:Audio_Initの後、Audio_PlaySFXへtoneとチャンネルID 1を渡します。メインループからAudio_Updateを1フレームに1回呼びます。

操作と期待する結果:042を表示しながら短いパルス波の効果音が鳴ります。042は固定の目印で、音量や再生位置ではありません。音の確認には音声出力または録音を使ってください。

フレーム更新で効果音を再生する: 042を表示しながら短いパルス波の効果音が鳴ります。042は固定の目印で、音量や再生位置ではありません。音の確認には音声出力または録音を使ってください。
表示例:042を表示しながら短いパルス波の効果音が鳴ります。042は固定の目印で、音量や再生位置ではありません。音の確認には音声出力または録音を使ってください。

コンパイラ説明書のサンプルに戻る / ライブラリ説明書のサンプルに戻る