aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxgpu/drawsync.s
diff options
context:
space:
mode:
Diffstat (limited to 'libpsn00b/psxgpu/drawsync.s')
-rw-r--r--libpsn00b/psxgpu/drawsync.s49
1 files changed, 45 insertions, 4 deletions
diff --git a/libpsn00b/psxgpu/drawsync.s b/libpsn00b/psxgpu/drawsync.s
index 149519d..66d37e2 100644
--- a/libpsn00b/psxgpu/drawsync.s
+++ b/libpsn00b/psxgpu/drawsync.s
@@ -8,19 +8,60 @@
.global DrawSync
.type DrawSync, @function
DrawSync:
+
+ bnez $a0, .Lgetwords
+ lui $a0, IOBASE
+
addiu $sp, -4
sw $ra, 0($sp)
-.gpu_wait: # Wait for GPU to be ready for commands and DMA
+ jal ReadGPUstat # Check if DMA enabled
+ nop
+ srl $v0, 29
+ andi $v0, 0x3
+
+ beqz $v0, .Lsimple_wait
+ nop
+
+.Ldma_wait:
+ lw $v0, D2_CHCR
+ nop
+ srl $v0, 24
+ andi $v0, 0x1
+ bnez $v0, .Ldma_wait
+ nop
+
+.Lgpu_wait:
jal ReadGPUstat
nop
- srl $v0, 0x1a
+ srl $v0, 26
andi $v0, 0x5
- li $v1, 5
- bne $v0, $v1, .gpu_wait
+ bne $v0, 5, .Lgpu_wait
+ nop
+
+ b .Lexit
nop
+
+.Lsimple_wait: # Wait for GPU to be ready for next DMA
+ jal ReadGPUstat
+ nop
+ srl $v0, 28
+ andi $v0, 0x1
+ beqz $v0, .Lsimple_wait
+ nop
+
+.Lexit:
lw $ra, 0($sp)
addiu $sp, 4
jr $ra
nop
+
+.Lgetwords:
+
+ lw $v0, D2_BCR($a0)
+ nop
+
+ jr $ra
+ srl $v0, 16
+ \ No newline at end of file