Add filenames to N64 database

This commit is contained in:
sanni 2022-06-17 23:57:29 +02:00
parent 8db79a434c
commit 196050257b
8 changed files with 3044 additions and 1020 deletions

View File

@ -4,7 +4,7 @@
This project represents a community-driven effort to provide
an easy to build and easy to modify cartridge dumper.
Date: 16.06.2022
Date: 18.06.2022
Version: 8.5 BETA
SD lib: https://github.com/greiman/SdFat
@ -389,16 +389,72 @@ uint32_t calculateCRC(char* fileName, char* folder) {
}
//******************************************
// no-intro database
// Functions for CRC32 database
//******************************************
void compareCRC(char* database) {
//Skip line
void skip_line(FsFile* readfile)
{
int i = 0;
char str_buf;
while (readfile->available())
{
//Read 1 byte from file
str_buf = readfile->read();
//if end of file or newline found, execute command
if (str_buf == '\r')
{
readfile->read(); //dispose \n because \r\n
break;
}
i++;
}//End while
}
//Get line from file
void get_line(char* str_buf, FsFile* readfile, uint8_t maxi)
{
int i = 0;
while (readfile->available())
{
//If line size is more than maximum array, limit it.
if (i >= maxi)
{
i = maxi - 1;
}
//Read 1 byte from file
str_buf[i] = readfile->read();
//if end of file or newline found, execute command
if (str_buf[i] == '\r')
{
str_buf[i] = '\0';
readfile->read(); //dispose \n because \r\n
break;
}
i++;
}//End while
}
// Calculate CRC32 if needed and compare it to CRC read from database
boolean compareCRC(char* database, char* crcString) {
#ifdef no-intro
// Calculate CRC32
char crcStr[9];
if (crcString == 0) {
// Calculate CRC32
sprintf(crcStr, "%08lX", calculateCRC(fileName, folder));
}
else {
// Use precalculated crc
strcpy(crcStr, crcString);
}
// Print checksum
print_Msg(F("CRC32: "));
print_Msg(crcStr);
display_Update();
//Search for CRC32 in file
char gamename[100];
@ -430,16 +486,19 @@ void compareCRC(char* database) {
// Close the file:
myFile.close();
}
return 1;
break;
}
}
if (strcmp(crc_search, crcStr) != 0)
{
println_Msg(F(" -> Not found"));
return 0;
}
}
else {
println_Msg(F(" -> database file not found"));
return 0;
}
#else
println_Msg("");

View File

@ -952,7 +952,7 @@ void compare_checksums_GB() {
println_Msg(calcsumStr);
print_Error(F("Checksum Error"), false);
}
compareCRC("gb.txt");
compareCRC("gb.txt", 0);
display_Update();
//go to root
sd.chdir();

View File

