Enable VBA linking
This commit is contained in:
parent
d399ef263f
commit
3fbb21a027
29
src/GBA.cpp
29
src/GBA.cpp
|
@ -71,6 +71,14 @@
|
||||||
|
|
||||||
|
|
||||||
extern int emulating;
|
extern int emulating;
|
||||||
|
extern int linktime;
|
||||||
|
extern void StartLink(u16);
|
||||||
|
extern void StartJOYLink(u16);
|
||||||
|
extern void StartGPLink(u16);
|
||||||
|
extern void LinkSSend(u16);
|
||||||
|
extern void LinkUpdate(int);
|
||||||
|
extern int linktime2;
|
||||||
|
|
||||||
int SWITicks = 0;
|
int SWITicks = 0;
|
||||||
int IRQTicks = 0;
|
int IRQTicks = 0;
|
||||||
|
|
||||||
|
@ -2979,7 +2987,8 @@ void CPUUpdateRegister(u32 address, u16 value)
|
||||||
cpuNextEvent = cpuTotalTicks;
|
cpuNextEvent = cpuTotalTicks;
|
||||||
break;
|
break;
|
||||||
case 0x128:
|
case 0x128:
|
||||||
if(value & 0x80) {
|
StartLink(value); // Link
|
||||||
|
/* if(value & 0x80) {
|
||||||
value &= 0xff7f;
|
value &= 0xff7f;
|
||||||
if(value & 1 && (value & 0x4000)) {
|
if(value & 1 && (value & 0x4000)) {
|
||||||
UPDATE_REG(0x12a, 0xFF);
|
UPDATE_REG(0x12a, 0xFF);
|
||||||
|
@ -2988,8 +2997,13 @@ void CPUUpdateRegister(u32 address, u16 value)
|
||||||
value &= 0x7f7f;
|
value &= 0x7f7f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UPDATE_REG(0x128, value);
|
UPDATE_REG(0x128, value); */
|
||||||
break;
|
break;
|
||||||
|
case 0x12a:
|
||||||
|
if(lspeed)
|
||||||
|
LinkSSend(value);
|
||||||
|
UPDATE_REG(0x12a, value);
|
||||||
|
break;
|
||||||
case 0x130:
|
case 0x130:
|
||||||
P1 |= (value & 0x3FF);
|
P1 |= (value & 0x3FF);
|
||||||
UPDATE_REG(0x130, P1);
|
UPDATE_REG(0x130, P1);
|
||||||
|
@ -2997,6 +3011,13 @@ void CPUUpdateRegister(u32 address, u16 value)
|
||||||
case 0x132:
|
case 0x132:
|
||||||
UPDATE_REG(0x132, value & 0xC3FF);
|
UPDATE_REG(0x132, value & 0xC3FF);
|
||||||
break;
|
break;
|
||||||
|
case 0x134:
|
||||||
|
StartGPLink(value);
|
||||||
|
break;
|
||||||
|
case 0x140:
|
||||||
|
StartJOYLink(value);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x200:
|
case 0x200:
|
||||||
IE = value & 0x3FFF;
|
IE = value & 0x3FFF;
|
||||||
UPDATE_REG(0x200, IE);
|
UPDATE_REG(0x200, IE);
|
||||||
|
@ -4288,6 +4309,10 @@ void CPULoop(int ticks)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ticks -= clockTicks;
|
ticks -= clockTicks;
|
||||||
|
/* Link
|
||||||
|
----------------------------------*/
|
||||||
|
LinkUpdate(clockTicks);
|
||||||
|
/* ----------------------------- */
|
||||||
|
|
||||||
cpuNextEvent = CPUUpdateTicks();
|
cpuNextEvent = CPUUpdateTicks();
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ extern bool cpuSramEnabled;
|
||||||
extern bool cpuFlashEnabled;
|
extern bool cpuFlashEnabled;
|
||||||
extern bool cpuEEPROMEnabled;
|
extern bool cpuEEPROMEnabled;
|
||||||
extern bool cpuEEPROMSensorEnabled;
|
extern bool cpuEEPROMSensorEnabled;
|
||||||
|
extern int lspeed;
|
||||||
|
extern void LinkSStop(void);
|
||||||
extern bool cpuDmaHack;
|
extern bool cpuDmaHack;
|
||||||
extern u32 cpuDmaLast;
|
extern u32 cpuDmaLast;
|
||||||
extern bool timer0On;
|
extern bool timer0On;
|
||||||
|
@ -90,6 +92,9 @@ static inline u32 CPUReadMemory(u32 address)
|
||||||
value = READ32LE(((u32 *)&internalRAM[address & 0x7ffC]));
|
value = READ32LE(((u32 *)&internalRAM[address & 0x7ffC]));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
if((address>=0x4000120||address<=0x4000126)&&lspeed)
|
||||||
|
LinkSStop();
|
||||||
|
|
||||||
if((address < 0x4000400) && ioReadable[address & 0x3fc]) {
|
if((address < 0x4000400) && ioReadable[address & 0x3fc]) {
|
||||||
if(ioReadable[(address & 0x3fc) + 2])
|
if(ioReadable[(address & 0x3fc) + 2])
|
||||||
value = READ32LE(((u32 *)&ioMem[address & 0x3fC]));
|
value = READ32LE(((u32 *)&ioMem[address & 0x3fC]));
|
||||||
|
@ -213,6 +218,9 @@ static inline u32 CPUReadHalfWord(u32 address)
|
||||||
value = READ16LE(((u16 *)&internalRAM[address & 0x7ffe]));
|
value = READ16LE(((u16 *)&internalRAM[address & 0x7ffe]));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
if((address>=0x4000120||address<=0x4000126)&&lspeed)
|
||||||
|
LinkSStop();
|
||||||
|
|
||||||
if((address < 0x4000400) && ioReadable[address & 0x3fe])
|
if((address < 0x4000400) && ioReadable[address & 0x3fe])
|
||||||
{
|
{
|
||||||
value = READ16LE(((u16 *)&ioMem[address & 0x3fe]));
|
value = READ16LE(((u16 *)&ioMem[address & 0x3fe]));
|
||||||
|
@ -326,6 +334,9 @@ static inline u8 CPUReadByte(u32 address)
|
||||||
case 3:
|
case 3:
|
||||||
return internalRAM[address & 0x7fff];
|
return internalRAM[address & 0x7fff];
|
||||||
case 4:
|
case 4:
|
||||||
|
if((address>=0x4000120||address<=0x4000126)&&lspeed)
|
||||||
|
LinkSStop();
|
||||||
|
|
||||||
if((address < 0x4000400) && ioReadable[address & 0x3ff])
|
if((address < 0x4000400) && ioReadable[address & 0x3ff])
|
||||||
return ioMem[address & 0x3ff];
|
return ioMem[address & 0x3ff];
|
||||||
else goto unreadable;
|
else goto unreadable;
|
||||||
|
|
Loading…
Reference in New Issue