Appearance
ビルド手順
NES ROM(UNROM / mapper 2, PRG 128KB, CHR-RAM 8KB)のビルド環境と手順。
前提ツールの導入
cc65 ツールチェーン(ca65 / ld65)を使用する。
bash
brew install cc65
ca65 --version # V2.18 以降を確認ビルド
bash
make # build/hello.nes を生成
make hex # 先頭32バイト(iNESヘッダ含む)を xxd でダンプ
make clean # build/ を削除生成物:
build/hello.nes— 131,088 バイト(iNES ヘッダ 16 + PRG 8×16KB = 131,072)build/hello.map/build/hello.dbg— リンカマップ・デバッグ情報
iNES ヘッダの期待値
4e 45 53 1a 08 00 21 00 ...- byte 0-3:
NES<EOF>マジック - byte 4:
08= PRG-ROM 8×16KB(128KB) - byte 5:
00= CHR-ROM なし(CHR-RAM 8KB を使用) - byte 6:
21= mapper 2(上位ニブル)+ 垂直ミラーリング(bit0)
実行(Mesen2)
環境変数 MESEN に Mesen2 の実行パスを設定して make run する。
bash
export MESEN="/Applications/Mesen.app/Contents/MacOS/Mesen"
make runMESEN 未設定の場合は「Mesen2未設定」メッセージを表示して終了する(エラーにはならない)。
構成
src/hello.s # ca65 アセンブリ(iNESヘッダ・リセット・CHR-RAM転送・表示)
cfg/nes.cfg # ld65 リンカ設定(UNROM 128KB, 全8バンク出力・$FFパディング)
build/ # 生成物(git 管理外)
docs/ # ドキュメント備考(UNROM バス競合)
UNROM はバンク切替時のバス競合回避回路を持たないため、$8000-$FFFF への 書き込み値は ROM 上の同アドレスの値と一致させる必要がある(ROM 内バンク テーブルに対する lda banktable,x / sta banktable,x 方式)。本 Hello World は固定バンクのみで完結しているためバンク切替コードは含まない。