GB Checksum
Moderator: Katana
GB Checksum
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?
Allerdings habe ich keine Infos finden können, wie man jene denn berechnet ...
Hat da jemand Infos?
Ist das nicht die Summe aller Bytes (ohne Header glaube ich)
Deswgen vieleicht auch CheckSUMME
Weiss aber nicht ganz ob das stimmt
Deswgen vieleicht auch CheckSUMME
Weiss aber nicht ganz ob das stimmt
Der Anfänger freut sich, wenn nach dem Start des Programms Ziffern auf dem
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
-
Gast
Re: GB Checksum
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...
(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...
Sag ich doch

Der Anfänger freut sich, wenn nach dem Start des Programms Ziffern auf dem
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
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
).
Sind das die beiden 0x014E und 0x014F, oder sind damit andere gemeint?
Hab' ich auch gefunden, aber welches sind die ""checksum bytes"" ?adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result
Sind das die beiden 0x014E und 0x014F, oder sind damit andere gemeint?
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!
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!
Der Anfänger freut sich, wenn nach dem Start des Programms Ziffern auf dem
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Naja wie gesagt, du addierst alle Bytes bis auf die 4 in denen die Checksumme steht.Katana hat geschrieben:Deswegen muß ich wissen, wie sich die berechnen lässt
Der Anfänger freut sich, wenn nach dem Start des Programms Ziffern auf dem
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Ich hab's so gemacht und bisher passt's:
Sind allerdings nur die 2 Bytes (0x14E und 0x14F).
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
Das mit den 2 Byte kann nicht stimmen, weil es Roms gibt die 8 MB gross sind. *rechne* Also (hehe):Katana hat geschrieben:Sind allerdings nur die 2 Bytes (0x14E und 0x14F).
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.
Der Anfänger freut sich, wenn nach dem Start des Programms Ziffern auf dem
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
-
Gast
AXO! Also nur die beiden niederwertigen Byte. Wusste ich nicht.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...
Der Anfänger freut sich, wenn nach dem Start des Programms Ziffern auf dem
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de
Bildschirm erscheinen, der Eingeweihte prüft die Größenordnungen der ausgege-
benen Resultate, der Profi traut nicht einmal dem Vorzeichen.
http://www.bi.2fbi.de


