diff --git a/include/arm11/interrupt.h b/include/arm11/interrupt.h index 44ff372..251ba55 100644 --- a/include/arm11/interrupt.h +++ b/include/arm11/interrupt.h @@ -36,7 +36,7 @@ IRQ_TOUCHSCREEN = 99, // Triggers on hitting the touchscreen. IRQ_HEADPH_JACK = 100, // Headphone jack. Triggers on both plugging in and out? GPIO reg 9, bit 8. IRQ_MCU_HID = 113, // HOME/POWER pressed/released or shell opened/closed. GPIO reg 19, bit 9. - IRQ_GCRD_INSERTED = 117 // Gamecard inserted + IRQ_GAMECARD = 117 // Gamecard inserted } Interrupt; diff --git a/source/arm11/exception.s b/source/arm11/exception.s index e3525a7..970a548 100644 --- a/source/arm11/exception.s +++ b/source/arm11/exception.s @@ -33,11 +33,12 @@ ldr r1, [r0, #0x10C] @ REG_CPU_II_AKN str r1, [r0, #0x110] @ REG_CPU_II_EOI and r0, r1, #0x7F - cmp r0, #16 + cmp r0, #32 ldrlo r2, =privIrqHandlerTable - addlo r2, r2, r1, lsr #8 + lsrlo r1, r1, #10 + addlo r2, r2, r1, lsl #7 ldrhs r2, =irqHandlerTable - subhs r0, r0, #16 + subhs r0, r0, #32 ldr r3, [r2, r0, lsl #2] cmp r3, #0 beq irqHandler_skip_processing diff --git a/source/arm11/interrupt.c b/source/arm11/interrupt.c index 74e3bb4..7ca6d77 100644 --- a/source/arm11/interrupt.c +++ b/source/arm11/interrupt.c @@ -38,8 +38,8 @@ #define REG_GID_PRIME_CELL3 *((vu32*)(GID_REGS_BASE + 0xFFC)) -void (*privIrqHandlerTable[4][16])(void) = {0}; // Table for private MPCore interrupts -void (*irqHandlerTable[112])(void) = {0}; // There are 96 external interrupts (total 128) +void (*privIrqHandlerTable[4][32])(void) = {0}; // Table for private MPCore interrupts +void (*irqHandlerTable[96])(void) = {0}; // There are 96 external interrupts (total 128) @@ -119,8 +119,8 @@ if(irqHandler) { - if(id < 16) privIrqHandlerTable[cpuId][id] = irqHandler; - else irqHandlerTable[id - 16] = irqHandler; + if(id < 32) privIrqHandlerTable[cpuId][id] = irqHandler; + else irqHandlerTable[id - 32] = irqHandler; } u32 shift = (id % 4 * 8) + 4; @@ -146,8 +146,8 @@ REGs_GID_ENA_CLR[id>>5] = 1u<<(id % 32); - if(id < 16) privIrqHandlerTable[getCpuId()][id] = (void (*)(void))NULL; - else irqHandlerTable[id - 16] = (void (*)(void))NULL; + if(id < 32) privIrqHandlerTable[getCpuId()][id] = (void (*)(void))NULL; + else irqHandlerTable[id - 32] = (void (*)(void))NULL; leaveCriticalSection(); }