はじめに
この記事は、管理人がNESエミュレータを作成する中で、引っかかったことやすぐに情報が見つからなかったことをまとめたものです。
動機
2024年現在、ネット上ではたくさんのNESエミュレータの開発記録や仕様をまとめてくれたwebページを見つけることができます。私もこれらのサイトをありがたく使わせていただきながら、NESエミュレータを作り始めました。
一方で、自分が引っかかった場所やNESの仕様を調べる際、なかなか一つのwebページで解決することが少ないことに気付きました。これは筆者の理解力不足なども大きな要因として挙げられるのですが、それ以外に、これらのページを残してくれた先人たちは、その優秀さゆえに基本的な情報をすっ飛ばして説明しているのではないか、と考えました。私は一応大学院を出てはいるのですが、悲しいことにエンジニアリングの技能はかなりいまいちで、下手をすればその辺の人間よりPCの気持ちが分からないまであります。だとすれば、逆に私が開発記録を書けば「サルでもわかるNESエミュレータ」が完成するのではないかと思った次第です。
NESエミュレータとは
本題に入る前に、NESエミュレータについて説明します。これを作ろうと思っている人はわざわざ説明されずともどんなものか想像ついているかもしれませんが、筆者の勉強と備忘録がてら残しておきます。以下では、NESとエミュレータに分けてそれぞれ説明します。
Nintendo Entertainment System (NES)
NESとは、Nintendo Entertainment System の略称で、日本でいうところのファミコンのことです。文献[1] によると、正式名称は「ファミリーコンピュータ」で、海外では「Nintendo Entertainment System (NES)」 という名前で発売されたそうです。
エミュレータ
次にエミュレータについてです。Wikipedia[2]によると、コンピュータや機械の模倣装置あるいは模倣ソフトウェアのこと、だそうです。つまりPCなどの機械の機能をソフトウェアとして実装して自分が普段使っているPC上などで動かせるようにしたもの、という感じですかね。
以上、NESエミュレータについての説明でした。まとめると、NESエミュレータとは、ファミコンに入っているCPUなどのあれやこれやをソフトウェアとして実現し、その上でゲームを動かせるようにしたものということになります。本記事は、これを何とか作っていこうというものです。
開発環境
開発を始める前に、まずは環境構築です。NESエミュレータを作るにあたって使用した環境は以下のとおりです。もちろんそれぞれ自分の好きなものを使ってもらって構いませんが、以降の説明は以下の環境を前提に行っていることをご容赦ください。
OS | WSL2 |
言語 | C++ |
エディタ | vim |
管理 | github (https://github.com/otani-k/emuemu) |
注:開発環境を作ってからこの記事を作成するまでに時間が空いているため、もしかしたら抜けている 情報があるかもしれません。思い出したら書き足します。
環境構築
NESエミュレータを作るにあたって具体的な環境構築の方法について説明します。項目がいくつかあるため、それぞれ項目ごとに説明することにします。
WSL2
Windows Subsystem for Linux (WSL)は、LinuxのプログラムをWindows上で実行するための仕組みです[3]。これを使うことによって、Windows上でLinuxと同じような環境を作って開発を進めることができます。私はLinuxのコマンドのほうが使いなれていることと、後で出てくるGUI部分を作るのに楽だからという理由でWSLを使っています。
コマンドプロンプトで以下のコマンドを実行すればインストールできます。
wsl --install
インストール後、以下のコマンドを実行すればWSLに入れます。
wsl.exe
ビルド環境
次に、作成したプログラムをビルドするときに必要なものをインストールします。
コンパイラ
GLFW
おわりに
本記事では、NESエミュレータを開発する前の準備段階として、開発環境の構築方法について説明しました。しかし見ての通り現時点で情報は穴だらけのため、いったん公開して継ぎ足し継ぎ足し編集しながら記事の関係を目指す方針でいこうと思います。これはこっちのほうが筆者のモチベーションが維持できると考えたためです。ごめんなさい。
参考文献
[1] エミュポータル:https://emu-portal.com/fc.html(2024/2/18 accessed)
[2] エミュレータ:https://ja.wikipedia.org/wiki/エミュレータ
(2024/2/18 accessed)
[3] Windows Subsystem for Linux:https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux(2024/2/18 accessed)
[4] Windows 10でLinuxを使う(WSL2):https://qiita.com/whim0321/items/ed76b490daaec152dc69(2024/2/18 accessed)
コメント