diff --git a/include/mgba/internal/gb/gb.h b/include/mgba/internal/gb/gb.h index 5359176ac..08068ec58 100644 --- a/include/mgba/internal/gb/gb.h +++ b/include/mgba/internal/gb/gb.h @@ -27,7 +27,6 @@ extern const uint32_t SGB_SM83_FREQUENCY; mLOG_DECLARE_CATEGORY(GB); -// TODO: Prefix GBAIRQ enum GBIRQ { GB_IRQ_VBLANK = 0x0, GB_IRQ_LCDSTAT = 0x1, diff --git a/include/mgba/internal/gba/gba.h b/include/mgba/internal/gba/gba.h index 2563b96b3..206aedf70 100644 --- a/include/mgba/internal/gba/gba.h +++ b/include/mgba/internal/gba/gba.h @@ -22,20 +22,20 @@ CXX_GUARD_START #define GBA_ARM7TDMI_FREQUENCY 0x1000000U enum GBAIRQ { - IRQ_VBLANK = 0x0, - IRQ_HBLANK = 0x1, - IRQ_VCOUNTER = 0x2, - IRQ_TIMER0 = 0x3, - IRQ_TIMER1 = 0x4, - IRQ_TIMER2 = 0x5, - IRQ_TIMER3 = 0x6, - IRQ_SIO = 0x7, - IRQ_DMA0 = 0x8, - IRQ_DMA1 = 0x9, - IRQ_DMA2 = 0xA, - IRQ_DMA3 = 0xB, - IRQ_KEYPAD = 0xC, - IRQ_GAMEPAK = 0xD + GBA_IRQ_VBLANK = 0x0, + GBA_IRQ_HBLANK = 0x1, + GBA_IRQ_VCOUNTER = 0x2, + GBA_IRQ_TIMER0 = 0x3, + GBA_IRQ_TIMER1 = 0x4, + GBA_IRQ_TIMER2 = 0x5, + GBA_IRQ_TIMER3 = 0x6, + GBA_IRQ_SIO = 0x7, + GBA_IRQ_DMA0 = 0x8, + GBA_IRQ_DMA1 = 0x9, + GBA_IRQ_DMA2 = 0xA, + GBA_IRQ_DMA3 = 0xB, + GBA_IRQ_KEYPAD = 0xC, + GBA_IRQ_GAMEPAK = 0xD }; enum GBAIdleLoopOptimization { @@ -45,9 +45,9 @@ enum GBAIdleLoopOptimization { }; enum { - SP_BASE_SYSTEM = 0x03007F00, - SP_BASE_IRQ = 0x03007FA0, - SP_BASE_SUPERVISOR = 0x03007FE0 + GBA_SP_BASE_SYSTEM = 0x03007F00, + GBA_SP_BASE_IRQ = 0x03007FA0, + GBA_SP_BASE_SUPERVISOR = 0x03007FE0 }; struct ARMCore; diff --git a/src/gba/bios.c b/src/gba/bios.c index 6dec13d86..d824830aa 100644 --- a/src/gba/bios.c +++ b/src/gba/bios.c @@ -40,14 +40,14 @@ static void _SoftReset(struct GBA* gba) { ARMSetPrivilegeMode(cpu, MODE_IRQ); cpu->spsr.packed = 0; cpu->gprs[ARM_LR] = 0; - cpu->gprs[ARM_SP] = SP_BASE_IRQ; + cpu->gprs[ARM_SP] = GBA_SP_BASE_IRQ; ARMSetPrivilegeMode(cpu, MODE_SUPERVISOR); cpu->spsr.packed = 0; cpu->gprs[ARM_LR] = 0; - cpu->gprs[ARM_SP] = SP_BASE_SUPERVISOR; + cpu->gprs[ARM_SP] = GBA_SP_BASE_SUPERVISOR; ARMSetPrivilegeMode(cpu, MODE_SYSTEM); cpu->gprs[ARM_LR] = 0; - cpu->gprs[ARM_SP] = SP_BASE_SYSTEM; + cpu->gprs[ARM_SP] = GBA_SP_BASE_SYSTEM; int8_t flag = ((int8_t*) gba->memory.iwram)[0x7FFA]; memset(((int8_t*) gba->memory.iwram) + SIZE_WORKING_IRAM - 0x200, 0, 0x200); if (flag) { diff --git a/src/gba/cart/ereader.c b/src/gba/cart/ereader.c index 86085c86b..030e0d183 100644 --- a/src/gba/cart/ereader.c +++ b/src/gba/cart/ereader.c @@ -718,7 +718,7 @@ void _eReaderReadData(struct GBACartEReader* ereader) { if (led > 0x4000) { led = 0x4000; } - GBARaiseIRQ(ereader->p, IRQ_GAMEPAK, -led); + GBARaiseIRQ(ereader->p, GBA_IRQ_GAMEPAK, -led); } } diff --git a/src/gba/dma.c b/src/gba/dma.c index 759140da6..14b9fb777 100644 --- a/src/gba/dma.c +++ b/src/gba/dma.c @@ -208,7 +208,7 @@ void _dmaEvent(struct mTiming* timing, void* context, uint32_t cyclesLate) { dma->nextDest = dma->dest; } if (GBADMARegisterIsDoIRQ(dma->reg)) { - GBARaiseIRQ(gba, IRQ_DMA0 + memory->activeDMA, cyclesLate); + GBARaiseIRQ(gba, GBA_IRQ_DMA0 + memory->activeDMA, cyclesLate); } GBADMAUpdate(gba); } diff --git a/src/gba/extra/battlechip.c b/src/gba/extra/battlechip.c index ae8aedff0..e87343727 100644 --- a/src/gba/extra/battlechip.c +++ b/src/gba/extra/battlechip.c @@ -102,7 +102,7 @@ void _battlechipTransferEvent(struct mTiming* timing, void* user, uint32_t cycle gate->d.p->p->memory.io[REG_SIODATA32_HI >> 1] = 0; gate->d.p->siocnt = GBASIONormalClearStart(gate->d.p->siocnt); if (GBASIONormalIsIrq(gate->d.p->siocnt)) { - GBARaiseIRQ(gate->d.p->p, IRQ_SIO, cyclesLate); + GBARaiseIRQ(gate->d.p->p, GBA_IRQ_SIO, cyclesLate); } return; } @@ -194,6 +194,6 @@ void _battlechipTransferEvent(struct mTiming* timing, void* user, uint32_t cycle gate->d.p->p->memory.io[REG_SIOMULTI1 >> 1] = reply; if (GBASIOMultiplayerIsIrq(gate->d.p->siocnt)) { - GBARaiseIRQ(gate->d.p->p, IRQ_SIO, cyclesLate); + GBARaiseIRQ(gate->d.p->p, GBA_IRQ_SIO, cyclesLate); } } diff --git a/src/gba/gba.c b/src/gba/gba.c index 9714d2c51..de79671c5 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -198,11 +198,11 @@ void GBAInterruptHandlerInit(struct ARMInterruptHandler* irqh) { void GBAReset(struct ARMCore* cpu) { ARMSetPrivilegeMode(cpu, MODE_IRQ); - cpu->gprs[ARM_SP] = SP_BASE_IRQ; + cpu->gprs[ARM_SP] = GBA_SP_BASE_IRQ; ARMSetPrivilegeMode(cpu, MODE_SUPERVISOR); - cpu->gprs[ARM_SP] = SP_BASE_SUPERVISOR; + cpu->gprs[ARM_SP] = GBA_SP_BASE_SUPERVISOR; ARMSetPrivilegeMode(cpu, MODE_SYSTEM); - cpu->gprs[ARM_SP] = SP_BASE_SYSTEM; + cpu->gprs[ARM_SP] = GBA_SP_BASE_SYSTEM; struct GBA* gba = (struct GBA*) cpu->master; gba->memory.savedata.maskWriteback = false; @@ -465,7 +465,7 @@ void GBAYankROM(struct GBA* gba) { gba->yankedRomSize = gba->memory.romSize; gba->memory.romSize = 0; gba->memory.romMask = 0; - GBARaiseIRQ(gba, IRQ_GAMEPAK, 0); + GBARaiseIRQ(gba, GBA_IRQ_GAMEPAK, 0); } void GBALoadBIOS(struct GBA* gba, struct VFile* vf) { @@ -554,7 +554,7 @@ void GBAHalt(struct GBA* gba) { } void GBAStop(struct GBA* gba) { - int validIrqs = (1 << IRQ_GAMEPAK) | (1 << IRQ_KEYPAD) | (1 << IRQ_SIO); + int validIrqs = (1 << GBA_IRQ_GAMEPAK) | (1 << GBA_IRQ_KEYPAD) | (1 << GBA_IRQ_SIO); int sleep = gba->memory.io[REG_IE >> 1] & validIrqs; size_t c; for (c = 0; c < mCoreCallbacksListSize(&gba->coreCallbacks); ++c) { @@ -921,9 +921,9 @@ void GBATestKeypadIRQ(struct GBA* gba) { if (keysLast == keysActive) { return; } - GBARaiseIRQ(gba, IRQ_KEYPAD, 0); + GBARaiseIRQ(gba, GBA_IRQ_KEYPAD, 0); } else if (!isAnd && (keysActive & keycnt)) { - GBARaiseIRQ(gba, IRQ_KEYPAD, 0); + GBARaiseIRQ(gba, GBA_IRQ_KEYPAD, 0); } else { gba->keysLast = 0x400; } diff --git a/src/gba/sio.c b/src/gba/sio.c index 8feaeb624..d4df7e8da 100644 --- a/src/gba/sio.c +++ b/src/gba/sio.c @@ -188,7 +188,7 @@ void GBASIOWriteSIOCNT(struct GBASIO* sio, uint16_t value) { if ((value & 0x0081) == 0x0081) { if (value & 0x4000) { // TODO: Test this on hardware to see if this is correct - GBARaiseIRQ(sio->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p, GBA_IRQ_SIO, 0); } value &= ~0x0080; } diff --git a/src/gba/sio/gbp.c b/src/gba/sio/gbp.c index 9faf99e35..41b2f1f00 100644 --- a/src/gba/sio/gbp.c +++ b/src/gba/sio/gbp.c @@ -141,7 +141,7 @@ void _gbpSioProcessEvents(struct mTiming* timing, void* user, uint32_t cyclesLat gbp->p->memory.io[REG_SIODATA32_LO >> 1] = tx; gbp->p->memory.io[REG_SIODATA32_HI >> 1] = tx >> 16; if (GBASIONormalIsIrq(gbp->d.p->siocnt)) { - GBARaiseIRQ(gbp->p, IRQ_SIO, cyclesLate); + GBARaiseIRQ(gbp->p, GBA_IRQ_SIO, cyclesLate); } gbp->d.p->siocnt = GBASIONormalClearStart(gbp->d.p->siocnt); gbp->p->memory.io[REG_SIOCNT >> 1] = gbp->d.p->siocnt & ~0x0080; diff --git a/src/gba/sio/joybus.c b/src/gba/sio/joybus.c index 6cfca878f..3cb39b1e3 100644 --- a/src/gba/sio/joybus.c +++ b/src/gba/sio/joybus.c @@ -46,7 +46,7 @@ int GBASIOJOYSendCommand(struct GBASIODriver* sio, enum GBASIOJOYCommand command case JOY_RESET: sio->p->p->memory.io[REG_JOYCNT >> 1] |= JOYCNT_RESET; if (sio->p->p->memory.io[REG_JOYCNT >> 1] & 0x40) { - GBARaiseIRQ(sio->p->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p->p, GBA_IRQ_SIO, 0); } // Fall through case JOY_POLL: @@ -68,7 +68,7 @@ int GBASIOJOYSendCommand(struct GBASIODriver* sio, enum GBASIOJOYCommand command mLOG(GBA_SIO, DEBUG, "JOY recv: %02X (%02X)", data[0], sio->p->p->memory.io[REG_JOYCNT >> 1]); if (sio->p->p->memory.io[REG_JOYCNT >> 1] & 0x40) { - GBARaiseIRQ(sio->p->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p->p, GBA_IRQ_SIO, 0); } return 1; case JOY_TRANS: @@ -84,7 +84,7 @@ int GBASIOJOYSendCommand(struct GBASIODriver* sio, enum GBASIOJOYCommand command mLOG(GBA_SIO, DEBUG, "JOY trans: %02X%02X%02X%02X:%02X (%02X)", data[0], data[1], data[2], data[3], data[4], sio->p->p->memory.io[REG_JOYCNT >> 1]); if (sio->p->p->memory.io[REG_JOYCNT >> 1] & 0x40) { - GBARaiseIRQ(sio->p->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p->p, GBA_IRQ_SIO, 0); } return 5; } diff --git a/src/gba/sio/lockstep.c b/src/gba/sio/lockstep.c index 8438b2b8e..bc5a5fd33 100644 --- a/src/gba/sio/lockstep.c +++ b/src/gba/sio/lockstep.c @@ -230,7 +230,7 @@ static void _finishTransfer(struct GBASIOLockstepNode* node) { sio->siocnt = GBASIOMultiplayerClearBusy(sio->siocnt); sio->siocnt = GBASIOMultiplayerSetId(sio->siocnt, node->id); if (GBASIOMultiplayerIsIrq(sio->siocnt)) { - GBARaiseIRQ(sio->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p, GBA_IRQ_SIO, 0); } break; case SIO_NORMAL_8: @@ -243,7 +243,7 @@ static void _finishTransfer(struct GBASIOLockstepNode* node) { node->d.p->p->memory.io[REG_SIODATA8 >> 1] = 0xFFFF; } if (GBASIONormalIsIrq(sio->siocnt)) { - GBARaiseIRQ(sio->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p, GBA_IRQ_SIO, 0); } break; case SIO_NORMAL_32: @@ -258,7 +258,7 @@ static void _finishTransfer(struct GBASIOLockstepNode* node) { node->d.p->p->memory.io[REG_SIODATA32_HI >> 1] = 0xFFFF; } if (GBASIONormalIsIrq(sio->siocnt)) { - GBARaiseIRQ(sio->p, IRQ_SIO, 0); + GBARaiseIRQ(sio->p, GBA_IRQ_SIO, 0); } break; default: diff --git a/src/gba/timer.c b/src/gba/timer.c index ce43a1a3e..8a3a3e8f6 100644 --- a/src/gba/timer.c +++ b/src/gba/timer.c @@ -19,7 +19,7 @@ static void GBATimerUpdate(struct GBA* gba, int timerId, uint32_t cyclesLate) { } if (GBATimerFlagsIsDoIrq(timer->flags)) { - GBARaiseIRQ(gba, IRQ_TIMER0 + timerId, cyclesLate); + GBARaiseIRQ(gba, GBA_IRQ_TIMER0 + timerId, cyclesLate); } if (gba->audio.enable && timerId < 2) { diff --git a/src/gba/video.c b/src/gba/video.c index 57099a8c3..659313575 100644 --- a/src/gba/video.c +++ b/src/gba/video.c @@ -157,7 +157,7 @@ void _startHdraw(struct mTiming* timing, void* context, uint32_t cyclesLate) { if (video->vcount == GBARegisterDISPSTATGetVcountSetting(dispstat)) { dispstat = GBARegisterDISPSTATFillVcounter(dispstat); if (GBARegisterDISPSTATIsVcounterIRQ(dispstat)) { - GBARaiseIRQ(video->p, IRQ_VCOUNTER, cyclesLate); + GBARaiseIRQ(video->p, GBA_IRQ_VCOUNTER, cyclesLate); } } else { dispstat = GBARegisterDISPSTATClearVcounter(dispstat); @@ -176,7 +176,7 @@ void _startHdraw(struct mTiming* timing, void* context, uint32_t cyclesLate) { } GBADMARunVblank(video->p, -cyclesLate); if (GBARegisterDISPSTATIsVblankIRQ(dispstat)) { - GBARaiseIRQ(video->p, IRQ_VBLANK, cyclesLate); + GBARaiseIRQ(video->p, GBA_IRQ_VBLANK, cyclesLate); } GBAFrameEnded(video->p); mCoreSyncPostFrame(video->p->sync); @@ -212,7 +212,7 @@ void _startHblank(struct mTiming* timing, void* context, uint32_t cyclesLate) { GBADMARunDisplayStart(video->p, -cyclesLate); } if (GBARegisterDISPSTATIsHblankIRQ(dispstat)) { - GBARaiseIRQ(video->p, IRQ_HBLANK, cyclesLate - 6); // TODO: Where does this fudge factor come from? + GBARaiseIRQ(video->p, GBA_IRQ_HBLANK, cyclesLate - 6); // TODO: Where does this fudge factor come from? } video->shouldStall = 0; video->p->memory.io[REG_DISPSTAT >> 1] = dispstat;