diff options
Diffstat (limited to 'libpsn00b/psxgpu/drawsync.s')
| -rw-r--r-- | libpsn00b/psxgpu/drawsync.s | 49 |
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 |
