mirror of
https://github.com/libretro/Mu.git
synced 2026-09-23 07:05:37 +00:00
Fix some invalid behavior with IMR, still have the power button issue
This commit is contained in:
@@ -106,5 +106,8 @@ I understand not everyone speaks English so I list both ROMs, I do all my testin
|
||||
## License
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc/3.0/us/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/us/">Creative Commons Attribution-NonCommercial 3.0 United States License</a>.
|
||||
|
||||
## Links
|
||||
[Discord](https://discord.gg/hWSz8VN)
|
||||
|
||||
## Also see Mu's sister project
|
||||
[🐿SquirrelJME](https://multiphasicapps.net)
|
||||
|
||||
@@ -118,11 +118,11 @@ void setWriteProtectViolation(uint32_t address){
|
||||
}
|
||||
|
||||
static void pllWakeCpuIfOff(void){
|
||||
if(!pllIsOn() && pllWakeWait == -1){
|
||||
//PLL is off and not already in the process of waking up
|
||||
int8_t pllWaitTable[4] = {32, 48, 64, 96};
|
||||
const int8_t pllWaitTable[4] = {32, 48, 64, 96};
|
||||
|
||||
//PLL is off and not already in the process of waking up
|
||||
if(!pllIsOn() && pllWakeWait == -1)
|
||||
pllWakeWait = pllWaitTable[registerArrayRead16(PLLCR) & 0x0003];
|
||||
}
|
||||
}
|
||||
|
||||
static void checkInterrupts(void){
|
||||
@@ -728,14 +728,16 @@ void setHwRegister16(uint32_t address, uint16_t value){
|
||||
break;
|
||||
|
||||
case IMR:
|
||||
//this is a 32 bit register but Palm OS writes it as 16 bit chunks
|
||||
//this is a 32 bit register but Palm OS writes to it as 16 bit chunks
|
||||
registerArrayWrite16(IMR, value & 0x00FF);
|
||||
registerArrayWrite16(ISR, registerArrayRead16(IPR) & registerArrayRead16(IMR));
|
||||
checkInterrupts();
|
||||
break;
|
||||
case IMR + 2:
|
||||
//this is a 32 bit register but Palm OS writes it as 16 bit chunks
|
||||
registerArrayWrite16(IMR + 2, value & 0x03FF);
|
||||
//this is a 32 bit register but Palm OS writes to it as 16 bit chunks
|
||||
registerArrayWrite16(IMR + 2, value & 0x3FFF);
|
||||
registerArrayWrite16(ISR + 2, registerArrayRead16(IPR + 2) & registerArrayRead16(IMR + 2));
|
||||
checkInterrupts();
|
||||
break;
|
||||
|
||||
case ISR:
|
||||
@@ -1006,6 +1008,7 @@ void setHwRegister32(uint32_t address, uint32_t value){
|
||||
case IMR:
|
||||
registerArrayWrite32(IMR, value & 0x00FF3FFF);
|
||||
registerArrayWrite32(ISR, registerArrayRead32(IPR) & registerArrayRead32(IMR));
|
||||
checkInterrupts();
|
||||
break;
|
||||
|
||||
case LSSA:
|
||||
|
||||
@@ -264,8 +264,9 @@ static void updateCsdAddressLines(void){
|
||||
|
||||
static void setPllfsr(uint16_t value){
|
||||
uint16_t oldPllfsr = registerArrayRead16(PLLFSR);
|
||||
|
||||
//change frequency if frequency protect bit isnt set
|
||||
if(!(oldPllfsr & 0x4000)){
|
||||
//frequency protect bit not set
|
||||
registerArrayWrite16(PLLFSR, (value & 0x4FFF) | (oldPllfsr & 0x8000));//preserve CLK32 bit
|
||||
palmSysclksPerClk32 = sysclksPerClk32();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user