Skip to content

ビルド手順

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 run

MESEN 未設定の場合は「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 は固定バンクのみで完結しているためバンク切替コードは含まない。