Skip to content

Instantly share code, notes, and snippets.

@ruruke
Created December 31, 2025 15:40
Show Gist options
  • Select an option

  • Save ruruke/5f55918b0e358109a034fed3021ed8e9 to your computer and use it in GitHub Desktop.

Select an option

Save ruruke/5f55918b0e358109a034fed3021ed8e9 to your computer and use it in GitHub Desktop.
ファミコンリミックス1+2のbinを.nesにしてくれるshellscript
#!/usr/bin/env bash
set -euo pipefail
OUT_DIR="nes_out"
BAK_DIR="backup"
mkdir -p "$OUT_DIR" "$BAK_DIR"
declare -A NAME_MAP=(
[FACJ.bin]="ピンボール (World)"
[FAHJ.bin]="テニス (JP+EN)"
[FAJE.bin]="アイスホッケー (EN)"
[FAKE.bin]="ゼルダの伝説 (JP)"
[FALE.bin]="ベースボール (EN)"
[FALJ.bin]="ベースボール (JP)"
[FAME.bin]="ワリオの森 (EN)"
[FAMJ.bin]="ワリオの森 (JP)"
[FANJ.bin]="アーバンチャンピオン (World)"
[FAPE.bin]="NESオープントーナメントゴルフ (EN)"
[FAPJ.bin]="マリオオープントーナメントゴルフ (JP)"
[FCWE.bin]="スーパーマリオブラザーズ3 (EN)"
[FESJ.bin]="クルクルランド (World)"
[FEUJ.bin]="ドンキーコング3 (World)"
[FGFE.bin]="ゴルフ (EN)"
[F_DOCTORJ.bin]="ドクターマリオ (JP+EN)"
[F_GOLFJ.bin]="ゴルフ (JP)"
[F_ICEHOCKEYJ.bin]="アイスホッケー (JP)"
[WUP-FA4J.bin]="レッキングクルー (World)"
[WUP-FA8E.bin]="メトロイド (EN)"
[WUP-FA8J.bin]="メトロイド (JP)"
[WUP-FA9J.bin]="メトロイド (JP 別版)"
[WUP-FAAJ.bin]="スーパーマリオブラザーズ (World)"
[WUP-FABJ.bin]="スーパーマリオブラザーズ3 (JP)"
[WUP-FACE.bin]="アイスクライマー (EN)"
[WUP-FACJ.bin]="アイスクライマー (JP)"
[WUP-FADE.bin]="星のカービィ 夢の泉の物語 (EN)"
[WUP-FADJ.bin]="星のカービィ 夢の泉の物語 (JP)"
[WUP-FAEJ.bin]="マリオブラザーズ (World)"
[WUP-FAFJ.bin]="ドンキーコング (World)"
[WUP-FAGJ.bin]="エキサイトバイク (JP+EN)"
[WUP-FAHE.bin]="スーパーマリオブラザーズ2 (EN)"
[WUP-FAHJ.bin]="スーパーマリオUSA (JP)"
[WUP-FAJE.bin]="バルーンファイト (EN)"
[WUP-FAJJ.bin]="バルーンファイト (JP)"
[WUP-FAKE.bin]="パンチアウト!! (EN)"
[WUP-FAME.bin]="ヨッシーのたまご (EN)"
[WUP-FAMJ.bin]="ヨッシーのたまご (JP)"
[WUP-FAWJ.bin]="ドンキーコングJR. (World)"
[WUP-FBAE.bin]="ゼルダの伝説 (EN)"
[WUP-FBAJ.bin]="ゼルダの伝説 (JP)"
[WUP-FBBE.bin]="光神話 パルテナの鏡 (EN)"
[WUP-FBBJ.bin]="光神話 パルテナの鏡 (JP)"
[WUP-FBCE.bin]="リンクの冒険 (EN)"
[WUP-FBCJ.bin]="リンクの冒険 (JP)"
[WUP-FBJE.bin]="ヨッシーのクッキー (EN)"
[WUP-FBJJ.bin]="ヨッシーのクッキー (JP)"
)
echo "=== bin → nes 変換開始 ==="
shopt -s nullglob
for f in *.bin; do
name="${NAME_MAP[$f]:-}"
if [[ -z "$name" ]]; then
echo "SKIP: $f(定義なし)"
continue
fi
out="$OUT_DIR/$name.nes"
cp -n "$f" "$BAK_DIR/$f" 2>/dev/null || true
perl -0777 -e '
my $d = do { local $/; <STDIN> };
my $p = index($d, "NES"); # 4E 45 53
if ($p >= 0) {
# NES があれば前を削除
$d = substr($d, $p);
substr($d, 3, 1) = "\x1A";
} else {
# 無ければ先頭に NES\x1A を追加
$d = "NES\x1A" . $d;
}
die "header fix failed\n"
unless substr($d,0,4) eq "NES\x1A";
print $d;
' < "$f" > "$out"
echo "OK : $f → $(basename "$out")"
done
echo "=== 完了 ==="
echo "出力: $OUT_DIR/"
echo "バックアップ: $BAK_DIR/"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment