reuse code to write NES maker command

This commit is contained in:
smesgr9000 2024-05-30 08:15:22 +02:00
parent 5b43a162b8
commit 86059ae070

View File

@ -4114,44 +4114,29 @@ void EepromWRITE(uint8_t address) {
/****************************************** /******************************************
NESmaker Flash Cart [SST 39SF40] NESmaker Flash Cart [SST 39SF40]
*****************************************/ *****************************************/
void NESmaker_ResetFlash() { // Reset Flash void NESmaker_Cmd(byte cmd) {
write_prg_byte(0xC000, 0x01); write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0xAA); write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00); write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55); write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01); write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0xFF); // Reset write_prg_byte(0x9555, cmd);
} }
// SST 39SF040 Software ID // SST 39SF040 Software ID
void NESmaker_ID() { // Read Flash ID void NESmaker_ID() { // Read Flash ID
NESmaker_ResetFlash(); NESmaker_Cmd(0xFF); // Reset
write_prg_byte(0xC000, 0x01); NESmaker_Cmd(0x90); // Software ID Entry
write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0x90); // Software ID Entry
flashid = read_prg_byte(0x8000) << 8; flashid = read_prg_byte(0x8000) << 8;
flashid |= read_prg_byte(0x8001); flashid |= read_prg_byte(0x8001);
sprintf(flashid_str, "%04X", flashid); sprintf(flashid_str, "%04X", flashid);
write_prg_byte(0xC000, 0x01); NESmaker_Cmd(0xF0); // Software ID Exit
write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0xF0); // Software ID Exit
if (flashid == 0xBFB7) // SST 39SF040 if (flashid == 0xBFB7) // SST 39SF040
flashfound = 1; flashfound = 1;
} }
void NESmaker_SectorErase(uint8_t bank, word address) { void NESmaker_SectorErase(uint8_t bank, word address) {
write_prg_byte(0xC000, 0x01); NESmaker_Cmd(0x80);
write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0x80);
write_prg_byte(0xC000, 0x01); write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0xAA); write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00); write_prg_byte(0xC000, 0x00);
@ -4161,30 +4146,15 @@ void NESmaker_SectorErase(uint8_t bank, word address) {
} }
void NESmaker_ByteProgram(uint8_t bank, word address, uint8_t data) { void NESmaker_ByteProgram(uint8_t bank, word address, uint8_t data) {
write_prg_byte(0xC000, 0x01); NESmaker_Cmd(0xA0);
write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0xA0);
write_prg_byte(0xC000, bank); // $00-$1F write_prg_byte(0xC000, bank); // $00-$1F
write_prg_byte(address, data); // $8000-$BFFF write_prg_byte(address, data); // $8000-$BFFF
} }
// SST 39SF040 Chip Erase [NOT IMPLEMENTED] // SST 39SF040 Chip Erase [NOT IMPLEMENTED]
void NESmaker_ChipErase() { // Typical 70ms void NESmaker_ChipErase() { // Typical 70ms
write_prg_byte(0xC000, 0x01); NESmaker_Cmd(0x80);
write_prg_byte(0x9555, 0xAA); NESmaker_Cmd(0x10); // Chip Erase
write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0x80);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0xAA);
write_prg_byte(0xC000, 0x00);
write_prg_byte(0xAAAA, 0x55);
write_prg_byte(0xC000, 0x01);
write_prg_byte(0x9555, 0x10); // Chip Erase
} }
void writeFLASH() { void writeFLASH() {