SD card init step 1 now works, needed to unset the XCH bit

This commit is contained in:
meepingsnesroms
2019-02-22 09:57:08 -08:00
parent 0cdf24711b
commit 8dbc416bfd
6 changed files with 1660 additions and 15 deletions

View File

@@ -0,0 +1,12 @@
chip select may not be readable from CPU
Need to investigate:
HwrSpiCsSet_100AC772
CPU read 8 bits from register 0x704, PC:0x100A5976.(printed 65536 times)
It may not be reading back at all, because it sure keeps trying.
This is SPICONT1, the only purpose this many reads could accomplish is checking if an exchange is in progress.
Fixed:
XCH bit was not being cleared

File diff suppressed because it is too large Load Diff

View File

@@ -586,6 +586,16 @@ void sandboxOnOpcodeRun(void){
}
bool sandboxRunning(void){
uint32_t pc = m68k_get_reg(NULL, M68K_REG_PC);
//this is used to capture full logs from certain sections of the ROM
/*
if(pc >= 0x100A07DC && pc <= 0x100ADB3C){
//the SD slot driver
return true;
}
*/
return sandboxActive;
}

View File

@@ -265,7 +265,7 @@ static void checkPortDInterrupts(void){
checkInterrupts();
}
void printUnknownHwAccess(uint32_t address, uint32_t value, uint32_t size, bool isWrite){
static void printHwRegAccess(uint32_t address, uint32_t value, uint32_t size, bool isWrite){
if(isWrite)
debugLog("CPU wrote %d bits of 0x%08X to register 0x%03X, PC:0x%08X.\n", size, value, address, flx68000GetPc());
else
@@ -283,7 +283,7 @@ uint8_t getHwRegister8(uint32_t address){
address &= 0x00000FFF;
if(sandboxRunning() && address < 0xE00)
printUnknownHwAccess(address, 0, 8, false);
printHwRegAccess(address, 0, 8, false);
switch(address){
case PADATA:
@@ -380,7 +380,8 @@ uint8_t getHwRegister8(uint32_t address){
if(address >= 0xE00)
return registerArrayRead8(address);
printUnknownHwAccess(address, 0, 8, false);
if(!sandboxRunning())//dont double unknown accesses when sandbox is active
printHwRegAccess(address, 0, 8, false);
return 0x00;
}
}
@@ -396,7 +397,7 @@ uint16_t getHwRegister16(uint32_t address){
address &= 0x00000FFF;
if(sandboxRunning() && address < 0xE00)
printUnknownHwAccess(address, 0, 16, false);
printHwRegAccess(address, 0, 16, false);
switch(address){
case TSTAT1:
@@ -472,7 +473,8 @@ uint16_t getHwRegister16(uint32_t address){
if(address >= 0xE00)
return registerArrayRead16(address);
printUnknownHwAccess(address, 0, 16, false);
if(!sandboxRunning())//dont double unknown accesses when sandbox is active
printHwRegAccess(address, 0, 16, false);
return 0x0000;
}
}
@@ -488,7 +490,7 @@ uint32_t getHwRegister32(uint32_t address){
address &= 0x00000FFF;
if(sandboxRunning() && address < 0xE00)
printUnknownHwAccess(address, 0, 32, false);
printHwRegAccess(address, 0, 32, false);
switch(address){
case ISR:
@@ -504,7 +506,8 @@ uint32_t getHwRegister32(uint32_t address){
if(address >= 0xE00)
return registerArrayRead32(address);
printUnknownHwAccess(address, 0, 32, false);
if(!sandboxRunning())//dont double unknown accesses when sandbox is active
printHwRegAccess(address, 0, 32, false);
return 0x00000000;
}
}
@@ -520,7 +523,7 @@ void setHwRegister8(uint32_t address, uint8_t value){
address &= 0x00000FFF;
if(sandboxRunning() && address < 0xE00)
printUnknownHwAccess(address, value, 8, true);
printHwRegAccess(address, value, 8, true);
switch(address){
case SCR:
@@ -673,7 +676,8 @@ void setHwRegister8(uint32_t address, uint8_t value){
return;
}
printUnknownHwAccess(address, value, 8, true);
if(!sandboxRunning())//dont double unknown accesses when sandbox is active
printHwRegAccess(address, value, 8, true);
return;
}
}
@@ -689,7 +693,7 @@ void setHwRegister16(uint32_t address, uint16_t value){
address &= 0x00000FFF;
if(sandboxRunning() && address < 0xE00)
printUnknownHwAccess(address, value, 16, true);
printHwRegAccess(address, value, 16, true);
switch(address){
case RTCIENR:
@@ -967,7 +971,8 @@ void setHwRegister16(uint32_t address, uint16_t value){
return;
}
printUnknownHwAccess(address, value, 16, true);
if(!sandboxRunning())//dont double unknown accesses when sandbox is active
printHwRegAccess(address, value, 16, true);
return;
}
}
@@ -983,7 +988,7 @@ void setHwRegister32(uint32_t address, uint32_t value){
address &= 0x00000FFF;
if(sandboxRunning() && address < 0xE00)
printUnknownHwAccess(address, value, 32, true);
printHwRegAccess(address, value, 32, true);
switch(address){
case RTCTIME:
@@ -1018,7 +1023,8 @@ void setHwRegister32(uint32_t address, uint32_t value){
return;
}
printUnknownHwAccess(address, value, 32, true);
if(!sandboxRunning())//dont double unknown accesses when sandbox is active
printHwRegAccess(address, value, 32, true);
return;
}
}

View File

@@ -399,6 +399,9 @@ static void setSpiCont1(uint16_t value){
//update SPIINTCS interrupt bits
setSpiIntCs(registerArrayRead16(SPIINTCS));
//unset XCH, transfers are instant since timing is not emulated
value &= 0xFEFF;
//debugLog("Transfer complete, SPIINTCS:0x%04X\n", registerArrayRead16(SPIINTCS));
registerArrayWrite16(SPICONT1, value);

View File

@@ -167,7 +167,7 @@ bool sdCardExchangeBit(bool bit){
uint32_t argument = palmSdCard.command >> 8 & 0xFFFFFFFF;
uint8_t crc = palmSdCard.command >> 1 & 0x7F;
debugLog("SD command:cmd:0x%02X, arg:0x%08X, CRC:0x%02X\n", command, argument, crc);
debugLog("SD command:cmd:%d, arg:0x%08X, CRC:0x%02X\n", command, argument, crc);
if(palmSdCard.allowInvalidCrc || sdCardCmdIsCrcValid(command, argument, crc)){
//respond with command value
@@ -180,7 +180,7 @@ bool sdCardExchangeBit(bool bit){
break;
default:
debugLog("SD unknown command:cmd:0x%02X, arg:0x%08X, CRC:0x%02X\n", command, argument, crc);
debugLog("SD unknown command:cmd:%d, arg:0x%08X, CRC:0x%02X\n", command, argument, crc);
break;
}
}