All: Resolve all compiler and linker warnings

No functional change intended.
This commit is contained in:
Vincent Pelletier 2022-10-22 08:25:37 +00:00
parent d81f2c0509
commit a555f2117f
17 changed files with 139 additions and 213 deletions

View File

@ -564,6 +564,7 @@ uint32_t calculateCRC(char* fileName, char* folder, int offset) {
//print_Msg(F("/")); //print_Msg(F("/"));
//print_Msg(fileName); //print_Msg(fileName);
print_Error(F(" not found"), true); print_Error(F(" not found"), true);
return 0;
} }
} }
@ -616,7 +617,7 @@ void get_line(char* str_buf, FsFile* readfile, uint8_t maxi) {
} }
// Calculate CRC32 if needed and compare it to CRC read from database // Calculate CRC32 if needed and compare it to CRC read from database
boolean compareCRC(char* database, char* crcString, boolean renamerom, int offset) { boolean compareCRC(const char* database, char* crcString, boolean renamerom, int offset) {
#ifdef nointro #ifdef nointro
char crcStr[9]; char crcStr[9];
if (crcString == 0) { if (crcString == 0) {
@ -661,15 +662,15 @@ boolean compareCRC(char* database, char* crcString, boolean renamerom, int offse
get_line(iNES_STR, &myFile, 33); get_line(iNES_STR, &myFile, 33);
// Convert "4E4553" to (0x4E, 0x45, 0x53) // Convert "4E4553" to (0x4E, 0x45, 0x53)
byte iNES_BUF[2]; unsigned int iNES_BUF;
for (byte j = 0; j < 16; j++) { for (byte j = 0; j < 16; j++) {
sscanf(iNES_STR + j * 2, "%2X", iNES_BUF); sscanf(iNES_STR + j * 2, "%2X", &iNES_BUF);
iNES_HEADER[j] = iNES_BUF[0]; iNES_HEADER[j] = iNES_BUF;
} }
//Skip CRLF //Skip CRLF
myFile.seekSet(myFile.curPosition() + 4); myFile.seekSet(myFile.curPosition() + 4);
} }
#endif #endif // enable_NES
// Close the file: // Close the file:
myFile.close(); myFile.close();
@ -687,7 +688,7 @@ boolean compareCRC(char* database, char* crcString, boolean renamerom, int offse
} }
myFile.close(); myFile.close();
} }
#endif #endif // enable_NES
print_Msg(F(" -> ")); print_Msg(F(" -> "));
display_Update(); display_Update();
@ -718,9 +719,10 @@ boolean compareCRC(char* database, char* crcString, boolean renamerom, int offse
println_Msg(F("Database missing")); println_Msg(F("Database missing"));
return 0; return 0;
} }
#else #else // nointro
println_Msg(""); println_Msg("");
#endif #endif // !nointro
return 0;
} }
byte starting_letter() { byte starting_letter() {
@ -1877,7 +1879,7 @@ void print_Error(const __FlashStringHelper* errorMessage, boolean forceReset) {
if (forceReset) { if (forceReset) {
println_Msg(F("")); println_Msg(F(""));
println_Msg(F("Press Button...")); print_STR(press_button_STR, 1);
display_Update(); display_Update();
wait(); wait();
if (ignoreError == 0) { if (ignoreError == 0) {
@ -1997,7 +1999,7 @@ void save_log() {
} }
myFile.write(sdBuffer, 512); myFile.write(sdBuffer, 512);
} else { } else {
word i = 0; int i = 0;
for (; i < myLog.available(); i++) { for (; i < myLog.available(); i++) {
sdBuffer[i] = myLog.read(); sdBuffer[i] = myLog.read();
} }
@ -2031,7 +2033,7 @@ void print_Msg(const char myString[]) {
#if (defined(enable_LCD) || defined(enable_OLED)) #if (defined(enable_LCD) || defined(enable_OLED))
// test for word wrap // test for word wrap
if ((display.tx + strlen(myString) * 6) > 128) { if ((display.tx + strlen(myString) * 6) > 128) {
int strPos = 0; unsigned int strPos = 0;
// Print until end of display // Print until end of display
while (display.tx < 122) { while (display.tx < 122) {
display.print(myString[strPos]); display.print(myString[strPos]);
@ -2174,7 +2176,7 @@ void println_Msg(const char myString[]) {
#if (defined(enable_LCD) || defined(enable_OLED)) #if (defined(enable_LCD) || defined(enable_OLED))
// test for word wrap // test for word wrap
if ((display.tx + strlen(myString) * 6) > 128) { if ((display.tx + strlen(myString) * 6) > 128) {
int strPos = 0; unsigned int strPos = 0;
// Print until end of display // Print until end of display
while ((display.tx < 122) && (myString[strPos] != '\0')) { while ((display.tx < 122) && (myString[strPos] != '\0')) {
display.print(myString[strPos]); display.print(myString[strPos]);
@ -2305,8 +2307,8 @@ void blinkLED() {
#endif #endif
} }
void statusLED(boolean on) {
#if defined(HW5) #if defined(HW5)
void statusLED(boolean on) {
if (!on) if (!on)
PORTD |= (1 << 7); PORTD |= (1 << 7);
else else
@ -2334,8 +2336,11 @@ void statusLED(boolean on) {
PORTB &= ~(1 << 7); PORTB &= ~(1 << 7);
} }
*/ */
#endif
} }
#else
void statusLED(boolean on __attribute__ ((unused))) {
}
#endif
/****************************************** /******************************************
Menu system Menu system

View File

@ -1803,7 +1803,7 @@ void printFlash(int numBytes) {
for (int currByte = 0; currByte < numBytes; currByte += 10) { for (int currByte = 0; currByte < numBytes; currByte += 10) {
for (int c = 0; c < 10; c++) { for (int c = 0; c < 10; c++) {
itoa(readByte_Flash(currByte + c), myBuffer, 16); itoa(readByte_Flash(currByte + c), myBuffer, 16);
for (int i = 0; i < 2 - strlen(myBuffer); i++) { for (size_t i = 0; i < 2 - strlen(myBuffer); i++) {
print_Msg(F("0")); print_Msg(F("0"));
} }
// Now print the significant bits // Now print the significant bits
@ -2147,14 +2147,14 @@ void printFlash16(int numBytes) {
sprintf(buf, "%x", left_byte); sprintf(buf, "%x", left_byte);
for (int i = 0; i < 2 - strlen(buf); i++) { for (size_t i = 0; i < 2 - strlen(buf); i++) {
print_Msg(F("0")); print_Msg(F("0"));
} }
// Now print the significant bits // Now print the significant bits
print_Msg(buf); print_Msg(buf);
sprintf(buf, "%x", right_byte); sprintf(buf, "%x", right_byte);
for (int i = 0; i < 2 - strlen(buf); i++) { for (size_t i = 0; i < 2 - strlen(buf); i++) {
print_Msg(F("0")); print_Msg(F("0"));
} }
// Now print the significant bits // Now print the significant bits
@ -2546,14 +2546,14 @@ void print_Eprom(int numBytes) {
sprintf(buf, "%x", left_byte); sprintf(buf, "%x", left_byte);
for (int i = 0; i < 2 - strlen(buf); i++) { for (size_t i = 0; i < 2 - strlen(buf); i++) {
print_Msg(F("0")); print_Msg(F("0"));
} }
// Now print the significant bits // Now print the significant bits
print_Msg(buf); print_Msg(buf);
sprintf(buf, "%x", right_byte); sprintf(buf, "%x", right_byte);
for (int i = 0; i < 2 - strlen(buf); i++) { for (size_t i = 0; i < 2 - strlen(buf); i++) {
print_Msg(F("0")); print_Msg(F("0"));
} }
// Now print the significant bits // Now print the significant bits

View File

@ -7,8 +7,8 @@
Variables Variables
*****************************************/ *****************************************/
// Game Boy // Game Boy
int sramBanks; word sramBanks;
int romBanks; word romBanks;
word lastByte = 0; word lastByte = 0;
/****************************************** /******************************************
@ -911,19 +911,41 @@ void getCartInfo_GB() {
} }
// M161 (Mani 4 in 1) // M161 (Mani 4 in 1)
if ((strncmp(romName, "TETRIS SET", 10) == 0) && (sdBuffer[0x14D] == 0x3F)) { if (strncmp(romName, "TETRIS SET", 10) == 0 && sdBuffer[0x14D] == 0x3F) {
romType = 0x104; romType = 0x104;
} }
// MMM01 (Mani 4 in 1) // MMM01 (Mani 4 in 1)
if ( if (
(strncmp(romName, "BOUKENJIMA2 SET", 15) == 0) && (sdBuffer[0x14D] == 0) || (strncmp(romName, "BUBBLEBOBBLE SET", 16) == 0) && (sdBuffer[0x14D] == 0xC6) || (strncmp(romName, "GANBARUGA SET", 13) == 0) && (sdBuffer[0x14D] == 0x90) || (strncmp(romName, "RTYPE 2 SET", 11) == 0) && (sdBuffer[0x14D] == 0x32)) { (
strncmp(romName, "BOUKENJIMA2 SET", 15) == 0 && sdBuffer[0x14D] == 0
) || (
strncmp(romName, "BUBBLEBOBBLE SET", 16) == 0 && sdBuffer[0x14D] == 0xC6
) || (
strncmp(romName, "GANBARUGA SET", 13) == 0 && sdBuffer[0x14D] == 0x90
) || (
strncmp(romName, "RTYPE 2 SET", 11) == 0 && sdBuffer[0x14D] == 0x32
)
) {
romType = 0x0B; romType = 0x0B;
} }
// MBC1M // MBC1M
if ( if (
(strncmp(romName, "MOMOCOL", 7) == 0) && (sdBuffer[0x14D] == 0x28) || (strncmp(romName, "BOMCOL", 6) == 0) && (sdBuffer[0x14D] == 0x86) || (strncmp(romName, "GENCOL", 6) == 0) && (sdBuffer[0x14D] == 0x8A) || (strncmp(romName, "SUPERCHINESE 123", 16) == 0) && (sdBuffer[0x14D] == 0xE4) || (strncmp(romName, "MORTALKOMBATI&II", 16) == 0) && (sdBuffer[0x14D] == 0xB9) || (strncmp(romName, "MORTALKOMBAT DUO", 16) == 0) && (sdBuffer[0x14D] == 0xA7)) { (
strncmp(romName, "MOMOCOL", 7) == 0 && sdBuffer[0x14D] == 0x28
) || (
strncmp(romName, "BOMCOL", 6) == 0 && sdBuffer[0x14D] == 0x86
) || (
strncmp(romName, "GENCOL", 6) == 0 && sdBuffer[0x14D] == 0x8A
) || (
strncmp(romName, "SUPERCHINESE 123", 16) == 0 && sdBuffer[0x14D] == 0xE4
) || (
strncmp(romName, "MORTALKOMBATI&II", 16) == 0 && sdBuffer[0x14D] == 0xB9
) || (
strncmp(romName, "MORTALKOMBAT DUO", 16) == 0 && sdBuffer[0x14D] == 0xA7
)
) {
romType += 0x100; romType += 0x100;
} }
@ -961,7 +983,7 @@ void readROM_GB() {
print_Error(create_file_STR, true); print_Error(create_file_STR, true);
} }
int endAddress = 0x7FFF; word endAddress = 0x7FFF;
word romAddress = 0; word romAddress = 0;
word startBank = 1; word startBank = 1;
@ -1082,7 +1104,7 @@ void readROM_GB() {
} }
// Calculate checksum // Calculate checksum
unsigned int calc_checksum_GB(char* fileName, char* folder) { unsigned int calc_checksum_GB(char* fileName) {
unsigned int calcChecksum = 0; unsigned int calcChecksum = 0;
// int calcFilesize = 0; // unused // int calcFilesize = 0; // unused
unsigned long i = 0; unsigned long i = 0;
@ -1126,7 +1148,7 @@ void compare_checksums_GB() {
// Internal ROM checksum // Internal ROM checksum
char calcsumStr[5]; char calcsumStr[5];
sprintf(calcsumStr, "%04X", calc_checksum_GB(fileName, folder)); sprintf(calcsumStr, "%04X", calc_checksum_GB(fileName));
print_Msg(F("Checksum: ")); print_Msg(F("Checksum: "));
print_Msg(calcsumStr); print_Msg(calcsumStr);
@ -1299,6 +1321,7 @@ unsigned long verifySRAM_GB() {
return writeErrors; return writeErrors;
} else { } else {
print_Error(open_file_STR, true); print_Error(open_file_STR, true);
return 1;
} }
} }
@ -1679,7 +1702,7 @@ void writeFlash29F_GB(byte MBC, boolean flashErase) {
display_Update(); display_Update();
// Read x number of banks // Read x number of banks
for (int currBank = 0; currBank < romBanks; currBank++) { for (word currBank = 0; currBank < romBanks; currBank++) {
// Blink led // Blink led
blinkLED(); blinkLED();
@ -1713,7 +1736,7 @@ void writeFlash29F_GB(byte MBC, boolean flashErase) {
uint32_t totalProgressBar = (uint32_t)(romBanks)*16384; uint32_t totalProgressBar = (uint32_t)(romBanks)*16384;
draw_progressbar(0, totalProgressBar); draw_progressbar(0, totalProgressBar);
for (int currBank = 0; currBank < romBanks; currBank++) { for (word currBank = 0; currBank < romBanks; currBank++) {
// Blink led // Blink led
blinkLED(); blinkLED();
@ -1763,7 +1786,7 @@ void writeFlash29F_GB(byte MBC, boolean flashErase) {
uint32_t totalProgressBar = (uint32_t)(romBanks)*16384; uint32_t totalProgressBar = (uint32_t)(romBanks)*16384;
draw_progressbar(0, totalProgressBar); draw_progressbar(0, totalProgressBar);
for (int currBank = 0; currBank < romBanks; currBank++) { for (word currBank = 0; currBank < romBanks; currBank++) {
// Blink led // Blink led
blinkLED(); blinkLED();
@ -1885,7 +1908,7 @@ byte readByteCompensated(int address) {
. .
address needs to be the x8 mode address of the flash register that should be read. address needs to be the x8 mode address of the flash register that should be read.
*/ */
byte writeByteCompensated(int address, byte data) { void writeByteCompensated(int address, byte data) {
if (flashSwitchLastBits) { if (flashSwitchLastBits) {
data = (data & 0b11111100) | ((data << 1) & 0b10) | ((data >> 1) & 0b01); data = (data & 0b11111100) | ((data << 1) & 0b10) | ((data >> 1) & 0b01);
} }
@ -2078,7 +2101,7 @@ bool writeCFI_GB() {
display_Update(); display_Update();
// Read x number of banks // Read x number of banks
for (int currBank = 0; currBank < romBanks; currBank++) { for (word currBank = 0; currBank < romBanks; currBank++) {
// Blink led // Blink led
blinkLED(); blinkLED();
@ -2105,7 +2128,7 @@ bool writeCFI_GB() {
word currAddr = 0; word currAddr = 0;
word endAddr = 0x3FFF; word endAddr = 0x3FFF;
for (int currBank = 0; currBank < romBanks; currBank++) { for (word currBank = 0; currBank < romBanks; currBank++) {
// Blink led // Blink led
blinkLED(); blinkLED();

View File

@ -1339,6 +1339,7 @@ unsigned long verifySRAM_GBA(unsigned long sramSize, uint32_t pos) {
return writeErrors; return writeErrors;
} else { } else {
print_Error(F("Can't open file"), false); print_Error(F("Can't open file"), false);
return 1;
} }
} }
@ -1546,6 +1547,7 @@ unsigned long verifyFRAM_GBA(unsigned long framSize) {
return writeErrors; return writeErrors;
} else { } else {
print_Error(F("Can't open file"), false); print_Error(F("Can't open file"), false);
return 1;
} }
} }

View File

@ -308,7 +308,7 @@ void writeByte_GBM(word myAddress, byte myData) {
HELPER FUNCTIONS HELPER FUNCTIONS
**********************/ **********************/
void printSdBuffer(word startByte, word numBytes) { void printSdBuffer(word startByte, word numBytes) {
for (int currByte = 0; currByte < numBytes; currByte += 10) { for (word currByte = 0; currByte < numBytes; currByte += 10) {
for (byte c = 0; c < 10; c++) { for (byte c = 0; c < 10; c++) {
// Convert to char array so we don't lose leading zeros // Convert to char array so we don't lose leading zeros
char currByteStr[2]; char currByteStr[2];

View File

@ -62,7 +62,7 @@ boolean compare_checksum_GBS() {
sprintf(folder, "GB/ROM/%s/%d", romName, foldern - 1); sprintf(folder, "GB/ROM/%s/%d", romName, foldern - 1);
char calcsumStr[5]; char calcsumStr[5];
sprintf(calcsumStr, "%04X", calc_checksum_GB(fileName, folder)); sprintf(calcsumStr, "%04X", calc_checksum_GB(fileName));
if (strcmp(calcsumStr, checksumStr) == 0) { if (strcmp(calcsumStr, checksumStr) == 0) {
print_Msg(F("Result: ")); print_Msg(F("Result: "));
@ -404,7 +404,7 @@ void gbSmartReadFlash() {
print_Error(create_file_STR, true); print_Error(create_file_STR, true);
// reset flash to read array state // reset flash to read array state
for (int i = 0x00; i < gbSmartBanks; i += gbSmartBanksPerFlashChip) for (uint16_t i = 0x00; i < gbSmartBanks; i += gbSmartBanksPerFlashChip)
gbSmartResetFlash(i); gbSmartResetFlash(i);
// remaps mmc to full access // remaps mmc to full access
@ -443,7 +443,7 @@ void gbSmartReadFlash() {
} }
void gbSmartWriteFlash() { void gbSmartWriteFlash() {
for (int bank = 0x00; bank < gbSmartBanks; bank += gbSmartBanksPerFlashChip) { for (uint16_t bank = 0x00; bank < gbSmartBanks; bank += gbSmartBanksPerFlashChip) {
display_Clear(); display_Clear();
print_Msg(F("Erasing...")); print_Msg(F("Erasing..."));

View File

@ -871,7 +871,7 @@ void setCart_INTV() {
myFile.seekSet(myFile.curPosition() + 1); myFile.seekSet(myFile.curPosition() + 1);
// Read SRAM size // Read SRAM size
byte sramSize = myFile.read() - 48; byte sramSize __attribute__ ((unused)) = myFile.read() - 48;
// Skip rest of line // Skip rest of line
myFile.seekSet(myFile.curPosition() + 2); myFile.seekSet(myFile.curPosition() + 2);

View File

@ -8,7 +8,7 @@
Variables Variables
*****************************************/ *****************************************/
unsigned long sramEnd; unsigned long sramEnd;
int eepSize; word eepSize;
word addrhi; word addrhi;
word addrlo; word addrlo;
word chksum; word chksum;
@ -1176,10 +1176,10 @@ void readROM_MD() {
byte buffer[1024] = { 0 }; byte buffer[1024] = { 0 };
// get current time // get current time
unsigned long startTime = millis(); // unsigned long startTime = millis();
// Phantasy Star/Beyond Oasis with 74HC74 and 74HC139 switch ROM/SRAM at address 0x200000 // Phantasy Star/Beyond Oasis with 74HC74 and 74HC139 switch ROM/SRAM at address 0x200000
if (0x200000 < cartSize < 0x400000) { if (0x200000 < cartSize && cartSize < 0x400000) {
enableSram_MD(0); enableSram_MD(0);
} }
@ -1561,7 +1561,7 @@ void readSram_MD() {
} }
unsigned long padsize = (1UL << 16) - (sramSize << 1); unsigned long padsize = (1UL << 16) - (sramSize << 1);
unsigned long padblockcount = padsize >> 9; // number of 512 byte blocks unsigned long padblockcount = padsize >> 9; // number of 512 byte blocks
for (int i = 0; i < padblockcount; i++) { for (unsigned long i = 0; i < padblockcount; i++) {
myFile.write(sdBuffer, 512); myFile.write(sdBuffer, 512);
} }
} }

View File

@ -981,7 +981,6 @@ void controllerTest_Display() {
// Graph // Graph
int xax = 24; // midpoint x int xax = 24; // midpoint x
int yax = 24; // midpoint y int yax = 24; // midpoint y
int zax = 24; // size
// variables to display test data of different sticks // variables to display test data of different sticks
int upx = 0; int upx = 0;
@ -1727,20 +1726,16 @@ void verifyCRC() {
} }
// Calculates the checksum of the header // Calculates the checksum of the header
boolean checkHeader(byte startAddress) { boolean checkHeader(byte *buf) {
word sum = 0; word sum = 0;
word buf_sum = (buf[28] << 8) + buf[29];
// first 28 bytes are the header, then comes the checksum(word) followed by the reverse checksum(0xFFF2 - checksum) // first 28 bytes are the header, then comes the checksum(word) followed by the reverse checksum(0xFFF2 - checksum)
for (int i = 0; i < 28; i += 2) { for (byte i = 0; i < 28; i += 2) {
word tempword = (((sdBuffer[startAddress + i] & 0xFF) << 8) | (sdBuffer[startAddress + i + 1] & 0xFF)); sum += (buf[i] << 8) + buf[i + 1];
sum += tempword;
} }
if ((((sdBuffer[startAddress + 28] & 0xFF) << 8) | (sdBuffer[startAddress + 29] & 0xFF)) != (sum & 0xFFFF)) { return sum == buf_sum;
return 0;
} else {
return 1;
}
} }
// verifies if Controller Pak holds valid header data // verifies if Controller Pak holds valid header data
@ -1755,13 +1750,13 @@ void validateMPK() {
//Check all four header copies //Check all four header copies
writeErrors = 0; writeErrors = 0;
if (!checkHeader(0x20)) if (!checkHeader(&sdBuffer[0x20]))
writeErrors++; writeErrors++;
if (!checkHeader(0x60)) if (!checkHeader(&sdBuffer[0x60]))
writeErrors++; writeErrors++;
if (!checkHeader(0x80)) if (!checkHeader(&sdBuffer[0x80]))
writeErrors++; writeErrors++;
if (!checkHeader(0xC0)) if (!checkHeader(&sdBuffer[0xC0]))
writeErrors++; writeErrors++;
print_Msg(F("HDR: ")); print_Msg(F("HDR: "));
@ -2484,6 +2479,7 @@ unsigned long verifyEeprom_CLK() {
return writeErrors; return writeErrors;
} else { } else {
print_Error(F("Savetype Error"), true); print_Error(F("Savetype Error"), true);
return 1;
} }
} }
@ -2850,6 +2846,7 @@ unsigned long verifyEeprom() {
return writeErrors; return writeErrors;
} else { } else {
print_Error(F("Savetype Error"), true); print_Error(F("Savetype Error"), true);
return 1;
} }
} }
@ -3630,8 +3627,8 @@ void savesummary_N64(boolean checkfound, char crcStr[9], unsigned long timeElaps
N64 Repro Flashrom Functions N64 Repro Flashrom Functions
*****************************************/ *****************************************/
void flashRepro_N64() { void flashRepro_N64() {
unsigned long sectorSize; unsigned long sectorSize = 0;
byte bufferSize; byte bufferSize = 0;
// Check flashrom ID's // Check flashrom ID's
idFlashrom_N64(); idFlashrom_N64();
@ -3870,10 +3867,14 @@ void flashRepro_N64() {
// Intel 4400L0ZDQ0 // Intel 4400L0ZDQ0
writeIntel4400_N64(); writeIntel4400_N64();
resetIntel4400_N64(); resetIntel4400_N64();
} else if (bufferSize == 0) { } else if (sectorSize) {
writeFlashrom_N64(sectorSize); if (bufferSize) {
} else {
writeFlashBuffer_N64(sectorSize, bufferSize); writeFlashBuffer_N64(sectorSize, bufferSize);
} else {
writeFlashrom_N64(sectorSize);
}
} else {
print_Error(F("sectorSize not set"), true);
} }
// Close the file: // Close the file:
@ -4498,7 +4499,7 @@ void writeFlashBuffer_N64(unsigned long sectorSize, byte bufferSize) {
writeWord_N64((bufferSize / 2) - 1); writeWord_N64((bufferSize / 2) - 1);
// Define variable before loop so we can use it later when reading the status register // Define variable before loop so we can use it later when reading the status register
word currWord; word currWord = 0;
for (byte currByte = 0; currByte < bufferSize; currByte += 2) { for (byte currByte = 0; currByte < bufferSize; currByte += 2) {
// Join two bytes into one word // Join two bytes into one word

View File

@ -186,7 +186,7 @@ byte prgchk1;
boolean mmc6 = false; boolean mmc6 = false;
byte prgchk2; byte prgchk2;
byte prgchk3; byte prgchk3;
int eepsize; word eepsize;
byte bytecheck; byte bytecheck;
byte firstbyte; byte firstbyte;
boolean flashfound = false; // NESmaker 39SF040 Flash Cart boolean flashfound = false; // NESmaker 39SF040 Flash Cart
@ -206,7 +206,6 @@ char fileBIN[] = "CART.bin";
// Cartridge Config // Cartridge Config
byte mapper; byte mapper;
byte newmapper;
byte prgsize; byte prgsize;
byte newprgsize; byte newprgsize;
byte chrsize; byte chrsize;
@ -632,10 +631,10 @@ boolean getMapping() {
skip_line(&myFile); skip_line(&myFile);
// Convert "4E4553" to (0x4E, 0x45, 0x53) // Convert "4E4553" to (0x4E, 0x45, 0x53)
byte iNES_BUF[2]; unsigned int iNES_BUF;
for (byte j = 0; j < 16; j++) { for (byte j = 0; j < 16; j++) {
sscanf(iNES_STR + j * 2, "%2X", iNES_BUF); sscanf(iNES_STR + j * 2, "%2X", &iNES_BUF);
iNES_HEADER[j] = iNES_BUF[0]; iNES_HEADER[j] = iNES_BUF;
} }
// Convert iNES garbage to useful info (thx to fceux) // Convert iNES garbage to useful info (thx to fceux)
@ -925,10 +924,10 @@ void selectMapping() {
skip_line(&myFile); skip_line(&myFile);
// Convert "4E4553" to (0x4E, 0x45, 0x53) // Convert "4E4553" to (0x4E, 0x45, 0x53)
byte iNES_BUF[2]; unsigned int iNES_BUF;
for (byte j = 0; j < 16; j++) { for (byte j = 0; j < 16; j++) {
sscanf(iNES_STR + j * 2, "%2X", iNES_BUF); sscanf(iNES_STR + j * 2, "%2X", &iNES_BUF);
iNES_HEADER[j] = iNES_BUF[0]; iNES_HEADER[j] = iNES_BUF;
} }
// Convert iNES garbage to useful info (thx to fceux) // Convert iNES garbage to useful info (thx to fceux)
@ -1212,17 +1211,6 @@ void readRaw_NES() {
/****************************************** /******************************************
Low Level Functions Low Level Functions
*****************************************/ *****************************************/
static void phi2_init() {
int i = 0x80;
unsigned char h = PORTF |= (1 << 0);
unsigned char l = PORTF &= ~(1 << 0);
while (i != 0) {
PORTL = l;
PORTL = h;
i--;
}
}
static void set_address(unsigned int address) { static void set_address(unsigned int address) {
unsigned char l = address & 0xFF; unsigned char l = address & 0xFF;
unsigned char h = address >> 8; unsigned char h = address >> 8;
@ -1295,60 +1283,6 @@ static void write_prg_byte(unsigned int address, uint8_t data) {
// _delay_us(1); // _delay_us(1);
} }
static void write_chr_byte(unsigned int address, uint8_t data) {
PHI2_LOW;
ROMSEL_HI;
MODE_WRITE;
PORTK = data;
set_address(address); // PHI2 low, ROMSEL always HIGH
//_delay_us(10);
CHR_WRITE_LOW;
_delay_us(1); // WRITING
//_delay_ms(1); // WRITING
CHR_WRITE_HI;
//_delay_us(1);
MODE_READ;
set_address(0);
PHI2_HI;
//_delay_us(1);
}
static void write_prg(unsigned int address, unsigned int len, uint8_t* data) {
LED_RED_ON;
while (len > 0) {
write_prg_byte(address, *data);
address++;
len--;
data++;
}
//_delay_ms(1);
LED_RED_OFF;
}
static void write_chr(unsigned int address, unsigned int len, uint8_t* data) {
LED_RED_ON;
while (len > 0) {
write_chr_byte(address, *data);
address++;
len--;
data++;
}
//_delay_ms(1);
LED_RED_OFF;
}
static void reset_phi2() {
LED_RED_ON;
LED_GREEN_ON;
PHI2_LOW;
ROMSEL_HI;
_delay_ms(100);
PHI2_HI;
LED_RED_OFF;
LED_GREEN_OFF;
}
void resetROM() { void resetROM() {
set_address(0); set_address(0);
PHI2_HI; PHI2_HI;
@ -2017,6 +1951,7 @@ unsigned char* getNES20HeaderBytesFromDatabaseRow(const char* crctest) {
Config Functions Config Functions
*****************************************/ *****************************************/
void setMapper() { void setMapper() {
byte newmapper;
#ifdef global_log #ifdef global_log
// Disable log to prevent unnecessary logging // Disable log to prevent unnecessary logging
println_Log(F("Set Mapper manually")); println_Log(F("Set Mapper manually"));
@ -2028,7 +1963,7 @@ void setMapper() {
chooseMapper: chooseMapper:
// Read stored mapper // Read stored mapper
EEPROM_readAnything(7, newmapper); EEPROM_readAnything(7, newmapper);
if ((newmapper > 220) || (newmapper < 0)) if (newmapper > 220)
newmapper = 0; newmapper = 0;
// Split into digits // Split into digits
byte hundreds = newmapper / 100; byte hundreds = newmapper / 100;
@ -2920,7 +2855,7 @@ void readPRG(boolean readrom) {
case 87: // 16K/32K case 87: // 16K/32K
case 184: // 32K case 184: // 32K
case 185: // 16K/32K case 185: // 16K/32K
for (word address = 0; address < ((prgsize * 0x4000) + 0x4000); address += 512) { // 16K or 32K for (word address = 0; address < (((word) prgsize) * 0x4000) + 0x4000; address += 512) { // 16K or 32K
dumpPRG(base, address); dumpPRG(base, address);
} }
break; break;
@ -2948,7 +2883,7 @@ void readPRG(boolean readrom) {
case 2: // 128K/256K case 2: // 128K/256K
for (int i = 0; i < 8; i++) { // 128K/256K for (int i = 0; i < 8; i++) { // 128K/256K
write_prg_byte(0x8000, i); write_prg_byte(0x8000, i);
for (word address = 0x0; address < (((prgsize - 3) * 0x4000) + 0x4000); address += 512) { for (word address = 0x0; address < (((word) prgsize - 3) * 0x4000) + 0x4000; address += 512) {
dumpPRG(base, address); dumpPRG(base, address);
} }
} }
@ -5113,11 +5048,11 @@ void writeFLASH() {
myFile.read(sdBuffer, 512); myFile.read(sdBuffer, 512);
for (int x = 0; x < 512; x++) { for (int x = 0; x < 512; x++) {
word location = base + sector + addr + x; word location = base + sector + addr + x;
NESmaker_ByteProgram(i, base + sector + addr + x, sdBuffer[x]); NESmaker_ByteProgram(i, location, sdBuffer[x]);
delayMicroseconds(14); // Typical 14us delayMicroseconds(14); // Typical 14us
for (byte k = 0; k < 2; k++) { // Confirm write twice for (byte k = 0; k < 2; k++) { // Confirm write twice
do { do {
bytecheck = read_prg_byte(base + sector + addr + x); bytecheck = read_prg_byte(location);
delayMicroseconds(14); delayMicroseconds(14);
} while (bytecheck != sdBuffer[x]); } while (bytecheck != sdBuffer[x]);
} }
@ -5152,6 +5087,11 @@ void writeFLASH() {
sd.chdir(); // root sd.chdir(); // root
filePath[0] = '\0'; // Reset filePath filePath[0] = '\0'; // Reset filePath
} }
// avoid warnings
#undef MODE_READ
#undef MODE_WRITE
#endif #endif
//****************************************** //******************************************
// End of File // End of File

View File

@ -248,7 +248,6 @@ void readROM_NGP(char* outPathBuf, size_t bufferSize) {
void scanChip_NGP() { void scanChip_NGP() {
display_Clear(); display_Clear();
uint32_t block_addr = 0;
// generate name of report file // generate name of report file
snprintf(fileName, FILENAME_LENGTH, "%s.txt", romName); snprintf(fileName, FILENAME_LENGTH, "%s.txt", romName);

View File

@ -440,9 +440,8 @@ uint32_t calculate_crc32(int n, unsigned char c[], uint32_t r) {
return r; return r;
} }
void crc_search(char *file_p, char *folder_p, uint32_t rom_size, uint32_t crc) { void crc_search(char *file_p, char *folder_p, uint32_t rom_size __attribute__ ((unused)), uint32_t crc) {
FsFile rom, script; FsFile rom, script;
uint32_t r, processedsize;
char gamename[100]; char gamename[100];
char crc_file[9], crc_search[9]; char crc_file[9], crc_search[9];
uint8_t flag; uint8_t flag;
@ -519,10 +518,6 @@ void lock_tennokoe_bank_RAM() {
} }
void read_tennokoe_bank_PCE(int bank_index) { void read_tennokoe_bank_PCE(int bank_index) {
uint32_t processed_size = 0;
uint32_t verify_loop;
uint8_t verify_flag = 1;
//clear the screen //clear the screen
display_Clear(); display_Clear();

View File

@ -657,6 +657,11 @@ unsigned long verifySRAM_PCW() {
return writeErrors; return writeErrors;
} }
// avoid warnings
#undef MODE_READ
#undef MODE_WRITE
#endif #endif
//****************************************** //******************************************
// End of File // End of File

View File

@ -941,7 +941,7 @@ void readROM_SFM() {
display_Update(); display_Update();
// Read up to 96 banks starting at bank 0×00. // Read up to 96 banks starting at bank 0×00.
for (int currBank = 0; currBank < numBanks; currBank++) { for (byte currBank = 0; currBank < numBanks; currBank++) {
// Dump the bytes to SD 512B at a time // Dump the bytes to SD 512B at a time
for (long currByte = 32768; currByte < 65536; currByte += 512) { for (long currByte = 32768; currByte < 65536; currByte += 512) {
for (int c = 0; c < 512; c++) { for (int c = 0; c < 512; c++) {
@ -956,7 +956,7 @@ void readROM_SFM() {
println_Msg(F("Dumping HiRom...")); println_Msg(F("Dumping HiRom..."));
display_Update(); display_Update();
for (int currBank = 192; currBank < (numBanks + 192); currBank++) { for (byte currBank = 192; currBank < (numBanks + 192); currBank++) {
for (long currByte = 0; currByte < 65536; currByte += 512) { for (long currByte = 0; currByte < 65536; currByte += 512) {
for (int c = 0; c < 512; c++) { for (int c = 0; c < 512; c++) {
sdBuffer[c] = readBank_SFM(currBank, currByte + c); sdBuffer[c] = readBank_SFM(currBank, currByte + c);
@ -1056,7 +1056,7 @@ void writeFlash_SFM(int startBank, uint32_t pos) {
if (romType) { if (romType) {
// Write hirom // Write hirom
for (int currBank = startBank; currBank < startBank + numBanks; currBank++) { for (byte currBank = startBank; currBank < startBank + numBanks; currBank++) {
// Fill SDBuffer with 1 page at a time then write it repeat until all bytes are written // Fill SDBuffer with 1 page at a time then write it repeat until all bytes are written
for (unsigned long currByte = 0; currByte < 0x10000; currByte += 128) { for (unsigned long currByte = 0; currByte < 0x10000; currByte += 128) {
myFile.read(sdBuffer, 128); myFile.read(sdBuffer, 128);
@ -1081,7 +1081,7 @@ void writeFlash_SFM(int startBank, uint32_t pos) {
} }
} else { } else {
// Write lorom // Write lorom
for (int currBank = 0; currBank < numBanks; currBank++) { for (byte currBank = 0; currBank < numBanks; currBank++) {
for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte += 128) { for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte += 128) {
myFile.read(sdBuffer, 128); myFile.read(sdBuffer, 128);
// Write command sequence // Write command sequence
@ -1184,7 +1184,7 @@ byte blankcheck_SFM(int startBank) {
byte blank = 1; byte blank = 1;
if (romType) { if (romType) {
for (int currBank = startBank; currBank < startBank + numBanks; currBank++) { for (byte currBank = startBank; currBank < startBank + numBanks; currBank++) {
for (unsigned long currByte = 0; currByte < 0x10000; currByte++) { for (unsigned long currByte = 0; currByte < 0x10000; currByte++) {
if (readBank_SFM(currBank, currByte) != 0xFF) { if (readBank_SFM(currBank, currByte) != 0xFF) {
currBank = startBank + numBanks; currBank = startBank + numBanks;
@ -1193,7 +1193,7 @@ byte blankcheck_SFM(int startBank) {
} }
} }
} else { } else {
for (int currBank = 0; currBank < numBanks; currBank++) { for (byte currBank = 0; currBank < numBanks; currBank++) {
for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte++) { for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte++) {
if (readBank_SFM(currBank, currByte) != 0xFF) { if (readBank_SFM(currBank, currByte) != 0xFF) {
currBank = numBanks; currBank = numBanks;
@ -1221,7 +1221,7 @@ unsigned long verifyFlash_SFM(int startBank, uint32_t pos) {
controlIn_SFM(); controlIn_SFM();
if (romType) { if (romType) {
for (int currBank = startBank; currBank < startBank + numBanks; currBank++) { for (byte currBank = startBank; currBank < startBank + numBanks; currBank++) {
for (unsigned long currByte = 0; currByte < 0x10000; currByte += 512) { for (unsigned long currByte = 0; currByte < 0x10000; currByte += 512) {
// Fill SDBuffer // Fill SDBuffer
myFile.read(sdBuffer, 512); myFile.read(sdBuffer, 512);
@ -1233,7 +1233,7 @@ unsigned long verifyFlash_SFM(int startBank, uint32_t pos) {
} }
} }
} else { } else {
for (int currBank = 0; currBank < numBanks; currBank++) { for (byte currBank = 0; currBank < numBanks; currBank++) {
for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte += 512) { for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte += 512) {
// Fill SDBuffer // Fill SDBuffer
myFile.read(sdBuffer, 512); myFile.read(sdBuffer, 512);
@ -1273,7 +1273,7 @@ void readFlash_SFM() {
print_Error(create_file_STR, true); print_Error(create_file_STR, true);
} }
if (romType) { if (romType) {
for (int currBank = 0xC0; currBank < 0xC0 + numBanks; currBank++) { for (byte currBank = 0xC0; currBank < 0xC0 + numBanks; currBank++) {
for (unsigned long currByte = 0; currByte < 0x10000; currByte += 512) { for (unsigned long currByte = 0; currByte < 0x10000; currByte += 512) {
for (int c = 0; c < 512; c++) { for (int c = 0; c < 512; c++) {
sdBuffer[c] = readBank_SFM(currBank, currByte + c); sdBuffer[c] = readBank_SFM(currBank, currByte + c);
@ -1282,7 +1282,7 @@ void readFlash_SFM() {
} }
} }
} else { } else {
for (int currBank = 0; currBank < numBanks; currBank++) { for (byte currBank = 0; currBank < numBanks; currBank++) {
for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte += 512) { for (unsigned long currByte = 0x8000; currByte < 0x10000; currByte += 512) {
for (int c = 0; c < 512; c++) { for (int c = 0; c < 512; c++) {
sdBuffer[c] = readBank_SFM(currBank, currByte + c); sdBuffer[c] = readBank_SFM(currBank, currByte + c);
@ -1348,10 +1348,10 @@ void printMapping() {
// Read the mapping out of the first chip // Read the mapping out of the first chip
char buffer[3]; char buffer[3];
for (int currByte = 0xFF00; currByte < 0xFF50; currByte += 10) { for (unsigned int currByte = 0xFF00; currByte < 0xFF50; currByte += 10) {
for (int c = 0; c < 10; c++) { for (int c = 0; c < 10; c++) {
itoa(readBank_SFM(0xC0, currByte + c), buffer, 16); itoa(readBank_SFM(0xC0, currByte + c), buffer, 16);
for (int i = 0; i < 2 - strlen(buffer); i++) { for (size_t i = 0; i < 2 - strlen(buffer); i++) {
print_Msg(F("0")); print_Msg(F("0"));
} }
// Now print the significant bits // Now print the significant bits

View File

@ -204,8 +204,6 @@ void snesMenu() {
display_Clear(); display_Clear();
// Change working dir to root // Change working dir to root
sd.chdir("/"); sd.chdir("/");
// get current time
unsigned long startTime = millis();
// start reading from cart // start reading from cart
readROM_SNES(); readROM_SNES();
// Internal Checksum // Internal Checksum
@ -604,7 +602,7 @@ void readLoRomBanks(unsigned int start, unsigned int total, FsFile* file) {
uint32_t totalProgressBar = (uint32_t)(total - start) * 1024; uint32_t totalProgressBar = (uint32_t)(total - start) * 1024;
draw_progressbar(0, totalProgressBar); draw_progressbar(0, totalProgressBar);
for (int currBank = start; currBank < total; currBank++) { for (byte currBank = start; currBank < total; currBank++) {
PORTL = currBank; PORTL = currBank;
// Blink led // Blink led
@ -655,7 +653,7 @@ void readHiRomBanks(unsigned int start, unsigned int total, FsFile* file) {
uint32_t totalProgressBar = (uint32_t)(total - start) * 1024; uint32_t totalProgressBar = (uint32_t)(total - start) * 1024;
draw_progressbar(0, totalProgressBar); draw_progressbar(0, totalProgressBar);
for (int currBank = start; currBank < total; currBank++) { for (byte currBank = start; currBank < total; currBank++) {
PORTL = currBank; PORTL = currBank;
// Blink led // Blink led
@ -701,31 +699,6 @@ void readHiRomBanks(unsigned int start, unsigned int total, FsFile* file) {
void getCartInfo_SNES() { void getCartInfo_SNES() {
boolean manualConfig = 0; boolean manualConfig = 0;
//Prime SA1 cartridge
uint16_t c = 0;
uint16_t currByte = 0;
byte buffer[1024] = { 0 };
PORTL = 192;
while (c < 1024) {
PORTF = (currByte & 0xFF);
PORTK = ((currByte >> 8) & 0xFF);
// Wait for the Byte to appear on the data bus
// Arduino running at 16Mhz -> one nop = 62.5ns
// slowRom is good for 200ns, fastRom is <= 120ns; S-CPU best case read speed: 3.57MHz / 280ns
// let's be conservative and use 6 x 62.5 = 375ns
NOP;
NOP;
NOP;
NOP;
NOP;
NOP;
buffer[c] = PINC;
c++;
currByte++;
}
// Print start page // Print start page
if (checkcart_SNES() == 0) { if (checkcart_SNES() == 0) {
// Checksum either corrupt or 0000 // Checksum either corrupt or 0000
@ -953,12 +926,10 @@ boolean checkcart_SNES() {
// set control to read // set control to read
dataIn(); dataIn();
uint16_t c = 0;
uint16_t headerStart = 0xFFB0; uint16_t headerStart = 0xFFB0;
uint16_t currByte = headerStart; byte snesHeader[80];
byte snesHeader[80] = { 0 };
PORTL = 0; PORTL = 0;
while (c < 80) { for (uint16_t c = 0, currByte = headerStart; c < 80; c++, currByte++) {
PORTF = (currByte & 0xFF); PORTF = (currByte & 0xFF);
PORTK = ((currByte >> 8) & 0xFF); PORTK = ((currByte >> 8) & 0xFF);
@ -976,8 +947,6 @@ boolean checkcart_SNES() {
NOP; NOP;
snesHeader[c] = PINC; snesHeader[c] = PINC;
c++;
currByte++;
} }
// Calculate CRC32 of header // Calculate CRC32 of header
@ -1396,7 +1365,7 @@ void readROM_SNES() {
controlIn_SNES(); controlIn_SNES();
byte initialSOMap = readBank_SNES(0, 18439); byte initialSOMap = readBank_SNES(0, 18439);
for (int currMemmap = 0; currMemmap < (numBanks / 16); currMemmap++) { for (byte currMemmap = 0; currMemmap < (numBanks / 16); currMemmap++) {
dataOut(); dataOut();
controlOut_SNES(); controlOut_SNES();
@ -1974,6 +1943,7 @@ unsigned long verifySRAM() {
return writeErrors; return writeErrors;
} else { } else {
print_Error(F("Can't open file"), false); print_Error(F("Can't open file"), false);
return 1;
} }
} }

View File

@ -302,11 +302,8 @@ void readSRAM_SV() {
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
print_Error(sd_error_STR, true); print_Error(sd_error_STR, true);
} }
int sramBanks = 0;
readBank_SV(0x10, 0); // Preconfigure to fix corrupt 1st byte readBank_SV(0x10, 0); // Preconfigure to fix corrupt 1st byte
// Sram size
long lastByte = (long(sramSize) * 0x80);
//startBank = 0x10; endBank = 0x17; CS low //startBank = 0x10; endBank = 0x17; CS low
for (byte BSBank = 0x10; BSBank < 0x18; BSBank++) { for (byte BSBank = 0x10; BSBank < 0x18; BSBank++) {
@ -347,8 +344,6 @@ void writeSRAM_SV() {
// Set RST RD WR to High and CS to Low // Set RST RD WR to High and CS to Low
controlOut_SNES(); controlOut_SNES();
long lastByte = (long(sramSize) * 0x80);
println_Msg(F("Writing sram...")); println_Msg(F("Writing sram..."));
display_Update(); display_Update();
@ -390,10 +385,6 @@ unsigned long verifySRAM_SV() {
// Set control // Set control
controlIn_SNES(); controlIn_SNES();
int sramBanks = 0;
// Sram size
long lastByte = (long(sramSize) * 0x80);
//startBank = 0x10; endBank = 0x17; CS low //startBank = 0x10; endBank = 0x17; CS low
for (byte BSBank = 0x10; BSBank < 0x18; BSBank++) { for (byte BSBank = 0x10; BSBank < 0x18; BSBank++) {
//startAddr = 0x5000 //startAddr = 0x5000
@ -412,6 +403,7 @@ unsigned long verifySRAM_SV() {
return writeErrors; return writeErrors;
} else { } else {
print_Error(F("Can't open file"), false); print_Error(F("Can't open file"), false);
return 1;
} }
} }

View File

@ -981,7 +981,7 @@ boolean compareChecksum_WS(const char *wsFilePath) {
} }
uint32_t calLength = myFile.fileSize() - 512; uint32_t calLength = myFile.fileSize() - 512;
uint32_t checksum = 0; uint16_t checksum = 0;
if (wsWitch) { if (wsWitch) {
// only calcuate last 128Kbytes for wonderwitch (OS and BIOS region) // only calcuate last 128Kbytes for wonderwitch (OS and BIOS region)
@ -1003,18 +1003,12 @@ boolean compareChecksum_WS(const char *wsFilePath) {
myFile.close(); myFile.close();
checksum &= 0x0000ffff;
calLength = wsGameChecksum;
// don't know why formating string "%04X(%04X)" always output "xxxx(0000)"
// so split into two snprintf
char result[11]; char result[11];
snprintf(result, 5, "%04X", calLength); snprintf(result, 11, "%04X(%04X)", wsGameChecksum, checksum);
snprintf(result + 4, 11 - 4, "(%04X)", checksum);
print_Msg(F("Result: ")); print_Msg(F("Result: "));
println_Msg(result); println_Msg(result);
if (checksum == calLength) { if (checksum == wsGameChecksum) {
println_Msg(F("Checksum matches")); println_Msg(F("Checksum matches"));
display_Update(); display_Update();
return 1; return 1;