Checksum

Hier könnt Ihr Erfahrungen rund ums Thema "ROM-Translation" und "ROM-Hacking" austauschen

Moderator: DarkZero

Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Checksum

Beitrag von Katana »

Hi, kann mir jemand sagen, wie ich die Checksumme für SNES (GB, NES) ROMs ändere?

Die Checksumme wird bei Off $81DE gespeichert (2 Byte groß).
Wie kriege ich jetzt raus, ob das richtig ist bzw. welche die richtige Checksumme wäre.
Thx !
(PS.: Ist die checksum auch byteswapped?)

------------------
Katana
SinaP
Beiträge: 248
Registriert: Sa Mär 11, 2000 1:01 am

Checksum

Beitrag von SinaP »

... bei hirom ist sie nochmal $8000 byte weiter, ausserdem glaub ich hast Du da noch denn header mit gerechnet.
Du solltest dir schon sicher sein das du an der richtigen stelle versuchst die checksumme zu ändern .

cu


------------------
Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Checksum

Beitrag von Katana »

Ok, stimmt das war LoRom und mit Header, aber die Stelle ist ja weniger wichtig, ich will wissen, wie ich die berechne (von welchem Offset, bis zu welchem und was mit den Werten machen (addieren, multi, mische ???)...
Snes9x z.B. sagt einem doch, ob die Checksumme richtig oder falsch ist, irgendwie muß die doch berechnet werden,...
-> Da fällt mir ein, man könnte ja mal in Source von Snes9x schauen *g* <-

------------------
Katana
SinaP
Beiträge: 248
Registriert: Sa Mär 11, 2000 1:01 am

Checksum

Beitrag von SinaP »

Kann Ich Dir nich sagen, die docus die Ich habe haben da abenteuerliche konstruktionen um sie zu ermitteln :-(

cu

------------------
Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Checksum

Beitrag von Katana »

Hmm, wo hast du denn deine Doc's her? Im Quellcode von Snes9x steht sowas wie:

ROM = new uint8 [MAX_ROM_SIZE + 0x200 + 0x8000];

//HiROM:
Memory.SRAMSize = ROM [0xffd8];
strncpy (ROMName, (char *) &ROM[0xffc0], ROM_NAME_LEN - 1);
ROMSpeed = ROM [0xffd5];
ROMType = ROM [0xffd6];
ROMSize = ROM [0xffd7];
ROMChecksum = ROM [0xffde] + (ROM [0xffdf] << 8);
ROMComplementChecksum = ROM [0xffdc] + (ROM [0xffdd] << 8);

//LoROM:
Memory.SRAMSize = ROM [0x7fd8];
ROMSpeed = ROM [0x7fd5];
ROMType = ROM [0x7fd6];
ROMSize = ROM [0x7fd7];
ROMChecksum = ROM [0x7fde] + (ROM [0x7fdf] << 8);
ROMComplementChecksum = ROM [0x7fdc] + (ROM [0x7fdd] << 8);
memmove (ROMId, &ROM [0x7fb2], 4);

sprintf (String, """%s"" [%s] %s, %s, Type: %s, Mode: %s, TV: %s, S-RAM: %s, ROMId: %s",
ROMName,
(ROMChecksum + ROMComplementChecksum != 0xffff | |
ROMChecksum != sum1) ? "bad checksum" : "checksum ok",
MapType (),
Size (),
KartContents (),
MapMode (),
TVStandard (),
StaticRAMSize (),
ROMId);

nur steige ich da nicht so ganz durch...
*HIIIIIIIILFEEEEE*
(und jetzt sag' mir keiner, daß sprintf(...) für die textausgabe zuständig ist *g*). Nur könnte mir vielleicht einer mit den ROMChecksum... weiterhelfen ???
Thx

------------------
Katana

[Dieser Beitrag wurde von Katana am 19. November 2000 editiert.]
Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Checksum

Beitrag von Katana »

Gut, ein bisschen weiter bin ich jetzt...:

Die Checksummer braucht ein Completement.
Dies ist 2 Bytes früher, also hier bei $81DC, auf 2 Byte groß, und Complete+Check = $FFFF.

Die Checksumme ist Byteswapped.
Und wie gesagt, dies gilt nur für SNES ROMS, mit LoROM & $200er Header...

------------------
Katana
stefan_k
Beiträge: 561
Registriert: Do Apr 27, 2000 12:01 am

Checksum

Beitrag von stefan_k »

Zumindest für SNES-Roms habe ich ein Tool, das die Checksum neu berechnet und ersetzt. Hab zwar keine Ahnung wie, aber es funktioniert. Bei Bedarf kann ich es ja mal uppen.

------------------
Webmaster von Alemanic Translations
SinaP
Beiträge: 248
Registriert: Sa Mär 11, 2000 1:01 am

Checksum

Beitrag von SinaP »

Wie Ich schon sagte : ... abenteuerlich ...

Na gut, Ich schau es mir mal genauer an wenn Ich zeit habe.
Ansonsten kannst Du ja das tool von Stefan_k beutzen.
... wenn Du probleme mit der selbigen hast, meine Ich Bild

cu

------------------


[Dieser Beitrag wurde von SinaP am 19. November 2000 editiert.]
LavosSpawn
Beiträge: 110
Registriert: Mo Nov 29, 1999 1:01 am

Checksum

Beitrag von LavosSpawn »

Das Komplement wird genauso wie die Checksum gar nicht gebraucht. Das echte SNES ignoriert sie ganz, die Emus merken lediglich an, dass die Checksumme falsch ist.
Btw, wenn du ein Programm schreibst, dass 'n ROM erkennen soll, dann kannst du dir die Checksummen zu nutze machen. Du guckst nach, an welcher der beiden Positionen die beiden Words zusammen FFFF ergeben, daran erkennst du dann, ob es Hi- oder LoRom ist...
SinaP
Beiträge: 248
Registriert: Sa Mär 11, 2000 1:01 am

Checksum

Beitrag von SinaP »

Meine Ich auch, um die checksumme hab Ich mich gar nicht gekümmert weil die keine probleme macht ausser mal eine meldung das sie nicht ok ist, ... aber sonst passiert auch nichts.
Ich hab bis jetzt kein einziges rom gehabt das wegen der checksumme nich laufen wollte.

cu

------------------
Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Checksum

Beitrag von Katana »

Danke an alle!

Das Tool, von dem stefan_k spricht, ist glaub' ich "inSNESt". Dieses kann die Checksumme korrigieren, funktioniert allerdings nur bei LoROM spielen, bei HiROM hilft auch das nicht!
Danke auch an Lavos, trotzdem würde ich gerne wissen, wie man die Checksumme berechnet, da es besser aussieht, wenn man ein übersetztes ROM lädt und dort Checksumme OK anstatte FALSCHE Checksumme steht Bild


------------------
Katana
stefan_k
Beiträge: 561
Registriert: Do Apr 27, 2000 12:01 am

Checksum

Beitrag von stefan_k »

@Katana: Das Ding funktioniert auch bei Super Mario RPG und das ist wohl kein LoROM (oder täusche ich mich etwa?). Ich uppe es heute abend mal. Zu finden ist es dann bei Alemanic Translation unter Downloads.

------------------
Webmaster von Alemanic Translations
stefan_k
Beiträge: 561
Registriert: Do Apr 27, 2000 12:01 am

Checksum

Beitrag von stefan_k »

Peinlich, peinlich...
Also ich habe nachgeschaut, es ist inSNESt. Nur - da hat es auch schon vorher bei unseren Downloads gegeben...

------------------
Webmaster von Alemanic Translations
LavosSpawn
Beiträge: 110
Registriert: Mo Nov 29, 1999 1:01 am

Checksum

Beitrag von LavosSpawn »

Warum nimmst du nicht einfach die komische Fix Checksum Funktion von ucon?

[Dieser Beitrag wurde von LavosSpawn am 20. November 2000 editiert.]
Benutzeravatar
Katana
Beiträge: 5337
Registriert: So Jan 02, 2000 1:01 am

Checksum

Beitrag von Katana »

ucon ???

------------------
Katana
Antworten