mirror of https://github.com/mgba-emu/mgba.git
GBA: Only unhalt CPU if appropriate bit is set in IE
This commit is contained in:
parent
3415484d9d
commit
85367c3713
2
CHANGES
2
CHANGES
|
@ -33,7 +33,7 @@ Bugfixes:
|
||||||
- GBA BIOS: Implement BitUnPack
|
- GBA BIOS: Implement BitUnPack
|
||||||
- GBA: Add savegame override for Crash Bandicoot 2
|
- GBA: Add savegame override for Crash Bandicoot 2
|
||||||
- ARM7: PSR mode bits should not get sign extended
|
- ARM7: PSR mode bits should not get sign extended
|
||||||
- GBA: Only unhalt CPU if an IRQ actually fires
|
- GBA: Only unhalt CPU if appropriate bit is set in IE
|
||||||
- GBA Video: Fix out of bounds sprite transforms
|
- GBA Video: Fix out of bounds sprite transforms
|
||||||
Misc:
|
Misc:
|
||||||
- SDL: Remove scancode key input
|
- SDL: Remove scancode key input
|
||||||
|
|
|
@ -147,7 +147,6 @@ void ARMReset(struct ARMCore* cpu) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARMRaiseIRQ(struct ARMCore* cpu) {
|
void ARMRaiseIRQ(struct ARMCore* cpu) {
|
||||||
cpu->halted = 0;
|
|
||||||
if (cpu->cpsr.i) {
|
if (cpu->cpsr.i) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -665,8 +665,11 @@ void GBAWriteIME(struct GBA* gba, uint16_t value) {
|
||||||
void GBARaiseIRQ(struct GBA* gba, enum GBAIRQ irq) {
|
void GBARaiseIRQ(struct GBA* gba, enum GBAIRQ irq) {
|
||||||
gba->memory.io[REG_IF >> 1] |= 1 << irq;
|
gba->memory.io[REG_IF >> 1] |= 1 << irq;
|
||||||
|
|
||||||
if (gba->memory.io[REG_IME >> 1] && (gba->memory.io[REG_IE >> 1] & 1 << irq)) {
|
if (gba->memory.io[REG_IE >> 1] & 1 << irq) {
|
||||||
ARMRaiseIRQ(gba->cpu);
|
gba->cpu->halted = 0;
|
||||||
|
if (gba->memory.io[REG_IME >> 1]) {
|
||||||
|
ARMRaiseIRQ(gba->cpu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue