Autor |
Nachricht |
yominator
|
|
|
Titel: SNES Rom Format
Verfasst am: 25.08.2009, 21:48 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Hallo,
ich möchte in mein Dateierkennungsprogramm yomi eine Erkennungs- und Rename-Routine für SNES-Roms einfügen. Und da haben wir das Problem: Es ist das bisher einzige Rom-Format, was sich erfolgreich gegen eine Erkennung wehrt.
Schade, da zum Teil höchst detaillierte Rom-Versions-Infos im Rom schon von haus aus gespeichert sind (z.B. Lemmings2: " ... LemmingsII V1.01, assembled 12:36am on Tuesday the 12/7/1994 ...").
Einen einheitlichen Standard schein es nicht zu geben. In den Docs wir mal angegeben, dass ein "SNES" String an &H200 zu finden wäre. Das ist aber bei den allerwenigsten der Fall (geschweige denn der SNES-String überhaupt zu finden). Weiter steht die Info, um welches Spiel es sich handelt, ständig an anderen Stellen, mal an &H7FB0, an &HFF7B0=, an &H1013F0 usw.
Das einzige was zum großen Teil gleich zu sein scheint ist die Position &H9 mit den Hex-Werten AA BB 04.
Hat jemand eine detaillierte Haeder-Übersicht für das SNES? Auch innerhalb der Formatendungen .fig .sfc und .smc scheint es mehrere gravierende Unterschiede zu geben ... oder die Dateiendungen sind falsch.
Danke im voraus. |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
pYRo
|
|
Titel: SNES Rom Format
Verfasst am: 26.08.2009, 09:04 Uhr
|
|
Retromeister
Anmeldungsdatum: 01. Jan 2006
Beiträge: 1.049
Wohnort: Deutschland
Status: Offline
|
|
Dein Problem dürfte sein, daß du zwar den Header siehst, ihn aber nicht unbedingt lesen kannst, weil net alles in ASCII vor dir steht
,
machs doch wie die anderen ROM Renamer auch, und orientiere dich nicht am Header, sondern an einer Checksum des ROMS (CRC, MD5, SHA, oder was auch immer dir lieber ist) in Verbindung mit ner eigenen Datenbank.
Infos zum SNES Header gibts auch massig, schon der 1. Google Treffer bringt schon brauchbares
Davon ab, hast du schonmal NSRT probiert? der erkennt in fast allen meinen SNES ROMs die Header. |
Zuletzt bearbeitet von pYRo am 27.08.2009, 15:17 Uhr, insgesamt ein Mal bearbeitet
|
|
|
|
|
yominator
|
|
Titel: SNES Rom Format
Verfasst am: 26.08.2009, 10:38 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Danke für den Auszug. Eine Datenbank möchte ich aber nicht ankoppeln. Yomi soll klein, schnell und nur eine einzelne Datei sein. Die Version 0.52 (unveröffentlicht) ist gerade mal 184KB groß und unterstützt aktuell 22 Dateitypen und 12 Romtypen und kann davon 8 Renamen.
Dass die Daten codiert sind ist schon klar. Erfolgreich auslesen kann ich die bereits bei allen anderen Nintendo-Rom-Formaten. Einzig eben SNES-ROMS weigern sich. Die von Dir oben beschriebene Stelle funktioniert eben nicht z.B. bei Bubsy, X-Men und anderen. Dort ist dieser Speicherbereich entweder mit dem Hexwert 00 oder FF komplett gefüllt.
Nochmal zur Problematik: Die bisherigen Tools gehen davon aus, dass es sich um einen SNES-Rom handelt und behandeln es entsprechend. Mein yomi verhält sich aber anders. Es durchsucht die betreffende Datei nach einem Erkennungsstring, der yomi sagt, dass es sich eindeutig um ein SNES-Rom handelt, und eben nicht um 32X, NDS, PDF-Datei o.ä. Erst dann kann ich die Haeder versuchen auszulesen. Meine erste Fragestellung war vielleicht falsch gewählt. Sorry.
Der abgebildete Rom ist ein schönes Beispiel. Den japanischen Schriftzug entnimmt das Tool offensichtlich aus dem Rom. yomi würde als Rename-Vorschlag "toresha- hanta- G (J)" aus dem Rom selbst transcripieren, so wie es eben auf japanisch da steht. Dafür habe ich bereits eine Routine geschrieben, die beim NDS funktioniert. |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
pYRo
|
|
Titel: SNES Rom Format
Verfasst am: 26.08.2009, 11:03 Uhr
|
|
Retromeister
Anmeldungsdatum: 01. Jan 2006
Beiträge: 1.049
Wohnort: Deutschland
Status: Offline
|
|
Die Fragestellung war, denk ich mal ok, nur bist du schon sehr viel tiefer in der Materie als sie vermuten ließ^^
Das größte Problem ist wohl, daß viele ROMs keine oder unsaubere Header haben:
Für die meisten gilt aber:
LowROM Header 81B0h
HighRom Header 101B0h
Du solltest dich mal mit dem Autoren von NSRT in Verbindung setzen, das Tool findet nämlich auch noch viele Infos in ROMs die ich selbst zuvor modifiziert habe, also muß es ja einige zuverlässige Anhaltspunkte im ROM geben.
Noch eine Idee zu deinem Tool: Warum machst du nicht eine Vorauswahl nach Dateiendung, mit anschließender Identifikation des Dateiinhalts und erst wenn der 2. Punkt fehlschlägt einen Tiefenscan auf alle möglichen Formate? - Wär imo schneller in der Ausführung und auch zuverlässiger im Ergebnis. |
|
|
|
|
|
yominator
|
|
Titel: SNES Rom Format
Verfasst am: 26.08.2009, 13:27 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Die Autoren von NSRT kontakte ich demnächst, um dem Problem der eindeutigen Identifikation von SNES-Roms auf die Spur zu kommen.
Deine Idee die Dateiendungen zuerst zu prüfen und mit der Info in der Datei zuvergleichen ist nicht schlecht. Drauf kommen muss man. Ich werde Dich in meine Credit-Liste in Yomi aufnehmen.
Als ich das Projekt Yomi gestartet habe (der Vorgänger von Yomi sollte allerdings eine MegaDrive Emulator werden) ging mir es darum Dateien zu identifizieren, die gar keine oder eine absichtlich falsche Dateiendung haben, wie z.B. die Dateien im Firefox cache oder Dateien auf Spiele-CDs um eine Bearbeitung zu erleichtern. |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
laforma
|
|
Titel:
Verfasst am: 27.08.2009, 12:27 Uhr
|
|
Retrokenner
Anmeldungsdatum: 01. Jun 2007
Beiträge: 394
Status: Offline
|
|
mmh, eingentlich sollte der header immer an den gleichen stellen zu finden sein und dementsprechend auch interpretierbar. gibt halt nen unterschied zwischen lorom und hirom formaten und ich kann mich dunkel erinnern, dass ne menge roms im netz rumschwirren, die ohne header gedumpt werden, zumindest kann ich mich erinnern, dass man mit bestimmten snes tools einfach den header entfernen oder anbringen konnte und das rom funktionierte im emu immernoch tadellos... |
|
|
|
|
|
pYRo
|
|
Titel:
Verfasst am: 27.08.2009, 15:14 Uhr
|
|
Retromeister
Anmeldungsdatum: 01. Jan 2006
Beiträge: 1.049
Wohnort: Deutschland
Status: Offline
|
|
ZSNES benötgit keinen Header im ROM, um es abzuspielen. Davon ab ist es eh erstmal wichtiger eine eindeutige Signatur zu finden, mit der er sicherstellen kann, ob es sich um ein SNES-ROM handelt. Der Header eignet sich wies ausschaut nicht dazu, da er 1. keine Werte enthält die in jedem ROM gleich sind und 2. ständig an anderen Offsets rumschwirrt.
|
|
|
|
|
|
yominator
|
|
Titel:
Verfasst am: 30.08.2009, 22:53 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Ich habe jetzt eine Erkennungsroutine eingefügt, die viele SNES-Roms erkennt. An eine Renaming-Funktion ist leider derzeit aber noch nicht zu denken.
Ich prüfe zur Zeit, ob es eine feste Position gibt, die die Adresse der gewünschten Daten enthält. Nintendo verfährt bei den NDS-Roms so. Irgendeine Logik muss ja auch beim SNES dahinter stecken. |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
mateyo
|
|
Titel:
Verfasst am: 31.08.2009, 00:01 Uhr
|
|
Retromeister
Anmeldungsdatum: 16. Jul 2008
Beiträge: 1.736
Wohnort: Frankfurt am Main
Status: Offline
|
|
header sind in letzter zeit relativ unbeliebt geworden yomi, da sie nicht zu den reinen rom daten gehören.
du wirst bei anderen systemen prophezeie ich dir auf ähnliche probleme treffen, wie z.b. beim n64.
sinnvoller wäre wirklich die verwendung eines dat files, wie z.b. das von no-intro.
du kannst in dein programm ja eine erkennung einbauen ob das rom ein header hat, oder nicht, und wenn nein greift er auf das datfile zu.
mein vorschlag wäre aber, wenn ja, das dein programm den header entfernt. |
|
|
|
|
|
yominator
|
|
Titel:
Verfasst am: 31.08.2009, 15:59 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Hmm, eine dat möchte ich nicht anfügen, da yomi das was vorhanden ist auslesen soll. Eine dat ist zweifelsohne einfacher zu realisieren, aber auch entsprechend größer. Warum 10 MB wenn es 200KB auch tun?
Da yomi die Infos aus dem Rom liest braucht es auch keine dat-updates und auch neue und unbekannte Dateien können damit erkannt werden. Probiert es z.B. bei NDS und/oder bei PD-Roms aus.
Was gegen das Haeder-entfernen spricht: yomi soll die Datei selbst nicht verändern. Das macht auch keinen Sinn, da meines erachtens beim Rom-Dumping Zelle für Zelle eines Chips ausgelesen wird und der Haeder da mit drin ist und eben doch zu den reinen Rom-Daten gehört. Ich kann deshalb dem Gedankengang des "aus der Mode kommens des Haeders" nicht folgen.
Das Problem beim N64 ist einzig und allein der Modus mit dem gedumpt wurde: Normalmodus-Reihenfolge: ABCD oder die Datei ist swapped z.B. BADC-Reihenfolge. |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
Jezze
|
|
Titel:
Verfasst am: 31.08.2009, 18:04 Uhr
|
|
Banned Team Member
Anmeldungsdatum: 30. Okt 2004
Beiträge: 5.751
Status: Offline
|
|
Die ersten 512byte der meisten SNES ROM-Images im Web gehören nicht zum Inhalt des Original ROM-Chip. Dieser Header wurde von den Dumper hinzugefügt.
Bsp.
1Mbit ROM-Image 1048576byte ohne Header
1Mbit ROM-Image 1049088byte mit Header
Vielleicht kommt auch daher deine Verwirrung, dass du an der Adresse 0x00000200 nur selten einen SNES String findest, denn genau an diese Stelle endet der Header (0x00000000 bis 0x000001FF) wenn er vorhanden ist. |
_________________ Test your limits and break through!
|
|
|
|
|
yominator
|
|
Titel:
Verfasst am: 31.08.2009, 18:26 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Das will recherchiert sein. Also gibt es 2 Haeder. Den Dumper-Haeder und den echten von Nintendo an irgendeiner Stelle im Rom. Das erklärt einiges.
Hmm. Dann heißt es also Imagegröße ermitteln und Abweichung ermitteln. Abweichung in die Adressberechnung einbinden und schon steht alles ja wieder an der richtigen Stelle...
Mal probieren |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
Matthias_H
|
|
Titel:
Verfasst am: 20.03.2010, 20:59 Uhr
|
|
Retrohling
Anmeldungsdatum: 20. Mar 2010
Beiträge: 1
Wohnort: Saarbrücken
Status: Offline
|
|
Ist dieses Thema überhaupt noch aktuell? Egal
Wie du schon richtig erkannt hast, willst du erst einmal den Dumper-Header loswerden. Wenn deine Dateigröße also beispielsweise 0x400200 ist, kannst du mit großer Wahrscheinlichkeit sagen, dass es bei Offset 0x200 mit dem Original-ROM losgeht. Ab da gibt es eigentlich nur noch zwei Möglichkeiten, nämlich LoRom (Namen bei 0x7FC0 + ROM-Offset) oder HiRom (0xFFC0 + ROM-Offset). Am einfachsten ist es wahrscheinlich, an allen in Frage kommenden Adressen nachzusehen, ob da alphanumerische oder Half-Width-Kana (Shift-JIS) Zeichen zu finden sind. Ich habe das in der Retrode wie folgt gelöst (AVR-C):
Code: bool isAlphanumeric(char* string, int length) {
int kk;
for (kk=0; kk<length;++kk) {
if ((string[kk] >= 0x80 && string[kk] < 0xA0) || string[kk]<0x20 || string[kk]>0xE0)
return false;
}
return true;
}
Wenn du jetzt wissen willst, ob der Name des Spiels an Stelle 0x7FC0 ist, würde das also in etwa so gehen:
Code: char *ROMfile; // sagen wir mal, das wäre der Zeiger auf die ROM-Datei
if (isAlphanumeric(ROMfile + 0x7FC0, 21)) {
printf("Game title probably located at 0x7FC0").
}
Nach dem, was meine User mir so berichten, geht das bei den allerallermeisten Spielen problemlos. (Ich verwende dieselbe Routine auch zum Erkennen von Virtual Boy und Sega Mega Drive Titeln). Windows kann nur leider keine Dateinamen mit SJIS-Zeichen
Viele Grüße,
Matthias |
_________________
Zuletzt bearbeitet von Matthias_H am 22.03.2010, 07:59 Uhr, insgesamt ein Mal bearbeitet
|
|
|
|
|
yominator
|
|
Titel:
Verfasst am: 21.03.2010, 21:29 Uhr
|
|
Retrokenner
Anmeldungsdatum: 22. Nov 2007
Beiträge: 347
Wohnort: Osterland
Status: Offline
|
|
Aktuell ist das Thema immer Aus Zeitmangel ist mein Projekt leider ins stocken gekommen. Außerdem will ich für die nächste Version alles neu schreiben um alle verkorksten Codezeilen loszuwerden. Danke für die Infos. |
_________________ Braucht jemand mein Yomi-Tool? Wenn nicht geb ichs auf.
|
|
|
|
|
KillBill_158
|
|
Titel:
Verfasst am: 26.04.2012, 12:04 Uhr
|
|
Retrohling
Anmeldungsdatum: 16. Sep 2010
Beiträge: 10
Wohnort: Plauen
Status: Offline
|
|
Jup, ich brauche es NSRT geht nämlich nur bei SNES Roms nun hätte ich gerne eine änliche Áufschlüsselung des Roms CRC und eckdaten. Die ich mir dann rauskopieren kann. Das einzigste was ich bisher gefunden habe was aber nicht 100% das richtige ist, ist das hier http://gamehacking.org/vb/threads/6120-GHTool-A-Collaborative-Rom-Hacking-Tool aber währe schön wenn du das hier zuende machst ich brauche es um eine Referenz Rom Info zu erstellen um es dann zu patchen. ich komm aus dem snes-projects.de Forum da kann man sowas gebrauchen ^^
MfG KillBill_158 |
_________________
Wer sich entschieden hat, etwas zu tun, und an nichts anderes denkt, überwindet alle Hindernisse.
|
|
|
|
|
|