Created
December 31, 2025 15:40
-
-
Save ruruke/5f55918b0e358109a034fed3021ed8e9 to your computer and use it in GitHub Desktop.
ファミコンリミックス1+2のbinを.nesにしてくれるshellscript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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