diff options
| author | spicyjpeg <thatspicyjpeg@gmail.com> | 2022-08-21 10:55:33 +0200 |
|---|---|---|
| committer | spicyjpeg <thatspicyjpeg@gmail.com> | 2022-08-21 10:55:33 +0200 |
| commit | c845878cb43da4f7470914a064109db2270fd7e6 (patch) | |
| tree | 0e3c917f59b4b57c36609cc1d8f0e289a5d77f79 /libpsn00b/psxetc | |
| parent | ec3ed1574dac08b1c07a8126f6090adce0e7efb8 (diff) | |
| download | psn00bsdk-c845878cb43da4f7470914a064109db2270fd7e6.tar.gz | |
Fix psxgpu and psxetc bugs, add VSyncHaltFunction()
Diffstat (limited to 'libpsn00b/psxetc')
| -rw-r--r-- | libpsn00b/psxetc/interrupts.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/libpsn00b/psxetc/interrupts.c b/libpsn00b/psxetc/interrupts.c index e5c4705..32e91f0 100644 --- a/libpsn00b/psxetc/interrupts.c +++ b/libpsn00b/psxetc/interrupts.c @@ -14,8 +14,8 @@ /* Internal globals */ -static void (*_irq_handlers[NUM_IRQ_CHANNELS])(void) = { (void *) 0 }; -static void (*_dma_handlers[NUM_DMA_CHANNELS])(void) = { (void *) 0 }; +static void (*_irq_handlers[NUM_IRQ_CHANNELS])(void); +static void (*_dma_handlers[NUM_DMA_CHANNELS])(void); static int _num_dma_handlers = 0; static uint32_t _saved_irq_mask, _saved_dma_dpcr, _saved_dma_dicr; @@ -156,10 +156,20 @@ int ResetCallback(void) { if (_isr_installed) return -1; - _saved_irq_mask = 0; + EnterCriticalSection(); + _saved_irq_mask = 1 << 3; // Enable DMA IRQ by default _saved_dma_dpcr = 0x03333333; _saved_dma_dicr = 0; + for (int i = 0; i < NUM_IRQ_CHANNELS; i++) + _irq_handlers[i] = (void *) 0; + for (int i = 0; i < NUM_DMA_CHANNELS; i++) + _dma_handlers[i] = (void *) 0; + + // Set up the DMA IRQ handler. This handler shall *not* be overridden using + // InterruptCallback(). + _irq_handlers[3] = &_global_dma_handler; + _96_remove(); RestartCallback(); return 0; |
