📓 memotty

Super Metroid Redesign を bsnes で動かすための完全手順

本ドキュメントは、Super Metroid Redesign が snes9x では動くが bsnes では起動しない問題を解決するための、
ROM選定・パッチ選択・ヘッダ削除・コマンド解説をまとめたものです。


1. どの ROM・どのパッチを選ぶか #

1.1 使用する ROM(最重要) #

以下の条件を すべて満たす ROM が必要です。

  • Super Metroid USA版
  • No Header(ヘッダなし)
  • ファイルサイズ:3072KB(3,145,728 bytes)

❌ 使用してはいけない ROM #

  • ダウンロードしたROM
  • サイズが 3073KB のもの(= ヘッダ付き)

snes9x は不正な ROM でも起動することがありますが、
bsnes は実機基準のため正しい ROM でなければ起動しません。


1.2 使用する IPS パッチ #

Redesign には複数の IPS が含まれていますが、使うのは 1つだけ です。

パッチ名対象ROM使用可否
Metroid_Redesign.ipsヘッダなし ROM✅ 使用する
Metroid_Redesign_Headered.ipsヘッダ付き ROM❌ 使用しない

👉 ヘッダを削除した ROM には Metroid_Redesign.ips を使用します。


2. ヘッダの削除方法(WSL2 / Ubuntu) #

2.1 なぜヘッダを削除するのか #

  • .smc ROM には 512バイトの余計なヘッダ が付いていることがある
  • IPS パッチは 実機アドレス前提
  • ヘッダがあると、すべてのアドレスが 512Bずれる

結果:

  • snes9x → 起動することがある
  • bsnes → 起動しない(正常動作)

2.2 ヘッダ削除コマンド #

dd if="Super Metroid.smc" of="Super Metroid_noheader.smc" bs=512 skip=1 status=progress

実行結果の確認 #

ls -lh Super Metroid_noheader.smc
  • 3072K になっていれば成功

3. dd コマンドの詳細解説 #

3.1 dd とは #

ddバイト単位で生データをコピーする低レベルコピーコマンドです。

  • ファイル構造や拡張子は一切無視
  • 指定されたバイト数をそのまま読み書きする

3.2 各オプションの意味 #

dd if="Super Metroid.smc" of="Super Metroid_noheader.smc" bs=512 skip=1 status=progress

if=Super Metroid.smc #

  • Input File(入力元)
  • ヘッダ付きの元 ROM

of=Super Metroid_noheader.smc #

  • Output File(出力先)
  • ヘッダを削除した新しい ROM

bs=512 #

  • ブロックサイズ(512バイト単位)
  • SNES の SMC ヘッダサイズと一致

skip=1 #

  • 入力ファイルの最初の 1ブロック(512B)を読み飛ばす
  • これが ヘッダ削除の正体

status=progress #

  • コピー進捗を表示(処理内容には影響なし)

3.3 処理内容を日本語で言うと #

「ROM を 512バイト単位で読み込み、
最初の 512バイト(ヘッダ)を捨て、
残りを新しい ROM ファイルとして保存する」


4. 正しい最終手順まとめ #

Super Metroid.smc(3073KB / ヘッダ付き)
        ↓ dd でヘッダ削除
Super Metroid_noheader.smc(3072KB)
        ↓ Metroid_Redesign.ips を適用
Metroid_Redesign.sfc(約4096KB)
bsnes で起動

5. 重要ポイントまとめ #

  • .smc / .sfc は拡張子であり中身は同じ
  • ヘッダは 実機には存在しない
  • bsnes は「実機で動くか」を正確に判定する
  • snes9xで動いたことは 正しさの証明ではない

6. 結論 #

  • 問題の原因は ROMのヘッダとリージョン不一致
  • bsnesは正しい挙動をしていた
  • 正しい ROM + 正しい IPS + 正しい順序 で 必ず起動する