Seite 1 von 2
GB Checksum
Verfasst: So Mär 02, 2003 5:13 pm
von Katana
Hmm, hab' jetzt 'n bisschen gegoogelt und Infos über den GB Header zusammengesammelt, weiß also, wo die Checksumme ist.
Allerdings habe ich keine Infos finden können, wie man jene denn berechnet ...
Hat da jemand Infos?
Verfasst: So Mär 02, 2003 5:31 pm
von SyMbiOnT
Ist das nicht die Summe aller Bytes (ohne Header glaube ich)
Deswgen vieleicht auch CheckSUMME
Weiss aber nicht ganz ob das stimmt
Re: GB Checksum
Verfasst: So Mär 02, 2003 6:49 pm
von Gast
014D Complement check
(PROGRAM WON'T RUN ON GB IF NOT CORRECT!!!)
(It will run on Super GB, however, if incorrect.)
014E-014F Checksum (higher byte first) produced by
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result. (GameBoy ignores this value.)
aber es gibt dafür auch ein tool mit demnamen rgbfix.exe:
wird so aufgerufen: rgbfix -v -pff test.gb
und findest du hier:
http://www.blastar.de/download/gb/
blastar...
Verfasst: So Mär 02, 2003 7:16 pm
von SyMbiOnT
Verfasst: So Mär 02, 2003 11:53 pm
von Katana
Dieses RGBFix Tool hab' ich auch gefunden, aber ich will nicht wissen, wie ich die Patche, sondern wissen, wie ich die Checksumme herausfinde (ohne weitere Programme, außer Taschenrechner und Hex-Editor

).
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result
Hab' ich auch gefunden, aber welches sind die ""checksum bytes"" ?
Sind das die beiden 0x014E und 0x014F, oder sind damit andere gemeint?
Verfasst: Mo Mär 03, 2003 12:09 pm
von SyMbiOnT
Probiern geht über studieren!
Ich bin zu dem Ergebnis gekommen, dass die Checksumme bei dem Offset 014Ch beginnt und (max.) 4 Byte gross ist (weil es ja auch 8MB Roms gibt!). Dass heist du musst bei der Brechnung der Checksumme die Bytes von 014Ch - 014F auslassen.
Nur nebenbei: Die Checksumme ohne Proggy (bisauf Taschrechner und Hex-Editor) zu errechnen ist doch ein ganzen Stückchen Arbyte! Code lieber n kleines Proggy, ist einfacher als das per Hand zu machen!
Verfasst: Mo Mär 03, 2003 1:03 pm
von Katana
Code lieber n kleines Proggy
Genau das habe ich ja vor

Deswegen muß ich wissen, wie sich die berechnen lässt
Ich werd's mal versuchen, allerdings erst heute Abend, wenn ich vonner Arbeit komme.
Verfasst: Mo Mär 03, 2003 1:14 pm
von SyMbiOnT
Katana hat geschrieben:Deswegen muß ich wissen, wie sich die berechnen lässt
Naja wie gesagt, du addierst alle Bytes bis auf die 4 in denen die Checksumme steht.
Verfasst: Mo Mär 03, 2003 7:52 pm
von Katana
Ich hab's so gemacht und bisher passt's:
Code: Alles auswählen
int iCheck = 0;
for (int i = 0; i < rom.length; i++) {
if (rom[i] < 0) {
iCheck += (rom[i] + 256);
}
else {
iCheck += rom[i];
}
}
if (rom[0x14E] < 0) {
iCheck = iCheck - (rom[0x14E] + 256);
}
else {
iCheck = iCheck - rom[0x14E];
}
if (rom[0x14F] < 0) {
iCheck = iCheck - (rom[0x14F] + 256);
}
else {
iCheck = iCheck - rom[0x14F];
}
final String[] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
int iRest = iCheck % 16;
int iWert = (int)(iCheck / 16);
String sHex = "";
while (iRest > 0) {
sHex += hex[iRest];
iRest = iWert % 16;
iWert = (int)(iWert / 16);
}
String sTest = sHex;
sHex = "";
for (int i = (sTest.length() - 1); i >= 0; i--) {
sHex += sTest.charAt(i);
}
String sCheck = sHex.substring(3); // <-- Checksumme
Sind allerdings nur die 2 Bytes (0x14E und 0x14F).
Verfasst: Di Mär 04, 2003 9:27 am
von Jimmy
GB ==> Game Boy ?
Gabs da bei Zophar nicht n Tool dafür ?
Ich glaube das INSNEST das auch macht oder ?
Verfasst: Di Mär 04, 2003 12:25 pm
von Katana
Katana hat geschrieben:[...], sondern wissen, wie ich die Checksumme herausfinde (ohne weitere Programme, außer Taschenrechner und Hex-Editor

).
Deswegen das

Ich brauchte das intern in 'nem Programm und kein Externes Programm, was das kann

Verfasst: Di Mär 04, 2003 2:35 pm
von SyMbiOnT
Katana hat geschrieben:Sind allerdings nur die 2 Bytes (0x14E und 0x14F).
Das mit den 2 Byte kann nicht stimmen, weil es Roms gibt die 8 MB gross sind. *rechne* Also (hehe):
Wir haben ein 8 MB Rom, macht also insgesammt:
8388608 Byte
- 4 Byte (für die Checksumme)
= 8388604
So gehen wir jetzt davon aus dass in jedem dieser 8388604 Byte eine 255 stünde, dann wäre die Checksumme also: 2139094020 (alles dezimal)
Das in Hex: 7F 7F FC 04
Du siehst schon an meiner Formatierung dass es 4 Byte sein müssen!
In kleineren Roms kann es natürlich vorkommen, dass einige dieser 4 Byte (die hohen) unbenutzt sind. Diese müssen dennoch ignoriert werden!
Nochmal zur Rechnung, sie stimmt nicht ganz da ich den Header nicht abgezogen habe, aber so viel verändert sich dann ja nicht.
EDIT: Die 8 MB Roms sind glaube ich nur GBC Roms. Aber der Header bei GB & GBC ist doch gleich (oder?). Wenn ja sind auch bei GB Roms 4 Byte für die Checksumme reserviert. Fals doch nicht kann es durchaus angehn dass es nur 2 Byte sind.
Verfasst: Di Mär 04, 2003 6:43 pm
von Katana
Du brauchst eh nur die 2 unteren Bytes der Checksumme, die oberen 2 interessieren nicht, soweit ich das bisher sehe.
Verfasst: Di Mär 04, 2003 7:14 pm
von Gast
014E-014F Checksum (higher byte first) produced by
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result. (GameBoy ignores this value.)
würde sinn machen!
blastar...
Verfasst: Di Mär 04, 2003 9:24 pm
von SyMbiOnT
blastar hat geschrieben:014E-014F Checksum (higher byte first) produced by
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result. (GameBoy ignores this value.)
würde sinn machen!
blastar...
AXO! Also nur die beiden niederwertigen Byte. Wusste ich nicht.