NES開発について
1. NES開発とは 2. NESの基礎知識 3. NES開発環境のセットアップ 4. プログラムのビルド
NES(日本でいうファミコンです)のゲーム開発についての記事です.
わざわざNESのゲームを開発する面白さはいくつかありますが,一番はアセンブリ言語に手軽に触れられることです.
この言語に関してはのちに詳しく説明しますが,簡単にいうと機械が理解しやすく,人間には少し難しいプログラミング言語(プログラミング言語といっていいのか?)です.
NESは開発環境が整っており,アセンブリ言語もシンプルで比較的簡単だと思います.
NESゲームの開発を行うにあたって必要な基礎知識をまとめてみます.
すぐに理解できるものではないので,
https://github.com/suzukiplan/mgp-fc
https://hp.vector.co.jp/authors/VA042397/nes/index.html
https://taotao54321.hatenablog.com/entry/2017/04/11/135825
https://www.nesdev.org/wiki/NES_reference_guide(英語だが情報は網羅されている)
http://gikofami.fc2web.com/index.html
上のようなサイトを見たり,専門用語を自分で調べたりしながらゆっくり理解してみてください.
まず,NESとは,Nintendo Entertainment Systemの略で,欧州用のファミコンです.基本的な構成は日本のものと同じで,見た目が異なっているだけです.
NESは主に,CPU・PPU・APU・ROM・RAMで構成されます.
CPU
中央演算処理装置のことで,名前の通りNESの中核を担います.演算(計算処理など)と処理(メモリーの読み取り,書き込み,PPU制御など)を行います.
ファミコンには6502(正確にはこれをカスタムした2a03)が搭載されており,8bitの演算処理(=8桁の二進数,最大255までの数値を扱える)をもっています.現代のCPUに比べて機能が限られており,シンプルになっています.
PPU
画像処理装置のことで,スプライト(マリオやクリボーなどのキャラクター)と背景(レンガブロックや地面,雲など)の2つを描画します.
APU
音声処理装置のことで,FM音源が4チャンネル(ピコピコ音),PCM音源が1チャンネル(mp3とかに近い)搭載されています.
ROM
プログラムやデータ(標準で32KBまで)と,キャラクターや背景の画像データ(標準で8KBまで)を保存するメモリーです.
RAM
座標やコインの枚数など,変動する値を入れる,書き換え可能なメモリーです.CPUとPPUどちらもRAMを持っています.
書いたプログラムでCPUを制御し,CPUを通じてPPU,APUの制御やメモリーの書き換えなどを行います.
プログラムはアセンブリ言語という,CPUが理解しやすい言語で書きます.もっと正確に言うと,CPUが理解できる言語は,機械語といいますが,この機械語に変換しやすいプログラムがアセンブリ言語です.
普段よく使われているプログラミング言語は,高級言語といい,人間が理解しやすくなっています.しかし,これを実行するとき,もしくはアプリ化するときには,いったんアセンブリ言語に変換して,さらに機械語に変換しています.
CPUが理解しやすい言語,ということは直接CPUを操作することに近くなるので,よりハードウェアの動作を理解するのに近づくことができます.
…簡単にかみ砕いて説明するって難しいですね.いろいろ調べてみてください. いろいろ解説するより,実際に動かしてみてとりあえず達成感を感じたほうがいいと思っているので,さっそく開発環境のセットアップに移ります.
ここでの解説はWindows限定です.MacやLinuxを使っている人はそれぞれ自分で検索してみてください.
開発には5つのソフトウェアを使います.
1. エディタ
プログラムを書くためのソフトです.メモ帳など,テキストを打って保存することができる機能があれば何でもよいのですが…
おすすめはVSCodeです.拡張機能というものを使って,NES開発をするのに最適な環境に仕上げることができ,非常に便利です.
ダウンロードはhttps://code.visualstudio.com/Download からどうぞ.大抵の人はUser Installerのx64でいいのではないでしょうか.
拡張機能は,ca65 Macro Assembler Language Support (6502/65816)があれば十分だと思います.
私はそれに加えて,
Trailing Spaces(余分なスペースを強調表示してくれるので,変なとこにあるスペースを消すのに役立つ)
Todo Tree(TODO: XXXXXX
とプログラム中に書くと,それをまとめて見れる)
Japanese Language Pack(日本語表示)
Better Comments(コメントの強調ができる)
などもいれています.VSCode側の設定では,空白文字を表示,自動保存を有効,インデントはタブ文字にする程度しか弄っていません.お好みでどうぞ.
2. Make
Makeコマンドが使えれば良いです.これを使って,ビルドという作業を自動化できて便利です.(いちいち長いコマンドを打たずに済みます.)
私はGnu Make を使っています.
インストールしたら,環境変数を通すと楽になります.基本はC:\Program Files (x86)\GnuWin32\にインストールされるはず(インストール時に確認!)なので,システム環境変数のPATHにC:\Program Files (x86)\GnuWin32\binを追加してください.
コマンドプロンプトを起動して,where make
と打ち,C:\Program Files (x86)\GnuWin32\bin\make.exe
と表示されれば環境変数の設定完了です.
makeコマンドがmake
と打てば使えるようになります.(環境変数を通さない場合,毎回C:\Program Files (x86)\GnuWin32\bin\make
と打つ必要がある)
3. コンパイラ,リンカー
cc65というツールをダウンロードします.cc65がコンパイラーで,それに付属するld65がリンカーです.
コンパイラーはアセンブリ言語を機械語に翻訳するツールで,リンカーは実際に動作できるファイルを完成させるのに必要です.
ダウンロードはhttps://sourceforge.net/projects/cc65/ からどうぞ.
これはインストーラー形式ではないので,展開して好きな場所に配置してください.私はこれも環境変数を通しましたが,お好みでどうぞ(makeファイルで自動化するので環境変数を通すメリットはほぼないです).
4. エミュレーター
エミュレーター(エミュ)といっても開発機能の豊富なエミュを使います.おすすめはMesenです.
このエミュはトレース機能やステップ機能,メモリツール,ブレークポイントはもちろん,逆ステップ機能もついています(たまにバグるけど).この機能は今後解説します(多分).
バージョンはMesen2が現在の最新リリースですが,Mesen0.9.9なら日本語に対応しています.今のところ私はMesen0.9.9からアップデートせずに使っています.
これもインストーラー形式ではないので,好きな位置に配置して,初めに実行ファイルを実行してください.初期設定を一度済ます必要があります.
ダウンロードはhttps://www.mesen.ca/ からどうぞ.older versionから0.9.9も選べます.
5. ペイントソフト
YY-CHRというファミコンのペイントに特化したペイントツールがあります.私は古いバージョンが好みです.
ダウンロードはhttps://w.atwiki.jp/yychr/pages/31.html からどうぞ.(C++版)
背景やスプライトの画像はすべて.chrというファイルにまとまっています.このファイルをYY-CHRで読み込んでください. では,実際にプログラムを実行してみましょう.
まず,こちらのサンプル をダウンロードします.
このサンプルはNES研究所 の配布しているサンプルプログラムを若干変更したものです.
このサンプルを好きな場所に保存してください.
次にVSCodeを立ち上げ,Ctrlを押したまま,Kを押し,次にOを押します(Ctrl+K Ctrl+O).
すると,フォルダーを開くというダイアログが出るので,サンプルを保存したフォルダを選択して開きます.
makefileを開き,実行ファイルのパスを正しく設定してください.
Ctrl+Jを押して,ターミナルを開き,make
と入力してコマンドを実行しましょう.
うまくいけば,エミュレーターが実行されてゲームが動作するはずです.
以後,makeコマンドを使ってゲームの実行ファイルを作成することを,「ビルドする」といいます.
次回はアセンブリ言語の解説をしながら,実際にプログラムを作ってみたいと思います.
© 2025 astsb.net.