aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxapi/_initcd.s
diff options
context:
space:
mode:
authorspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2022-02-07 01:11:35 +0100
committerspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2022-02-07 02:35:02 +0100
commit3f43c466ca282ba14473d974659b5423c7067b08 (patch)
treeb59d0199f3cf751a95277e5b0ddb22434fe74d40 /libpsn00b/psxapi/_initcd.s
parent40b7d95e9b16252d1aebb0706f3bba885f6e67cf (diff)
downloadpsn00bsdk-3f43c466ca282ba14473d974659b5423c7067b08.tar.gz
Rewrite psxapi with BIOS API stub generator script
Diffstat (limited to 'libpsn00b/psxapi/_initcd.s')
-rw-r--r--libpsn00b/psxapi/_initcd.s37
1 files changed, 37 insertions, 0 deletions
diff --git a/libpsn00b/psxapi/_initcd.s b/libpsn00b/psxapi/_initcd.s
new file mode 100644
index 0000000..decf2bd
--- /dev/null
+++ b/libpsn00b/psxapi/_initcd.s
@@ -0,0 +1,37 @@
+.section .text
+.set noreorder
+
+.include "hwregs_a.h"
+
+.global _InitCd
+.type _InitCd, @function
+_InitCd:
+ addiu $sp, -8
+ sw $ra, 0($sp)
+
+ lui $a0, IOBASE # Load IOBASE value
+
+ lw $v0, DPCR($a0) # Get current DMA settings
+ nop
+ sw $v0, 4($sp) # Save to stack
+
+ jal _96_init # Init CD subsystem
+ nop
+
+ lui $a0, IOBASE # Load IOBASE again
+
+ lw $v0, 4($sp) # Get old DMA control settings
+ lw $v1, DPCR($a0) # Get DMA settings by _96_init()
+
+ lui $a1, 0xffff # Mask out settings for CD DMA
+ ori $a1, 0x0f00
+ and $v0, $a1
+
+ or $v0, $v1 # Merge and set new DMA settings
+ sw $v0, DPCR($a0)
+
+ lw $ra, 0($sp)
+ addiu $sp, 8
+ jr $ra
+ nop
+ \ No newline at end of file