Add 64 byte write buffer for N64 repro

This commit is contained in:
sanni 2021-05-26 17:07:26 +02:00
parent 0c99780c5d
commit f96f854b4e

View File

@ -101,8 +101,9 @@ static const char* const saveOptionsN64[] PROGMEM = {N64SaveItem1, N64SaveItem2,
// Repro menu // Repro menu
static const char N64ReproItem1[] PROGMEM = "no buffer"; static const char N64ReproItem1[] PROGMEM = "no buffer";
static const char N64ReproItem2[] PROGMEM = "32 byte"; static const char N64ReproItem2[] PROGMEM = "32 byte";
static const char N64ReproItem3[] PROGMEM = "128 byte"; static const char N64ReproItem3[] PROGMEM = "64 byte";
static const char* const reproOptionsN64[] PROGMEM = {N64ReproItem1, N64ReproItem2, N64ReproItem3}; static const char N64ReproItem4[] PROGMEM = "128 byte";
static const char* const reproOptionsN64[] PROGMEM = {N64ReproItem1, N64ReproItem2, N64ReproItem3, N64ReproItem4};
// N64 start menu // N64 start menu
void n64Menu() { void n64Menu() {
@ -3053,17 +3054,19 @@ void flashRepro_N64() {
wait(); wait();
} }
else { else {
println_Msg(F("Unknown flashrom"));
print_Msg(F("Vendor: "));
println_Msg(vendorID);
print_Msg(F("ID: ")); print_Msg(F("ID: "));
print_Msg(vendorID);
print_Msg(F(" "));
print_Msg(flashid); print_Msg(flashid);
print_Msg(F(" ")); print_Msg(F(" "));
println_Msg(cartID); println_Msg(cartID);
println_Msg(F("Unknown flashrom"));
println_Msg(F(" ")); println_Msg(F(" "));
println_Msg(F("Press button for")); println_Msg(F("Press button for"));
println_Msg(F("manual config")); println_Msg(F("manual config"));
println_Msg(F("This will erase your"));
println_Msg(F("Repro Cartridge."));
println_Msg(F("Attention: Use 3.3V!"));
display_Update(); display_Update();
wait(); wait();
@ -3110,8 +3113,8 @@ void flashRepro_N64() {
// Set flashid manually // Set flashid manually
unsigned char N64ReproMenu; unsigned char N64ReproMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(reproOptionsN64, 3); convertPgm(reproOptionsN64, 4);
N64ReproMenu = question_box(F("Select flash buffer"), menuOptions, 3, 0); N64ReproMenu = question_box(F("Select flash buffer"), menuOptions, 4, 0);
// wait for user choice to come back from the question box menu // wait for user choice to come back from the question box menu
switch (N64ReproMenu) switch (N64ReproMenu)
@ -3127,6 +3130,12 @@ void flashRepro_N64() {
break; break;
case 2: case 2:
// 64 byte buffer
sprintf(flashid, "%s", "227E");
sprintf(cartID, "%s", "2200");
break;
case 3:
// 128 byte buffer // 128 byte buffer
sprintf(flashid, "%s", "227E"); sprintf(flashid, "%s", "227E");
sprintf(cartID, "%s", "3901"); sprintf(cartID, "%s", "3901");
@ -3189,6 +3198,10 @@ void flashRepro_N64() {
// Intel 512M29EW(64MB) with 0x20000 sector size and 128 byte buffer // Intel 512M29EW(64MB) with 0x20000 sector size and 128 byte buffer
writeFlashBuffer_N64(0x20000, 128); writeFlashBuffer_N64(0x20000, 128);
} }
else if ((strcmp(cartID, "2200") == 0) && (strcmp(flashid, "227E") == 0)) {
// ST M29W128GH(16MB) with 0x20000 sector size and 64 byte buffer
writeFlashBuffer_N64(0x20000, 64);
}
else if (strcmp(flashid, "227E") == 0) { else if (strcmp(flashid, "227E") == 0) {
// Spansion S29GL128N/S29GL256N or Fujitsu MSP55LV512 with 0x20000 sector size and 32 byte buffer // Spansion S29GL128N/S29GL256N or Fujitsu MSP55LV512 with 0x20000 sector size and 32 byte buffer
writeFlashBuffer_N64(0x20000, 32); writeFlashBuffer_N64(0x20000, 32);