diff options
| author | John Wilbert M. Villamor <lameguy64@gmail.com> | 2020-09-19 20:43:05 +0800 |
|---|---|---|
| committer | John Wilbert M. Villamor <lameguy64@gmail.com> | 2020-09-19 20:43:05 +0800 |
| commit | 9f4891f95070c66ea9f1aba99d72724d4ab24e5a (patch) | |
| tree | 723e3ef2118a3d1a9e6dafa811ed1b8b1bc9196e /libpsn00b/psxcd/psxcd_asm.s | |
| parent | 6762c39551ded059450d17d8bb0cb80642c8aaab (diff) | |
| download | psn00bsdk-9f4891f95070c66ea9f1aba99d72724d4ab24e5a.tar.gz | |
Revised makefiles, added strtok(), command line arguments, SetHeapSize(), moved ISR and callback system to psxetc, moved debug font to psxgpu, fixed CD-ROM library crashing on PSIO, fixed interrupt callback setup to fix crashing on ResetGraph()
Diffstat (limited to 'libpsn00b/psxcd/psxcd_asm.s')
| -rw-r--r-- | libpsn00b/psxcd/psxcd_asm.s | 76 |
1 files changed, 28 insertions, 48 deletions
diff --git a/libpsn00b/psxcd/psxcd_asm.s b/libpsn00b/psxcd/psxcd_asm.s index 0bfe5ca..1dbf542 100644 --- a/libpsn00b/psxcd/psxcd_asm.s +++ b/libpsn00b/psxcd/psxcd_asm.s @@ -15,6 +15,12 @@ _cd_init: nop lui $a3, IOBASE # Acknowledge all CD IRQs + + li $v0, 0x20943 # Set CD-ROM Delay/Size and common delay + sw $v0, SBUS_5($a3) + li $v0, 0x1325 + sw $v0, COM_DELAY($a3) + li $v0, 1 sb $v0, CD_REG0($a3) li $v0, 0x1f @@ -24,9 +30,6 @@ _cd_init: sb $0 , CD_REG0($a3) sb $0 , CD_REG3($a3) - li $v0, 0x1325 - sw $v0, COM_DELAY($a3) - la $a1, _cd_handler jal InterruptCallback li $a0, 2 @@ -76,29 +79,6 @@ _cd_init: jal ExitCriticalSection nop - #li $a0, 0x01 # GetStat - #jal _cd_control - #move $a2, $0 - #jal _cd_wait - #nop - - #li $a0, 0x0a # Init - #jal _cd_control - #move $a2, $0 - #jal _cd_wait - #nop - - #li $a0, 0x0c # Demute - #jal _cd_control - #move $a2, $0 - #jal _cd_wait - #nop - - #la $a0, _cd_init_msg - #jal printf - #addiu $sp, -16 - #addiu $sp, 16 - lw $ra, 0($sp) addiu $sp, 4 jr $ra @@ -153,7 +133,7 @@ _cd_handler: addiu $sp, -4 sw $ra, 0($sp) - lui $a3, IOBASE # Print out IRQ number + lui $a3, IOBASE # Get IRQ number li $v0, 1 sb $v0, CD_REG0($a3) @@ -167,6 +147,11 @@ _cd_handler: bne $v0, 0x1, .Lno_data nop + sb $0 , CD_REG0($a3) + lbu $v1, CD_REG0($a3) + sb $0 , CD_REG3($a3) + lbu $v1, CD_REG3($a3) + sb $0 , CD_REG0($a3) # Load data FIFO on INT1 li $v1, 0x80 sb $v1, CD_REG3($a3) @@ -189,6 +174,9 @@ _cd_handler: li $v1, 3 sw $v1, 0($0) + la $v1, _cd_last_int + lbu $v0, 0($v1) + beq $v0, 0x1, .Lirq_1 # Data ready nop beq $v0, 0x2, .Lirq_2 # Command finish @@ -371,17 +359,6 @@ _cd_fetch_result: .Lwrite_status: - andi $v1, $v0, 0x10 - - beqz $v1, .Lno_disc_change - nop - - la $v1, _cd_media_changed - addiu $a1, $0 , 1 - sw $a1, 0($v1) - -.Lno_disc_change: - sb $v0, 0($a0) .Lskip_status: @@ -394,23 +371,32 @@ _cd_fetch_result: sb $v0, 0($a0) addiu $a0, 1 + move $a1, $0 .Lread_futher_result: lbu $v0, CD_REG0($a3) nop andi $v0, 0x20 beqz $v0, .Lno_result + addu $a1, 1 + bge $a1, 7, .Lno_result # timeout (locks up here on PSIO) nop - lbu $v0, CD_REG1($a3) lbu $v1, CD_REG0($a3) sb $v0, 0($a0) - andi $v1, 0x20 + + andi $v1, 0x20 # when performing a CD-ROM read bnez $v1, .Lread_futher_result addiu $a0, 1 .Lno_result: +# lbu $v0, CD_REG0($a3) # Flush response FIFO +# nop +# andi $v0, 0x20 +# bnez $v0, .Lno_result +# lbu $v0, CD_REG1($a3) + jr $ra nop @@ -509,11 +495,7 @@ CdSyncCallback: .type psxcd_credits, @object psxgpu_credits: .ascii "psxcd library programs by Lameguy64\n" - .asciiz "2019 PSn00bSDK Project / Meido-Tek Productions\n" - -_cd_init_msg: -.asciiz "psxcd: Init OK\n" -.align 4 + .asciiz "2020 PSn00bSDK Project / Meido-Tek Productions\n" .comm _cd_last_cmd, 1, 1 .comm _cd_last_mode, 1, 1 @@ -523,9 +505,7 @@ _cd_init_msg: .comm _cd_status, 1, 1 .comm _cd_last_int, 1, 1 -.comm _cd_media_changed, 1, 1 - # Callback hooks .comm _cd_callback_int1_data, 4, 4 # Data IRQ callback -.comm _cd_callback_int4, 4, 4 # Autopause callback +.comm _cd_callback_int4, 4, 4 # Autopause callback .comm _cd_sync_cb, 4, 4 |
