Checksum
Moderator: DarkZero
Checksum
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
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
Checksum
... 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
------------------
Du solltest dir schon sicher sein das du an der richtigen stelle versuchst die checksumme zu ändern .
cu
------------------
Checksum
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
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
Checksum
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] <<
;
ROMComplementChecksum = ROM [0xffdc] + (ROM [0xffdd] <<
;
//LoROM:
Memory.SRAMSize = ROM [0x7fd8];
ROMSpeed = ROM [0x7fd5];
ROMType = ROM [0x7fd6];
ROMSize = ROM [0x7fd7];
ROMChecksum = ROM [0x7fde] + (ROM [0x7fdf] <<
;
ROMComplementChecksum = ROM [0x7fdc] + (ROM [0x7fdd] <<
;
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.]
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] <<
ROMComplementChecksum = ROM [0xffdc] + (ROM [0xffdd] <<
//LoROM:
Memory.SRAMSize = ROM [0x7fd8];
ROMSpeed = ROM [0x7fd5];
ROMType = ROM [0x7fd6];
ROMSize = ROM [0x7fd7];
ROMChecksum = ROM [0x7fde] + (ROM [0x7fdf] <<
ROMComplementChecksum = ROM [0x7fdc] + (ROM [0x7fdd] <<
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.]
Checksum
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
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
Checksum
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
------------------
Webmaster von Alemanic Translations
Checksum
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
cu
------------------
[Dieser Beitrag wurde von SinaP am 19. November 2000 editiert.]
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

cu
------------------
[Dieser Beitrag wurde von SinaP am 19. November 2000 editiert.]
-
LavosSpawn
- Beiträge: 110
- Registriert: Mo Nov 29, 1999 1:01 am
Checksum
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...
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...
Checksum
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
------------------
Ich hab bis jetzt kein einziges rom gehabt das wegen der checksumme nich laufen wollte.
cu
------------------
Checksum
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
------------------
Katana
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

------------------
Katana
Checksum
@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
------------------
Webmaster von Alemanic Translations
Checksum
Peinlich, peinlich...
Also ich habe nachgeschaut, es ist inSNESt. Nur - da hat es auch schon vorher bei unseren Downloads gegeben...
------------------
Webmaster von Alemanic Translations
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
Warum nimmst du nicht einfach die komische Fix Checksum Funktion von ucon?
[Dieser Beitrag wurde von LavosSpawn am 20. November 2000 editiert.]
[Dieser Beitrag wurde von LavosSpawn am 20. November 2000 editiert.]
