V18A: Added delay to SNES write

This commit is contained in:
sanni 2016-08-25 15:31:58 +02:00 committed by GitHub
parent ee01ff3bfa
commit 5d3e4a3628
3 changed files with 6 additions and 18 deletions

View File

@ -3,7 +3,7 @@
Author: sanni
Date: 2016-08-25
Version: V18
Version: V18A
SD lib: https://github.com/greiman/SdFat
LCD lib: https://github.com/adafruit/Adafruit_SSD1306
@ -31,7 +31,7 @@
Pickle - SDD1 fix
**********************************************************************************/
char ver[5] = "V18";
char ver[5] = "V18A";
/******************************************
Define Output

View File

@ -117,7 +117,7 @@ void NPGameMenu() {
print_Msg(F("Game "));
print_Msg(gameSubMenu + 0x81, HEX);
println_Msg(F(" Timeout"));
println_Msg(readBank_SNES(0, 0x2400));
println_Msg(readBank_SNES(0, 0x2400), HEX);
println_Msg(F(""));
print_Error(F("Please powercycle NP cart"), true);
}
@ -1321,46 +1321,36 @@ byte send_NP(byte command) {
// Switch to write
dataOut();
controlOut_SNES();
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// Write command
writeBank_SNES(0, 0x2400, 0x09);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// Switch to read
dataIn();
controlIn_SNES();
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// Read status
NPReady = readBank_SNES(0, 0x2400);
// Switch to write
dataOut();
controlOut_SNES();
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
writeBank_SNES(0, 0x2401, 0x28);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
writeBank_SNES(0, 0x2401, 0x84);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// NP_CMD_06h, send this only if above read has returned 7Dh, not if it's already returning 2Ah
if (NPReady == 0x7D) {
writeBank_SNES(0, 0x2400, 0x06);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
writeBank_SNES(0, 0x2400, 0x39);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
}
// Write the command
writeBank_SNES(0, 0x2400, command);
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// Switch to read
dataIn();
controlIn_SNES();
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// Read status
NPReady = readBank_SNES(0, 0x2400);

View File

@ -295,13 +295,13 @@ void writeBank_SNES(byte myBank, word myAddress, byte myData) {
PORTH &= ~(1 << 5);
// Leave WR low for at least 60ns
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
// Switch WR(PH5) to HIGH
PORTH |= (1 << 5);
// Leave WR high for at least 50ns
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
}
// Read one byte of data from a location specified by bank and address, 00:0000
@ -964,8 +964,6 @@ void writeSRAM (boolean browseFile) {
myFile.read(sdBuffer, 512);
for (unsigned long c = 0; c < 512; c++) {
writeBank_SNES(0, currByte + c, sdBuffer[c]);
// Wait a little to prevent 1 byte write error
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
}
}
}