diff options
| author | lameguy64 <lameguy64@gmail.com> | 2019-05-23 22:24:56 +0800 |
|---|---|---|
| committer | lameguy64 <lameguy64@gmail.com> | 2019-05-23 22:24:56 +0800 |
| commit | 3ffebff2aad2ca438cf76db51fb3459c5639cd67 (patch) | |
| tree | a234fc6158d3c09904c4c1fb2feee09afb479a4c /libpsn00b/psxgpu/resetgraph.s | |
| parent | e70cd149f41ea71f9ca9ee86c03d1e59005dad2a (diff) | |
| download | psn00bsdk-3ffebff2aad2ca438cf76db51fb3459c5639cd67.tar.gz | |
Added BIOS Controller, BIOS CD, 2 new examples and custom exit handler in the works
Diffstat (limited to 'libpsn00b/psxgpu/resetgraph.s')
| -rw-r--r-- | libpsn00b/psxgpu/resetgraph.s | 81 |
1 files changed, 68 insertions, 13 deletions
diff --git a/libpsn00b/psxgpu/resetgraph.s b/libpsn00b/psxgpu/resetgraph.s index bc30d3b..189b1ad 100644 --- a/libpsn00b/psxgpu/resetgraph.s +++ b/libpsn00b/psxgpu/resetgraph.s @@ -9,9 +9,9 @@ .global ResetGraph # Resets the GPU and installs a .type ResetGraph, @function # VSync event handler ResetGraph: - addiu $sp, -0x20 # C style stack allocation (required if - sw $ra, 28($sp) # you call BIOS functions from asm) - sw $a0, 24($sp) + addiu $sp, -8 # C style stack allocation (required if + sw $ra, 0($sp) # you call BIOS functions from asm) + sw $a0, 4($sp) la $v0, _hooks_installed # Skip installing hooks if this function lbu $v0, 0($v0) # has already been called before once @@ -20,8 +20,8 @@ ResetGraph: nop # Temporary, may help improve compatibility? - jal SetDefaultExitFromException - nop + #jal SetDefaultExitFromException + #nop jal ChangeClearPAD # Remove pad handler left by the BIOS move $a0, $0 @@ -52,13 +52,16 @@ ResetGraph: jal OpenEvent # Open a VSync event handler # (PSXSDK style vsync handler) - nop + addiu $sp, -16 + addiu $sp, 16 la $v1, _vsync_event_desc # Save event descriptor sw $v0, 0($v1) - jal EnableEvent # Enable the opened event move $a0, $v0 + jal EnableEvent # Enable the opened event + addiu $sp, -4 + addiu $sp, 4 la $v0, _hooks_installed # Set installed flag li $v1, 0x1 @@ -70,6 +73,11 @@ ResetGraph: la $v0, _vsync_callback_func # Clear callback function sw $0 , 0($v0) + la $a0, _custom_exit + jal SetCustomExitFromException + addiu $sp, -4 + addiu $sp, 4 + jal ExitCriticalSection # Re-enable interrupts nop @@ -87,7 +95,7 @@ ResetGraph: sw $v0, 0($v1) .not_pal: - lw $a0, 24($sp) # Get argument value + lw $a0, 4($sp) # Get argument value lui $a3, 0x1f80 # Set base I/O again (likely destroyed # by previous calls) @@ -118,10 +126,10 @@ ResetGraph: .init_done: - lw $ra, 28($sp) - lw $a0, 24($sp) # Return + lw $ra, 0($sp) + lw $a0, 4($sp) # Return jr $ra - addiu $sp, 0x20 + addiu $sp, 8 .global _vsync_func # VSync event handler, executed on @@ -142,8 +150,9 @@ _vsync_func: andi $v0, $v1, 0x1 beqz $v0, .exit nop - xori $v1, $v1, 0x1 # Acknowledge the IRQ - sw $v1, ISTAT($at) + + #xori $v1, $v1, 0x1 # Acknowledge the IRQ + #sw $v1, ISTAT($at) # Commented out as it breaks BIOS pads la $v1, _vsync_counter # Increment VSync counter lw $v0, 0($v1) @@ -171,6 +180,32 @@ _vsync_func: nop +.global _vsync_func_2 +.type _vsync_func_2, @function +_vsync_func_2: + + lui $at, 0x1f80 # Check if there's a VSync IRQ + lw $v0, IMASK($at) + nop + andi $v0, $v0, 0x1 + beqz $v0, .exit_2 + nop + + lw $v1, ISTAT($at) + nop + andi $v0, $v1, 0x1 + beqz $v0, .exit_2 + nop + + xori $v1, $v1, 0x1 # Acknowledge the IRQ + sw $v1, ISTAT($at) + +.exit_2: + + j ReturnFromException + nop + + .global VSync # VSync function .type VSync, @function VSync: @@ -211,6 +246,26 @@ VSync: library_credits: .string "psxgpu programs by Lameguy64" + +.type _custom_exit, @object +_custom_exit: + .word _vsync_func_2 # pc + .word _vsync_stack # sp + .word 0 # fp + .word 0 # s0 + .word 0 # s1 + .word 0 # s2 + .word 0 # s3 + .word 0 # s4 + .word 0 # s5 + .word 0 # s6 + .word 0 # s7 + .word _gp # gp + + .fill 60 +_vsync_stack: + .fill 4 + .type _vsync_counter, @object _vsync_counter: .word 0 |
