mirror of
https://github.com/libretro/Mu.git
synced 2026-09-23 07:05:37 +00:00
SD card init step 1 now works, needed to unset the XCH bit
This commit is contained in:
12
bugs/sdCardImplementation/possibleCauses.txt
Normal file
12
bugs/sdCardImplementation/possibleCauses.txt
Normal 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
|
||||
1614
bugs/sdCardImplementation/sdCardFullAccessLogGood.txt
Normal file
1614
bugs/sdCardImplementation/sdCardFullAccessLogGood.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user