mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-27 23:14:14 +01:00
Fix adding iNES header when manually selecting mapper
This commit is contained in:
parent
e80866a5ff
commit
5580dffff0
@ -406,6 +406,23 @@ void draw_progressbar(uint32_t processedsize, uint32_t totalsize);
|
|||||||
byte eepbit[8];
|
byte eepbit[8];
|
||||||
byte eeptemp;
|
byte eeptemp;
|
||||||
|
|
||||||
|
#ifdef no-intro
|
||||||
|
// Array to hold iNES header
|
||||||
|
byte iNES_HEADER[16];
|
||||||
|
//ID 0-3
|
||||||
|
//ROM_size 4
|
||||||
|
//VROM_size 5
|
||||||
|
//ROM_type 6
|
||||||
|
//ROM_type2 7
|
||||||
|
//ROM_type3 8
|
||||||
|
//Upper_ROM_VROM_size 9
|
||||||
|
//RAM_size 10
|
||||||
|
//VRAM_size 11
|
||||||
|
//TV_system 12
|
||||||
|
//VS_hardware 13
|
||||||
|
//reserved 14, 15
|
||||||
|
#endif
|
||||||
|
|
||||||
//******************************************
|
//******************************************
|
||||||
// CRC32
|
// CRC32
|
||||||
//******************************************
|
//******************************************
|
||||||
@ -583,9 +600,43 @@ boolean compareCRC(char* database, char* crcString, int offset) {
|
|||||||
//if checksum search successful, rename the file and end search
|
//if checksum search successful, rename the file and end search
|
||||||
if (strcmp(crc_search, crcStr) == 0)
|
if (strcmp(crc_search, crcStr) == 0)
|
||||||
{
|
{
|
||||||
|
#ifdef enable_NES
|
||||||
|
if (mode == mode_NES) {
|
||||||
|
// Rewind to iNES Header
|
||||||
|
myFile.seekSet(myFile.curPosition() - 36);
|
||||||
|
|
||||||
|
char iNES_STR[33];
|
||||||
|
// Read iNES header
|
||||||
|
get_line(iNES_STR, &myFile, 33);
|
||||||
|
|
||||||
|
// Convert "4E4553" to (0x4E, 0x45, 0x53)
|
||||||
|
byte iNES_BUF[2];
|
||||||
|
for (byte j = 0; j < 16; j++) {
|
||||||
|
sscanf(iNES_STR + j * 2, "%2X", iNES_BUF);
|
||||||
|
iNES_HEADER[j] = iNES_BUF[0];
|
||||||
|
}
|
||||||
|
//Skip CRLF
|
||||||
|
myFile.seekSet(myFile.curPosition() + 4);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Close the file:
|
// Close the file:
|
||||||
myFile.close();
|
myFile.close();
|
||||||
|
|
||||||
|
//Write iNES header
|
||||||
|
#ifdef enable_NES
|
||||||
|
if (mode == mode_NES) {
|
||||||
|
// Write iNES header
|
||||||
|
sd.chdir(folder);
|
||||||
|
if (!myFile.open(fileName, O_RDWR)) {
|
||||||
|
print_Error(F("SD Error"), true);
|
||||||
|
}
|
||||||
|
for (byte z = 0; z < 16; z++) {
|
||||||
|
myFile.write(iNES_HEADER[z]);
|
||||||
|
}
|
||||||
|
myFile.close();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
print_Msg(F(" -> "));
|
print_Msg(F(" -> "));
|
||||||
println_Msg(gamename);
|
println_Msg(gamename);
|
||||||
|
|
||||||
@ -675,6 +726,7 @@ void mainMenu() {
|
|||||||
|
|
||||||
#ifdef enable_NES
|
#ifdef enable_NES
|
||||||
case 1:
|
case 1:
|
||||||
|
mode = mode_NES;
|
||||||
display_Clear();
|
display_Clear();
|
||||||
display_Update();
|
display_Update();
|
||||||
setup_NES();
|
setup_NES();
|
||||||
@ -684,7 +736,6 @@ void mainMenu() {
|
|||||||
checkStatus_NES(0);
|
checkStatus_NES(0);
|
||||||
#endif
|
#endif
|
||||||
nesMenu();
|
nesMenu();
|
||||||
mode = mode_NES;
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -834,6 +885,7 @@ void addonsMenu() {
|
|||||||
{
|
{
|
||||||
#ifdef enable_NES
|
#ifdef enable_NES
|
||||||
case 0:
|
case 0:
|
||||||
|
mode = mode_NES;
|
||||||
display_Clear();
|
display_Clear();
|
||||||
display_Update();
|
display_Update();
|
||||||
setup_NES();
|
setup_NES();
|
||||||
@ -843,7 +895,6 @@ void addonsMenu() {
|
|||||||
checkStatus_NES(0);
|
checkStatus_NES(0);
|
||||||
#endif
|
#endif
|
||||||
nesMenu();
|
nesMenu();
|
||||||
mode = mode_NES;
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1467,7 +1518,7 @@ void convertPgm(const char* const pgmOptions[], byte numArrays) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_Error(const __FlashStringHelper *errorMessage, boolean forceReset) {
|
void print_Error(const __FlashStringHelper * errorMessage, boolean forceReset) {
|
||||||
errorLvl = 1;
|
errorLvl = 1;
|
||||||
setColor_RGB(255, 0, 0);
|
setColor_RGB(255, 0, 0);
|
||||||
println_Msg(errorMessage);
|
println_Msg(errorMessage);
|
||||||
|
@ -375,21 +375,6 @@ void setup_NES() {
|
|||||||
Get Mapping from no-intro SD database
|
Get Mapping from no-intro SD database
|
||||||
*****************************************/
|
*****************************************/
|
||||||
#ifdef no-intro
|
#ifdef no-intro
|
||||||
// Array to hold iNES header
|
|
||||||
byte iNES_HEADER[16];
|
|
||||||
//ID 0-3
|
|
||||||
//ROM_size 4
|
|
||||||
//VROM_size 5
|
|
||||||
//ROM_type 6
|
|
||||||
//ROM_type2 7
|
|
||||||
//ROM_type3 8
|
|
||||||
//Upper_ROM_VROM_size 9
|
|
||||||
//RAM_size 10
|
|
||||||
//VRAM_size 11
|
|
||||||
//TV_system 12
|
|
||||||
//VS_hardware 13
|
|
||||||
//reserved 14, 15
|
|
||||||
|
|
||||||
// no clue (taken from fceux)
|
// no clue (taken from fceux)
|
||||||
uint32_t uppow2(uint32_t n) {
|
uint32_t uppow2(uint32_t n) {
|
||||||
int x;
|
int x;
|
||||||
@ -426,6 +411,10 @@ boolean getMapping() {
|
|||||||
|
|
||||||
// Filter out 0xFF checksum
|
// Filter out 0xFF checksum
|
||||||
if (strcmp(crcStr, "BD7BC39F") == 0) {
|
if (strcmp(crcStr, "BD7BC39F") == 0) {
|
||||||
|
romName[0] = 'C';
|
||||||
|
romName[1] = 'A';
|
||||||
|
romName[2] = 'R';
|
||||||
|
romName[3] = 'T';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -451,7 +440,7 @@ boolean getMapping() {
|
|||||||
// Skip over semicolon
|
// Skip over semicolon
|
||||||
myFile.seekSet(myFile.curPosition() + 1);
|
myFile.seekSet(myFile.curPosition() + 1);
|
||||||
|
|
||||||
// Read CRC32 of first 16 bytes
|
// Read CRC32 of first 512 bytes
|
||||||
sprintf(crc_search, "%c", myFile.read());
|
sprintf(crc_search, "%c", myFile.read());
|
||||||
for (byte i = 0; i < 7; i++) {
|
for (byte i = 0; i < 7; i++) {
|
||||||
sprintf(tempStr2, "%c", myFile.read());
|
sprintf(tempStr2, "%c", myFile.read());
|
||||||
@ -565,6 +554,10 @@ boolean getMapping() {
|
|||||||
// File searched until end but nothing found
|
// File searched until end but nothing found
|
||||||
if (strcmp(crc_search, crcStr) != 0) {
|
if (strcmp(crc_search, crcStr) != 0) {
|
||||||
println_Msg(F("Not found"));
|
println_Msg(F("Not found"));
|
||||||
|
romName[0] = 'C';
|
||||||
|
romName[1] = 'A';
|
||||||
|
romName[2] = 'R';
|
||||||
|
romName[3] = 'T';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user