2022年6月17日金曜日

ゲームボーイエミュレータを自作

Rustでゲームボーイエミュレータを自作してみました。
なかなか面白くCPUを中心に知識を深めるのにも役立ったので内容と共に紹介したいと思います。ソースコードはこちらにあります。


まずはじめに

実際のところ執筆時点ではゲームボーイエミュレータを自作する為に必要な資料は豊富に揃っている為に比較的容易に作ることが出来ます。ただそれらの資料は一部不完全であったりするので突き合わせて正しい方を選んでいく必要があります。その際に役立つのがGitHubに公開されている完成品のエミュレータで動作させるのもソースコードを見るのも役に立ちます。

完成品と同じ処理を実装していくことで確実に作れる点は大きいです。


概要を把握

エミュレータを作る前にGAME BOYが、どんな機能で、どんな動きをするのか概要を把握しておくと楽になります。CPU、RAM、割り込み、時計、画面、サウンド、ゲームパッド、ゲームカートリッジなどが主たる物としてあげられますが、ざっくらばんでも絵にしておくと把握が楽になります。


準備

必要な資料や開発環境を整えておくと楽が出来ます。
私の開発環境ではGitとRustとVimとSDL2を使用しました。他にもVisual Studio Codeなどもありますし使い慣れた開発環境を準備するのが良いでしょう。また完成品のソースコードの開発環境に合わせられると更に楽が出来ます。
資料については関連サイトが豊富にあります。日本語ではGB Specなど、海外ではBGB homepageGameboy DevelopmentgbdevGame Boy Projectなどがあります。海外の方が詳細であることが多いです。

その他にROMデータが必要になりますが、これはオープンソースのROMがお手軽に利用できます。なかにはテスト用ROMなどもあり使うと確認が楽になります。またデバッグ機能の充実しているエミュレータBGBや、必要な物がまとめられているGitHubのawesome-gbdevなどもあります。


実装

私の場合は概要把握の後は仕様書と完成品のソースコードを相互参照しながら実装していきました。ソースコードに不明点があれば仕様書を参照、テストROMで不具合があればソースコードの見直し、それでも不明なら仕様書を参照、それでも不明なら完成品のソースコードを修正してレジスタの内容を出力して開発品とdiffなど。
ドキュメントには不備が所々ある様で基本的にはテストROMに合わせるのが良いようです。


終わりに

結果として部分的ですがサウンドの再生も可能になり比較的まともにプレイ可能になりましたので今後は吸い出し機を使って購入したカートリッジのデータをプレイしてみる予定です。
自作したエミュレータでマリオやポケモンが動くのは感慨深いかもしれません。

0 件のコメント:

コメントを投稿

ChatGPTを英会話に使う

AIと幅広い対話を行うことができるChatGPTですが、英語教師の役割を担わせることも可能になっています。これを用いて英会話(チャット)による学習を行うことが可能です。 最初に必要なプロンプトを入力します。コピペして使ってください。 初心者 Let's think ste...