Peanut-GB は、このゲームボーイ エミュレータをベースにした単一ファイル ヘッダーのゲームボーイ エミュレータ ライブラリです。目的は、C99 コンパイラを備えたあらゆるプラットフォームで使用できる、高速でポータブルなゲームボーイ (DMG) エミュレータ ライブラリを作成することです。
このエミュレータは非常に高速です。 Raspberry Pi Pico でフルスピードで実行できるほどです。 Peanut-GB のベンチマークについては、BENCHMARK.md をチェックしてください。
現時点ではオリジナルのゲームボーイ (DMG) のみがサポートされていますが、ゲームボーイ カラーをサポートするための準備作業が完了しています (#50 を参照)。
このエミュレータは進行中の作業であり、不正確な可能性があります (ただし、Blargg の CPU 命令と命令タイミング テストには合格しています)。そのため、一部のゲームが正しく動作しなかったり、まったく動作しなかったりする場合があります。精度が重要な場合は、代替エミュレータを探してください。
主な実装例は、SDL2 を使用して画面を描画し、入力を取得するpeanut_sdl.c にあります。 cmake
または ./examples/sdl2/ フォルダー内のmake
を実行してコンパイルします。
peanut-sdl
実行すると、ROM ファイルをドラッグ アンド ドロップできるドロップゾーンウィンドウが作成されます。あるいは、 peanut-sdl game.gb
使用してターミナルで実行すると、ゲームの保存ファイルgame.sav
が見つからない場合に自動的に作成されます。または、 peanut-sdl game.gb save.sav
を実行して保存ファイルを指定します。
注: ここに示されているアニメーション GIF は 50fps に制限されていますが、エミュレーションはネイティブ ~60fps で実行されていました。これは、一般的な GIF デコーダが最大 FPS を 50 に制限しているためです。
アクション | キーボード | ジョイパッド |
---|---|---|
あ | z | あ |
B | × | B |
始める | 戻る | 始める |
選択 | バックスペース | 戻る |
十字キー | 矢印キー | DPAD |
Aを繰り返す | ある | |
リピートB | s | |
通常速度 | 1 | |
ターボ×2(長押し) | 空間 | |
ターボ X2 (切り替え) | 2 | |
ターボ X3 (切り替え) | 3 | |
ターボ X4 (切り替え) | 4 | |
リセット | r | |
パレットの変更 | p | |
パレットをリセット | Shift + P | |
全画面表示 | F11/f | |
フレームスキップ (切り替え) | ああ | |
インターレース (切り替え) | 私 | |
BMP をダンプ (切り替え) | b |
デフォルトでは、フレームスキップ モードとインターレース モードは両方ともオフになっています。フレームスキップは 60 FPS と 30 FPS の間で切り替わります。
「b」を押すと、各フレームが 24 ビットのビットマップ ファイルとして現在のフォルダーにダンプされます。詳細については、/screencaps/README.md を参照してください。
順不同であり、すべてを網羅するものではありませんが、次のプロジェクトでは Peanut-GB を使用しています。
関数プロトタイプのドキュメントは、peanut_gb.h の下部にあります。
フロントエンド実装は、ライブラリに多数の関数を提供する必要があります。これらの関数は、gb_init を呼び出すときに設定されます。
さらなる機能のために、次のオプション関数を定義できます。
この関数は LCD 描画に必要です。 gb_init_lcd を使用してこの関数を設定し、peanut_gb.h をインクルードする前に ENABLE_LCD を 1 に定義して、Peanut-GB 内で LCD 機能を有効にします。 ENABLE_LCD は、事前に定義されていない場合、デフォルトで 1 に設定されます。 gb_init_lcd が呼び出されない場合、または lcd_draw_line が NULL に設定されている場合、LCD 描画は無効になります。
lcd_draw_line に送信されるピクセル データには、シェード データとレイヤー データの両方が含まれます。最初の 2 つの最下位ビットは、色合いデータ (黒、暗い、明るい、白) です。ビット 4 と 5 はレイヤー データ (OBJ0、OBJ1、BG) で、ゲームボーイ カラーが古いゲームボーイ ゲームに行うのと同じ方法で、ゲームに色を追加するために使用できます。
これらの関数はオーディオのエミュレーションと出力に必要です。 Peanut-GB にはオーディオ エミュレーションが含まれていないため、外部ライブラリを使用する必要があります。これらの関数を定義し、peanut_gb.h をインクルードする前に ENABLE_SOUND を 1 に定義してオーディオ出力を有効にする必要があります。
これらの機能はシリアル通信に必要です。これらの関数は gb_init_serial を使用して設定します。これらの機能が設定されていない場合、エミュレーションはリンク ケーブルが接続されていないものとして動作します。
これらの機能は Peanut-GB によって提供されます。
この機能は、コンソールの電源がオフになってからオンになったかのように、プレイ中のゲームをリセットします。 gb_reset は gb_init によって呼び出され、CPU レジスタを初期化します。
この関数は、プレイ中のゲームの保存サイズを返します。ゲームがセーブデータを使用しない場合、この関数は 0 を返します。
この関数は、フルフレームが LCD にレンダリングされるまで CPU を実行します。
この関数は、ゲーム タイトルのハッシュを計算します。このハッシュは、ゲームボーイ ゲームに色を追加するために、ゲームボーイ カラーと同じ方法で計算されます。
この関数はゲームの名前を返します。
リアルタイムクロック(RTC)の時刻を設定します。一部のゲームはこの RTC データを使用します。
非推奨: 使用しないでください。 RTC は内部でチェックされます。
リセット時にブートROMイメージを実行します。これらの変更を有効にするには、gb_set_bootrom を呼び出した後にリセットを実行する必要があります。これは、gb_init が gb_reset を呼び出すが、gb_set_bootrom は gb_init の後に呼び出す必要があるためです。ブート ROM は、DMG または MGB ブート ROM である必要があります。
このプロジェクトは MIT ライセンスに基づいてライセンスされています。