Dom's Advanced SNES ROM Utility

  • Das Programm wird ja hoffentlich nicht nur von mir benutzt. :P

    Würde mich auch über Input von anderen Usern freuen, die eventuell den Vorschlägen hier zustimmen oder auch nicht. ;)



    Was ich angedeutet habe, finde ich eigentlich relativ simpel.

    Beispiel anhand FF Ultima:

    ROM Dateigröße: 2MB

    ROM Header sagt: 1MB ($0A)


    Man braucht doch nur die Dateigröße anhand der variabel im ROM Header vergleichen.

    Wenn diese zusammen passen, dann ist gut, ansonsten ROM Header Size updaten und erst dann die Checksum reparieren.

    Weiß jetzt nicht, was daran so komplex oder kompliziert sein soll. Oder stell ich mir das nur so leicht vor?

  • Das Programm wird ja hoffentlich nicht nur von mir benutzt. :P

    Würde mich auch über Input von anderen Usern freuen, die eventuell den Vorschlägen hier zustimmen oder auch nicht. ;)

    Das würde ich auch sehr begrüßen :bye:

    Ice Man Nichts gegen dich :D:P

    Man braucht doch nur die Dateigröße anhand der variabel im ROM Header vergleichen.

    Wenn diese zusammen passen, dann ist gut, ansonsten ROM Header Size updaten und erst dann die Checksum reparieren.

    Weiß jetzt nicht, was daran so komplex oder kompliziert sein soll. Oder stell ich mir das nur so leicht vor?

    Ich habe die ganze Komplexität mal etwas durchdacht :smoking:

    Eigentlich ist dein Ansatz ganz gut, ABER...

    Dadurch, dass wir die ROM size in diesem Fall intern (also in der Arbeitskopie, welche sich im RAM befindet) fixen müssen, bevor wir seine Checksum berechnen, kann es dazu kommen, dass, je nach dem wie der ROM Hacker seine Checksum berechnet hat, es wieder zu einer Übereinstimmung kommt und ein Fixen der Checksum über das Tool nicht möglich ist. In dem Fall muss man immer manuell gleichzeitig ein Auge auf die beiden angezeigten Größen haben und selbst entscheiden, ob man diese dann mittels der "Fix/Edit Header" Funktion reparieren muss. Das Tool ist ja für Leute gedacht, die sich etwas mit der Materie auskennen und somit auch wissen was sie tun :S

    Man muss dann auch bedenken, dass das Tool dann in jedem Fall und bei jeder angewandten Funktion die ROM size intern reparieren wird, nicht nur beim fixen der Checksum.

    Gestern Abend habe ich so eine Version des Tools noch kompiliert, jedoch nicht hochgeladen.

    Ich denke, dass werde ich heute Abend mal nachholen und auf das kommende Feedback warten 8)

  • Update auf v0.7.1!

    • Menüs "Options" und "Help" wurden hinzugefügt
      • In Options kann man nun individuell festlegen, ob die ROM size automatisch gefixed werden soll oder nicht
        • Ist diese Option gesetzt, wird beim Anwenden der nächsten Funktion diese automatisch gefixed
        • Hat den Nachteil, dass die "Fix ROM size" über "Fix/Edit Header Information" nicht mehr separat ausgeführt werden kann
      • Unter "Help" gibt es die beiden Unterpunkte
        • Manual unter welchem ihr die Anleitung findet
        • About mit dem About-Text

    Bei der "Auto fix ROM size" Funktion kann man nicht viel anders machen: Take it or leave it :wacko:


    Viel Spaß beim Testen! 8)

  • Wieso versiehst du die Datei eigentlich mit einem Passwort? xD

    Weil mir das komisch vorkam, dass beim ersten Release keine Minute später schon ein Download gemacht wurde, aber außer mir und einem Bot niemand angemeldet war :/

    Wann kann man die Company ändern? Ist ja etwas aufwendiger, oder?

    Wenn ich mal richtig Zeit dafür habe, werde ich das angehen ;)

    Ab Mitte nächsten Monat habe ich sowieso 2 Wochen Urlaub, spätestens da 8)

  • Habe mal einige SNES Hacks und Übersetzungen durch und einiges an Fehlern gefunden:


    EarthBound - 10th Anniversary Edition - Spiel wird nicht erkannt, obwohl Header in Ordnung.

    JonBound - Dark Future - Spiel wird nicht erkannt, obwohl Header in Ordnung.

    EDIT: Die beiden ROMs waren nach dem Patchen nicht ganz 4MB groß (nur bis Adresse 3FFFD0) und wurden deshalb nicht erkannt!


    Metroid Mission Rescue - Wird als LoROM erkannt, obwohl 6MB groß.

    Super Demo World - The Legend Continues - Wird als Unknown angezeigt, obwohl es ExHiROM sein sollte.


    SA-1 Spiele werden im Map Mode als "SA-1 ROM" angezeigt. Aber nicht, ob LoROM oder HiROM.

    Würde ich ändern und nur (Ex) LoROM bzw. (Ex)HiROM anzeigen, da SA-1 im ROM Type ja angezeig wird.


    The 9th Annual Vanilla Level Design Contest ist z.B. so ein Kandidat und darunter noch ExLoROM, weil 6MB.


    Fire Emblem - Thracia 776 - Ebenfalls 6MB groß und wird nicht als ExLoROM angezeigt.


    Außerdem hast du "Internal" im Menü falsch geschrieben; Interal. :P

    Desweiteren würde ich kByte oder mByte einfach nur mit KB bzw. MB abkürzen. ;)


    Ob die Fehler oben nun von den Spielen aus kommen oder von deinem Programm kann ich nicht sagen, aber erwähnen wollte ich es mal. ;)

  • Erstmal vielen Dank, dass du dir die Mühe machst und so viel testest! :thumbup:

    Metroid Mission Rescue - Wird als LoROM erkannt, obwohl 6MB groß.


    The 9th Annual Vanilla Level Design Contest ist z.B. so ein Kandidat und darunter noch ExLoROM, weil 6MB.


    Fire Emblem - Thracia 776 - Ebenfalls 6MB groß und wird nicht als ExLoROM angezeigt.

    Diese Spiele haben den Header an der LoROM Position (7FB0) und geben sich intern auch als LoROM aus.

    Um das zu korrigieren hätte der Hacker den Header an 407FB0 verschieben müssen und als Map Mode entsprechenden Wert hinterlegen.

    Da das nicht die einzigen Änderung gewesen wäre, welche das nach sich gezogen hätte, um aus dem LoROM ein ExLoROM zu machen, haben die es wahrscheinlich sein lassen ^^

    Ob man tatsächlich nur anhand der ROM-Größe schlussfolgern kann, ob es ein Extended ROM ist oder nicht, wage ich daher zu bezweifeln :/

    Super Demo World - The Legend Continues - Wird als Unknown angezeigt, obwohl es ExHiROM sein sollte.

    Beachte bei dem Patch bitte die Infos aus der ReadMe!

    SA-1 Spiele werden im Map Mode als "SA-1 ROM" angezeigt. Aber nicht, ob LoROM oder HiROM.

    Würde ich ändern und nur (Ex) LoROM bzw. (Ex)HiROM anzeigen, da SA-1 im ROM Type ja angezeig wird.

    Hab gerade mal noch alle Map Modes, welche es theoretisch geben könnte, aufgenommen und werde gleich ein Release machen :)

    Die haben aber grundsätzlich einen ganz eigenen Map Mode (Mode 23), sind also in der Theorie weder LoROM noch HiROM.

    Da die ganzen SA-1 Module physikalisch betrachtet aber ALLE LoROM (und übrigens auch SlowROM) sind, gebe ich das nun zur Sicherheit noch mit aus ;)

    Um mich 1000%ig abzusichern habe ich auch noch Mode 33 hinzugefügt, was eigentlich ein SA-1 (LoROM) mit FastROM wäre (was es aber nicht gibt).

    Außerdem hast du "Internal" im Menü falsch geschrieben; Interal. :P

    Ups, hatte das irgendwie die ganze Zeit über nicht bemerkt :loser:

    -> Ist jetzt auch behoben :saint:

    Desweiteren würde ich kByte oder mByte einfach nur mit KB bzw. MB abkürzen. ;)

    Bin ich persönlich kein Fan davon, obwohl das eigentlich klar definiert ist, aber ein Laie könnte das leicht verwechseln (Byte und Bit).


    Deshalb:


    Update auf v0.7.2!

    • Minimale Verbesserungen in der Erkennung des Map Mode
    • Korrektur Schreibfehler "Interal"
  • Achso, wenn nichts bei 7FB0 bzw 407FB0, dann ist es kein "ExLoROM".

    Gilt gleiches auch für FFCO/40FFC0 mit ExHiROM?


    Rein theoretisch sind alle Spiele ab 6MB "Ex" meine ich jetzt mal. ;)


    Super Demo World - The Legend Continues

    Spiel ist richtig gepatcht und wird im Emulator (snes9x und auch Mesen-S) auch richtig angezeigt.


    Das mit den kB und mB ist weniger tragisch. Danke für die Mühe!

  • Achso, wenn nichts bei 7FB0 bzw 407FB0, dann ist es kein "ExLoROM".

    Gilt gleiches auch für FFCO/40FFC0 mit ExHiROM?

    Das macht keinen Unterschied, ob der Header normal oder extended ist.

    Ich mache erst eine Plausibilitätsprüfung, um den Header zu lokalisieren und lese dort dann den Map Mode nochmal aus.

    Es wird also der Map Mode angezeigt, als welchen sich das ROM selbst ausgibt.

    Super Demo World - The Legend Continues


    Spiel ist richtig gepatcht und wird im Emulator (snes9x und auch Mesen-S) auch richtig angezeigt.

    Also bei mir wird das jedenfalls im Tool auch korrekt erkannt:



    Ich habe das US Headered GoodROM (US[!], CRC32: B19ED489) genommen, das mit Lunar Expand auf 48 MBit ExHiROM expanded und danach mit Lunar IPS gepatched :S


    Sollte das bei dir nicht hinauen, schreib mir einfach eine PN ;)

  • Update: Wollte eben Batman - Revenge of the Joker (USA) (Proto) splitten und das geht nicht.

    ROM hat keinen Header. Option Deinterleave wird angezeigt, obwohl unnötig bei diesem ROM.

    Was stimmt hiermit nicht?


    EDIT: snes9x spielt es als LoROM ab, aber laut ROM Header bei FFCO ist es HiROM.

    Was stimmt nun? XD


    EDIT2: Die Reset Vector, etc. sind allerdings beim 7FC0 Header für LoROM.


    Komisches Prototyp xD

  • Das ist in der Tat ein Problem-ROM :S

    Ob es nun ein Fehler von den Programmierern war oder ob da was aus technischen Gründen umgemodelt werden musste kann man leider nicht wirklich sagen X/

    Ich gehe davon aus, dass es ein LoROM ist.

    D.h. du müsstest auf jeden Fall, bevor du es auf Modul bannst, den Wert für LoROM im Header eintragen.

    Was für eine Prototyp-Version benutzt du (CRC32)?

    Bei mir wird jedenfalls die Deinterleave Funktion nicht angezeigt :/

  • So,

    hab mir mal einen speziellen Kanditaten angeschaut: EarthBound.


    Das Spiel ist ja bekannt für seine 100000 Überprüfungen (eigentlich nur 5 oder so, xD) aber dein Tool behebt den Region Check nicht wirklich.

    Adresse xA141: F0 0C (BEQ $0C) wird lediglich zu 80 OC (BRA $0C).

    Das umgeht zwar die Region, aber nach dem Name Select kommt der SRAM Check und dann war's das.


    Habe mir das ROM mal genauer angeguckt und für EarthBound sind folgende Änderungen nötig:

    x281D: D0 1A -> EA EA

    x839D: 31 -> 30

    x83A8: 31 -> 30

    xA128: 31 -> 30

    xA141: F0 -> 80

    x1FFE7: EF EF FF C1 -> EA A9 00 00

    x3FFD6: EF F2 FD C3 F0 -> EA A9 00 00 80


    Hoffe das hilft.



    EDIT: Wieso werden expandierte ROMs eigentlich mit .bin ausgegeben und nicht mit .sfc?

    LG

  • Danke mal für die Info! :thumbup:

    Werde den Region Unlock für Earth Bound in die nächste Version einbauen ;)

    Generell weiß ich, dass es noch einige Routinen gibt, welche noch nicht erkannt werden.

    Wenn sowas auffällt, bitte posten! Das würde mir einiges an Arbeit erleichtern :saint:

    Wieso werden expandierte ROMs eigentlich mit .bin ausgegeben und nicht mit .sfc?

    LG

    Das hatte ich gemacht, um den Output zweckmäßig als Binary-File zu kennzeichnen.

    Man expanded ein ROM ja nicht einfach, um es dann im Emulator zu zocken ;)

  • Cooles Projekt, was ihr hier auf die Beine gestellt habt!

    Meine Lieblings SNES-RPGs:


    1. Lufia II
    2. Final Fantasy VI
    3. Terranigma, Seiken Densetsu III
    4. Tengai Makyō Zero, Dragon Quest III SNES-Remake
    5. Star Ocean, Shiren the Wanderer
    6. Chrono Trigger
    7. Final Fantasy V, Magical Land of Wozz
    8. Seiken Densetsu II, Zelda: A Link to the Past


    Lieblings-Charaktere: Terra & Shadow (FF 6), Tia & Dekar (Lufia), Carlie (Seiken III), Subaru (TMZ), Schala (CT)

  • Dank geht an Dom. Ich gebe nur Ideen und Input. :)


    Apropos: Habe es irgendwie geschafft, dass dein Tool nur noch Mist baut. :D


    Wenn man die englische Übersetzung von Dragon Quest V (v2.01 von DeJap und Header vorher entfernen nach dem Patchen) zum Checksum reparieren nimmt, werden die ersten 20 Bytes (alle 00) als Header erkannt und gelöscht.

    Anschließend werden die darauf folgenden 200 Bytes (was zum Spiel gehört) dupliziert und als Header hinzugefügt, was keinen Sinn macht.

    Danach öffne mal ein anderes Spiel, wo der Checksum nicht stimmt.

    Das Programm macht was, aber nicht den Checksum reparieren, xD.


    Desweiteren wird die englische Übersetzung von Super Naxat Open - Golf de Shoubu da Dorabocchan als Interleaved erkannt, obwohl das nicht der Fall ist,.