Update N64.ino

This updates the N64 Gameshark function description, adds progress bars for the writing and verification functions, and updates the Chip ID function to report an unknown chip.
This commit is contained in:
Richard Weick 2023-09-08 10:06:27 -05:00 committed by GitHub
parent b748faecde
commit 61bfc81ce4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4056,8 +4056,8 @@ void flashGameshark_N64() {
idGameshark_N64(); idGameshark_N64();
// Check for SST 29LE010 (0808)/SST 28LF040 (0404)/AMTEL AT29LV010A (3535)/SST 29EE010 (0707) // Check for SST 29LE010 (0808)/SST 28LF040 (0404)/AMTEL AT29LV010A (3535)/SST 29EE010 (0707)
// !!!! This has been confirmed to allow reading of v1.07, v1.09, v2.0-2.21, v3.2-3.3 !!!! // !!!! This has been confirmed to allow reading of v1.02, v1.04-v1.09, v2.0-2.21, v3.0-3.3 !!!!
// !!!! 29LE010/29EE010/AT29LV010A are very similar and can possibly be written to with this process. !!!! // !!!! All referenced eeproms/flashroms are confirmed as being writable with this process. !!!!
// !!!! !!!! // !!!! !!!!
// !!!! PROCEED AT YOUR OWN RISK !!!! // !!!! PROCEED AT YOUR OWN RISK !!!!
// !!!! !!!! // !!!! !!!!
@ -4179,12 +4179,10 @@ void idGameshark_N64() {
if (flashid == 0x0808 || flashid == 0x3535 || flashid == 0x0707) { if (flashid == 0x0808 || flashid == 0x3535 || flashid == 0x0707) {
flashSize = 262144; flashSize = 262144;
} } else if (flashid == 0x0404) {
if (flashid == 0x0404) {
//Set SST 28LF040 flashrom size //Set SST 28LF040 flashrom size
flashSize = 1048574; flashSize = 1048574;
if (flashid != 0x0404) { } else {
println_Msg(F("Check cart connection")); println_Msg(F("Check cart connection"));
println_Msg(F("Unknown Flash ID")); println_Msg(F("Unknown Flash ID"));
sprintf(flashid_str, "%04X", flashid); sprintf(flashid_str, "%04X", flashid);
@ -4193,7 +4191,6 @@ void idGameshark_N64() {
wait(); wait();
mainMenu(); mainMenu();
} }
}
sprintf(flashid_str, "%04X", flashid); sprintf(flashid_str, "%04X", flashid);
// Reset flashrom // Reset flashrom
resetGameshark_N64(); resetGameshark_N64();
@ -4348,12 +4345,14 @@ void writeGameshark_N64() {
// Write Gameshark with 2x SST 29LE010 / AMTEL AT29LV010A / SST 29EE010 Eeproms // Write Gameshark with 2x SST 29LE010 / AMTEL AT29LV010A / SST 29EE010 Eeproms
if (flashid == 0x0808 || flashid == 0x3535 || flashid == 0x0707) { if (flashid == 0x0808 || flashid == 0x3535 || flashid == 0x0707) {
// Each 29LE010 has 1024 pages, each 128 bytes in size // Each 29LE010 has 1024 pages, each 128 bytes in size
//Initialize progress bar
uint32_t processedProgressBar = 0;
uint32_t totalProgressBar = (uint32_t)(fileSize);
draw_progressbar(0, totalProgressBar);
myFile.seek(0); myFile.seek(0);
for (unsigned long currPage = 0; currPage < fileSize / 2; currPage += 128) { for (unsigned long currPage = 0; currPage < fileSize / 2; currPage += 128) {
// Fill SD buffer with twice the amount since we flash 2 chips // Fill SD buffer with twice the amount since we flash 2 chips
myFile.read(sdBuffer, 256); myFile.read(sdBuffer, 256);
// Blink led
blinkLED();
//Send page write command to both flashroms //Send page write command to both flashroms
setAddress_N64(0x1EF0AAA8); setAddress_N64(0x1EF0AAA8);
@ -4372,6 +4371,9 @@ void writeGameshark_N64() {
// Send byte data // Send byte data
writeWord_N64(currWord); writeWord_N64(currWord);
} }
processedProgressBar += 256;
draw_progressbar(processedProgressBar, totalProgressBar);
blinkLED();
delay(30); delay(30);
} }
} }
@ -4385,8 +4387,6 @@ void writeGameshark_N64() {
bool toggle = true; bool toggle = true;
myFile.seek(0); myFile.seek(0);
for (unsigned long currSector = 0; currSector < fileSize; currSector += 16384) { for (unsigned long currSector = 0; currSector < fileSize; currSector += 16384) {
// Blink led
blinkLED();
for (unsigned long currSdBuffer = 0; currSdBuffer < 16384; currSdBuffer += 256) { for (unsigned long currSdBuffer = 0; currSdBuffer < 16384; currSdBuffer += 256) {
// Fill SD buffer // Fill SD buffer
myFile.read(sdBuffer, 256); myFile.read(sdBuffer, 256);
@ -4436,13 +4436,15 @@ void writeGameshark_N64() {
} }
unsigned long verifyGameshark_N64() { unsigned long verifyGameshark_N64() {
uint32_t processedProgressBar = 0;
uint32_t totalProgressBar = (uint32_t)(fileSize);
println_Msg(F(""));
draw_progressbar(0, totalProgressBar);
// Open file on sd card // Open file on sd card
if (myFile.open(filePath, O_READ)) { if (myFile.open(filePath, O_READ)) {
writeErrors = 0; writeErrors = 0;
for (unsigned long currSector = 0; currSector < fileSize; currSector += 131072) { for (unsigned long currSector = 0; currSector < fileSize; currSector += 131072) {
// Blink led
blinkLED();
for (unsigned long currSdBuffer = 0; currSdBuffer < 131072; currSdBuffer += 512) { for (unsigned long currSdBuffer = 0; currSdBuffer < 131072; currSdBuffer += 512) {
// Fill SD buffer // Fill SD buffer
myFile.read(sdBuffer, 512); myFile.read(sdBuffer, 512);
@ -4456,6 +4458,9 @@ unsigned long verifyGameshark_N64() {
writeErrors++; writeErrors++;
} }
} }
processedProgressBar += 512;
draw_progressbar(processedProgressBar, totalProgressBar);
blinkLED();
} }
} }
// Close the file: // Close the file: