diff options
| author | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-06-23 07:42:16 +0800 |
|---|---|---|
| committer | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-06-23 07:42:16 +0800 |
| commit | 7be9178c0f9b0e698a305ecc5c0c41fcc596a4fc (patch) | |
| tree | e98c627e1da5c764563774b89b0c06d7ac5ad0a4 /libpsn00b/psxgpu/interruptcallback.s | |
| parent | ae9e545c3ed33d39ce21ae13ceb8337fa34901b8 (diff) | |
| download | psn00bsdk-7be9178c0f9b0e698a305ecc5c0c41fcc596a4fc.tar.gz | |
LibPSn00b officially v0.10b, added psxsio library, better DrawSync() and VSync(), better reference manual.
Diffstat (limited to 'libpsn00b/psxgpu/interruptcallback.s')
| -rw-r--r-- | libpsn00b/psxgpu/interruptcallback.s | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libpsn00b/psxgpu/interruptcallback.s b/libpsn00b/psxgpu/interruptcallback.s new file mode 100644 index 0000000..8e912d8 --- /dev/null +++ b/libpsn00b/psxgpu/interruptcallback.s @@ -0,0 +1,48 @@ +.set noreorder + +.include "hwregs_a.h" + +.section .text + +.global InterruptCallback +.type InterruptCallback, @function +InterruptCallback: + + # a0 - Interrupt number + # a1 - Callback function + + lui $a2, IOBASE + + beqz $a1, .Ldisable_irq + nop + + lw $v0, IMASK($a2) # Enable interrupt mask + li $v1, 1 + sll $v1, $a0 + or $v0, $v1 + + b .Lcont + sw $v0, IMASK($a2) + +.Ldisable_irq: + +.set noat + lw $v0, IMASK($a2) # Disable interrupt mask + li $v1, 1 + sll $v1, $a0 + addiu $at, $0 , -1 + xor $v1, $at +.set at + and $v0, $v1 + sw $v0, IMASK($a2) + +.Lcont: + + la $a2, _irq_func_table # Get address to IRQ function table + + sll $v1, $a0, 2 # Compute the slot + addu $v1, $a2, $v1 + lw $v0, 0($v1) # Get old handler address + + jr $ra # Return and set new IRQ handler + sw $a1, 0($v1) |
