mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-30 08:24:14 +01:00
reuse code to write NES maker command
This commit is contained in:
parent
5b43a162b8
commit
86059ae070
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user