Ich bin ein Retro Gamer. Und was könnte mehr Retro sein, als physikalische Konsolen und physikalische Medien wie Cartridges? Leider sind die Preise für SNES-Spiele in den letzten Jahren in so astronomische Höhen geschnellt, dass der Start oder die Erweiterung einer Sammlung unverhältnismässig kostspielig ist.
Ich erstelle mir eigene Repros, mit Platine, Plastikhülle und passendem Aufkleber. Soweit die Vorgeschichte.

Hat man sich die Images für die Spiele, die man in ein physikalisches Cartridge verwandeln will erst einmal beschafft, beginnt der Spiessrutenlauf, unzählige Windows-Tools von dubiosen Seiten herunterzuladen, die die Images nach und nach in einen Zustand versetzen, den ein EEPrommer tatsächlich versteht.

Die Schritte sind:

  1. Überprüfen der Checksumme
  2. Entfernen unnützer Header
  3. Etwaiges Padden auf ein Vielfaches von 8MBit
  4. Anpassen der Checksumme
  5. Splitten in 4MBit Häppchen

Einen jedem dieser Tools ist gemein, dass sie teils uralt, teils buggy, aber immer umständlich bedienbar sind. Beispiele für Tutorials, aus denen ich viel gelernt habe, die aber auch ein buntes Potpourri von Windows Tools predigen:

  1. https://thepoorstudenthobbyist.wordpress.com/2017/09/14/how-to-make-a-snes-reproduction-cartridge/
  2. http://www.jaskagaming.com/2015/09/18/snes-reproduction-cart-tutorial/

Ich habe das ganze jetzt auf ein Tool reduziert, ergänzt um Linux Hausmittel, alles als Alias in meine Shellconfig verpackt und kann jetzt via snes_go16 mario.sfc alles mundgerecht für meinen EEPrommer aufbereiten. Ich erspare mir nervtötende Minuten und den Wechsel auf eine Windows Maschine.
Und einen weiteren Vorteil hat das ganze auch noch: es werden Segmente mit einem Zähler als Suffix generiert. Dieser bei 0 startende Zähler hilft mir bei der richtigen Konfiguration meines Flashers. Dort sind 3 Dipschalter zu setzen, das erste Segment flasht man in der Stellung 0-0-0.

# SNES ROM hacking
# brew install ucon64
# brew install coreutils
alias snes_check="ucon64"
alias snes_pad16="ucon64 --nbak --padn=2097152"
alias snes_pad32="ucon64 --nbak --padn=4194304"
alias snes_fix="ucon64 --nbak --chk"
alias snes_transfer="cp *.sfc_00* /Volumes/FVGT/__TRANSFER"
alias snes_clean="rm -f *.sfc_00*"

function snes_split() {
  prefix="$1_";
  gsplit -a3 -d -b 512k $1 $prefix;
}

function snes_go16() {
  snes_pad16 $1 > /dev/null;
  snes_fix $1 > /dev/null;
  snes_split $1;
}

function snes_go32() {
  snes_pad32 $1 > /dev/null;
  snes_fix $1 > /dev/null;
  snes_split $1;
}