@ -1297,7 +1297,7 @@ void readROM_MD() {
display_Update();
// Calculate and compare CRC32 with no-intro
compareCRC("md.txt");
compareCRC("md.txt", 0);
// Calculate internal checksum
if (chksum == calcCKS) {

View File

@ -2223,7 +2223,7 @@ int strcicmp(char const * a, char const * b)
}
}
// look-up the calculated crc in the file n64.txt on sd card
/* look-up the calculated crc in the file n64.txt on sd card
boolean searchCRC(char crcStr[9]) {
boolean result = 0;
char tempStr2[2];
@ -2276,7 +2276,7 @@ boolean searchCRC(char crcStr[9]) {
else {
print_Error(F("n64.txt missing"), true);
}
}
}*/
// look-up cart id in file n64.txt on sd card
void getCartInfo_N64() {
@ -2291,10 +2291,14 @@ void getCartInfo_N64() {
idCart();
if (myFile.open("n64.txt", O_READ)) {
// Skip over the first crc
myFile.seekSet(myFile.curPosition() + 9);
// Loop through file
while (myFile.available()) {
// Skip first line with name
skip_line(&myFile);
// Skip over the CRC checksum
myFile.seekSet(myFile.curPosition() + 9);
// Read 4 bytes into String, do it one at a time so byte order doesn't get mixed up
sprintf(tempStr, "%c", myFile.read());
for (byte i = 0; i < 3; i++) {
@ -2322,10 +2326,16 @@ void getCartInfo_N64() {
// Read the next ascii character and subtract 48 to convert to decimal
saveType = myFile.read() - 48;
// End loop
break;
}
// If no match, empty string, advance by 16 and try again
// If no match skip to next entry
else {
myFile.seekSet(myFile.curPosition() + 16);
// skip rest of line
myFile.seekSet(myFile.curPosition() + 7);
// skip third empty line
skip_line(&myFile);
}
}
// Close the file:
@ -3427,14 +3437,7 @@ redumpsamefolder:
// Calculate Checksum and convert to string
println_Msg(F("Calculating CRC.."));
display_Update();
char crcStr[9];
sprintf(crcStr, "%08lx", calculateCRC(fileName, folder));
// Print checksum
println_Msg(crcStr);
display_Update();
// end time
unsigned long timeElapsed = (millis() - startTime) / 1000; // seconds
if (compareCRC("n64.txt", 0)) {
#else
// dumping rom fast
byte buffer[1024] = { 0 };
@ -3522,21 +3525,14 @@ redumpsamefolder:
// Close the file:
myFile.close();
unsigned long timeElapsed = (millis() - startTime) / 1000; // seconds
print_Msg(F("CRC: "));
// convert checksum to string
char crcStr[9];
sprintf(crcStr, "%08lx", ~oldcrc32);
// Print checksum
println_Msg(crcStr);
display_Update();
#endif
sprintf(crcStr, "%08lX", ~oldcrc32);
// Search n64.txt for crc
if (searchCRC(crcStr)) {
// Dump was a known good rom
println_Msg(F("Checksum matches"));
if (compareCRC("n64.txt", crcStr)) {
#endif
unsigned long timeElapsed = (millis() - startTime) / 1000; // seconds
print_Msg(F("Done ("));
print_Msg(timeElapsed); // include elapsed time
println_Msg(F("s)"));
@ -3556,8 +3552,6 @@ redumpsamefolder:
// Dump was bad or unknown
errorLvl = 1;
setColor_RGB(255, 0, 0);
println_Msg(F("Checksum not found"));
println_Msg(F("in N64.txt"));
println_Msg(F(""));
println_Msg(F("Press Button..."));
display_Update();

View File

@ -424,54 +424,6 @@ void read_bank_PCE_RAM(uint32_t address_start, int block_index)
}
}
//Get line from file and convert upper case to lower case
void skip_line(FsFile* readfile)
{
int i = 0;
char str_buf;
while (readfile->available())
{
//Read 1 byte from file
str_buf = readfile->read();
//if end of file or newline found, execute command
if (str_buf == '\r')
{
readfile->read(); //dispose \n because \r\n
break;
}
i++;
}//End while
}
//Get line from file and convert upper case to lower case
void get_line(char* str_buf, FsFile* readfile, uint8_t maxi)
{
int i = 0;
while (readfile->available())
{
//If line size is more than maximum array, limit it.
if (i >= maxi)
{
i = maxi - 1;
}
//Read 1 byte from file
str_buf[i] = readfile->read();
//if end of file or newline found, execute command
if (str_buf[i] == '\r')
{
str_buf[i] = '\0';
readfile->read(); //dispose \n because \r\n
break;
}
i++;
}//End while
}
uint32_t calculate_crc32(int n, unsigned char c[], uint32_t r)
{
int i, j;

View File

@ -68,7 +68,7 @@ void _smsMenu() {
// Change working dir to root
sd.chdir("/");
readROM_SMS();
compareCRC("sms.txt");
compareCRC("sms.txt", 0);
#ifdef global_log
save_log();
#endif

View File

@ -12,8 +12,9 @@
#if !(defined(HW1) || defined(HW2) || defined(HW3) || defined(HW4) || defined(HW5) || defined(SERIAL_MONITOR))
# error !!! PLEASE CHOOSE HARDWARE VERSION IN OPTIONS.H !!!
#endif
//******************************************
//
// Advanced Options
//******************************************
//******************************************
@ -43,6 +44,8 @@
#if defined(SERIAL_MONITOR)
#define enable_serial
#define clockgen_installed
#define fastcrc
#endif
//******************************************
@ -69,9 +72,9 @@
// #define clockgen_installed
//******************************************
// GB, SMS, MD database lookup
// GB, SMS, MD, N64 database lookup
//******************************************
// Renames ROM if found in database (slow)
// Renames ROM if found in database
#define no-intro
//******************************************

3882
sd/n64.txt

File diff suppressed because it is too large Load Diff