mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-13 08:25:05 +01:00
Merge pull request #87 from Kreeblah/nes_correct_headered_crc32
Corrected miscalculated CRC32 for headered NES ROMs
This commit is contained in:
commit
cf442bf481
@ -16,13 +16,13 @@
|
|||||||
//311 Setup
|
//311 Setup
|
||||||
//340 Low Level Functions
|
//340 Low Level Functions
|
||||||
//587 CRC Functions
|
//587 CRC Functions
|
||||||
//646 File Functions
|
//647 File Functions
|
||||||
//828 NES 2.0 Header Functions
|
//831 NES 2.0 Header Functions
|
||||||
//1109 Config Functions
|
//1112 Config Functions
|
||||||
//1705 ROM Functions
|
//1708 ROM Functions
|
||||||
//2803 RAM Functions
|
//2806 RAM Functions
|
||||||
//3232 Eeprom Functions
|
//3235 Eeprom Functions
|
||||||
//3428 NESmaker Flash Cart Functions
|
//3431 NESmaker Flash Cart Functions
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
Supported Mappers
|
Supported Mappers
|
||||||
@ -625,9 +625,10 @@ uint32_t crc32EEP(File &file, uint32_t &charcnt) {
|
|||||||
return ~oldcrc32;
|
return ~oldcrc32;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calcCRC(char* checkFile, unsigned long filesize, uint32_t* crcCopy) {
|
void calcCRC(char* checkFile, unsigned long filesize, uint32_t* crcCopy, unsigned long offset) {
|
||||||
uint32_t crc;
|
uint32_t crc;
|
||||||
crcFile = sd.open(checkFile);
|
crcFile = sd.open(checkFile);
|
||||||
|
crcFile.seek(offset);
|
||||||
if (filesize < 1024)
|
if (filesize < 1024)
|
||||||
crc = crc32EEP(crcFile, filesize);
|
crc = crc32EEP(crcFile, filesize);
|
||||||
else
|
else
|
||||||
@ -732,6 +733,7 @@ void CreateRAMFileInSD() {
|
|||||||
void outputNES() {
|
void outputNES() {
|
||||||
display_Clear();
|
display_Clear();
|
||||||
char* outputFile;
|
char* outputFile;
|
||||||
|
unsigned long crcOffset = 0;
|
||||||
|
|
||||||
unsigned char* nes_header_bytes = getNESHeaderForFileInfo(1024 * prg, 1024 * chr, prg_crc32, chr_crc32);
|
unsigned char* nes_header_bytes = getNESHeaderForFileInfo(1024 * prg, 1024 * chr, prg_crc32, chr_crc32);
|
||||||
|
|
||||||
@ -751,6 +753,7 @@ void outputNES() {
|
|||||||
|
|
||||||
if(nes_header_bytes != NULL) {
|
if(nes_header_bytes != NULL) {
|
||||||
outputFile = fileNES;
|
outputFile = fileNES;
|
||||||
|
crcOffset = 16;
|
||||||
} else {
|
} else {
|
||||||
outputFile = fileBIN;
|
outputFile = fileBIN;
|
||||||
}
|
}
|
||||||
@ -806,7 +809,7 @@ void outputNES() {
|
|||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
display_Update();
|
display_Update();
|
||||||
|
|
||||||
calcCRC(outputFile, (prg + chr) * 1024, NULL);
|
calcCRC(outputFile, (prg + chr) * 1024, NULL, crcOffset);
|
||||||
LED_RED_OFF;
|
LED_RED_OFF;
|
||||||
LED_GREEN_OFF;
|
LED_GREEN_OFF;
|
||||||
LED_BLUE_OFF;
|
LED_BLUE_OFF;
|
||||||
@ -2237,7 +2240,7 @@ void readPRG() {
|
|||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
display_Update();
|
display_Update();
|
||||||
|
|
||||||
calcCRC(fileName, prg * 1024, &prg_crc32);
|
calcCRC(fileName, prg * 1024, &prg_crc32, 0);
|
||||||
}
|
}
|
||||||
set_address(0);
|
set_address(0);
|
||||||
PHI2_HI;
|
PHI2_HI;
|
||||||
@ -2792,7 +2795,7 @@ void readCHR() {
|
|||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
display_Update();
|
display_Update();
|
||||||
|
|
||||||
calcCRC(fileName, chr * 1024, &chr_crc32);
|
calcCRC(fileName, chr * 1024, &chr_crc32, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_address(0);
|
set_address(0);
|
||||||
@ -2985,9 +2988,9 @@ void readRAM() {
|
|||||||
display_Update();
|
display_Update();
|
||||||
|
|
||||||
if ((mapper == 16) || (mapper == 159))
|
if ((mapper == 16) || (mapper == 159))
|
||||||
calcCRC(fileName, eepsize, NULL);
|
calcCRC(fileName, eepsize, NULL, 0);
|
||||||
else
|
else
|
||||||
calcCRC(fileName, ram * 1024, NULL);
|
calcCRC(fileName, ram * 1024, NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_address(0);
|
set_address(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user