static unsigned int MyCheckPc(unsigned int pc) {
WriteLog("MyCheckPC %u\n",pc);
WriteLog("S) Offset: %u, PC: %u\n",MyCyclone.membase,pc);
pc-=MyCyclone.membase; // Get the real program counter
switch((pc&0xF00000)>>20) {
// 0x000000 - 0x1FFFFF point should be in system ram
case 0x0:
case 0x1:
MyCyclone.membase=(int)jaguar_mainRam;
break;
// 0x200000 - 0x3FFFFF - shadow ram, so point to system using offset
case 0x2:
case 0x3:
MyCyclone.membase=(int)jaguar_mainRam-0x200000;
break;
case 0x8:
case 0x9:
case 0xA:
case 0xB:
case 0xC:
case 0
:
MyCyclone.membase=(int)jaguar_mainRom-0x800000;
break;
// I'm assuming bios is the same as Boot rom, could be wrong
case 0xE:
MyCyclone.membase=(int)jaguar_bootRom-0xE00000;
break;
// anything else? just point it at ram
default:
MyCyclone.membase=(int)jaguar_mainRam-(pc&0xF00000);
break;
}
WriteLog("E) Offset: %u, PC: %u\n",MyCyclone.membase,pc);
return MyCyclone.membase+pc; // New program counter
}