aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxspu
diff options
context:
space:
mode:
Diffstat (limited to 'libpsn00b/psxspu')
-rw-r--r--libpsn00b/psxspu/spuinit.s57
-rw-r--r--libpsn00b/psxspu/spureverbon.s2
-rw-r--r--libpsn00b/psxspu/spusetreverb.s7
-rw-r--r--libpsn00b/psxspu/spusetreverbaddr.s8
-rw-r--r--libpsn00b/psxspu/transfer.s16
5 files changed, 41 insertions, 49 deletions
diff --git a/libpsn00b/psxspu/spuinit.s b/libpsn00b/psxspu/spuinit.s
index 42f302a..6966213 100644
--- a/libpsn00b/psxspu/spuinit.s
+++ b/libpsn00b/psxspu/spuinit.s
@@ -17,30 +17,25 @@ SpuInit:
# Stop and mute everything
- sh $0 , SPUCNT($v1) # Clear control settings
+ sh $0 , SPU_CTRL($v1) # Clear control settings
jal SpuCtrlSync
move $a0, $0
- sh $0 , SPU_MASTER_VOL($v1) # Clear master volume
- sh $0 , SPU_MASTER_VOL+2($v1)
+ sh $0 , SPU_MASTER_VOL_L($v1) # Clear master volume
+ sh $0 , SPU_MASTER_VOL_R($v1)
- sh $0 , SPU_REVERB_VOL($v1) # Clear reverb volume
- sh $0 , SPU_REVERB_VOL+2($v1)
+ sh $0 , SPU_REVERB_VOL_L($v1) # Clear reverb volume
+ sh $0 , SPU_REVERB_VOL_R($v1)
- sh $0 , SPU_CD_VOL($v1) # Clear CD volume
- sh $0 , SPU_CD_VOL+2($v1)
+ sh $0 , SPU_CD_VOL_L($v1) # Clear CD volume
+ sh $0 , SPU_CD_VOL_R($v1)
- sh $0 , SPU_EXT_VOL($v1) # Clear external audio volume
- sh $0 , SPU_EXT_VOL+2($v1)
+ sh $0 , SPU_EXT_VOL_L($v1) # Clear external audio volume
+ sh $0 , SPU_EXT_VOL_R($v1)
- sh $0 , SPU_FM_MODE($v1) # Turn off FM modes
- sh $0 , SPU_FM_MODE+2($v1)
-
- sh $0 , SPU_NOISE_MODE($v1) # Turn off noise modes
- sh $0 , SPU_NOISE_MODE+2($v1)
-
- sh $0 , SPU_REVERB_ON($v1) # Turn off reverb modes
- sh $0 , SPU_REVERB_ON+2($v1)
+ sw $0 , SPU_FM_MODE($v1) # Turn off FM modes
+ sw $0 , SPU_NOISE_MODE($v1) # Turn off noise modes
+ sw $0 , SPU_REVERB_ON($v1) # Turn off reverb modes
li $v0, 0xfffe
sh $v0, SPU_REVERB_ADDR($v1)
@@ -65,32 +60,28 @@ SpuInit:
bgez $a2, .Lclear_voices
nop
- li $v0, 0xffff # Set all keys to off
- sh $v0, SPU_KEY_OFF($v1)
- sh $v0, SPU_KEY_OFF+2($v1)
+ addiu $v0, $0, -1 # Set all keys to off
+ sw $v0, SPU_KEY_OFF($v1)
li $v0, 0x4 # Set SPU data transfer control
- sh $v0, SPUDTCNT($v1) # (usually always 0x4)
+ sh $v0, SPU_DMA_CTRL($v1) # (usually always 0x4)
- lw $v0, DPCR($v1) # Enable DMA channel 4 (SPU DMA)
+ lw $v0, DMA_DPCR($v1) # Enable DMA channel 4 (SPU DMA)
lui $at, 0xb
or $v0, $at
- sw $v0, DPCR($v1)
+ sw $v0, DMA_DPCR($v1)
li $v0, 0xC001 # Enable SPU
- sh $v0, SPUCNT($v1)
+ sh $v0, SPU_CTRL($v1)
jal SpuCtrlSync
move $a0, $v0
li $v0, 0x3fff # Activate master volume
- sh $v0, SPU_MASTER_VOL($v1)
- sh $v0, SPU_MASTER_VOL+2($v1)
-
- sh $v0, SPU_CD_VOL($v1) # Activate CD volume
- sh $v0, SPU_CD_VOL+2($v1)
+ sh $v0, SPU_MASTER_VOL_L($v1)
+ sh $v0, SPU_MASTER_VOL_R($v1)
- sh $v0, SPU_CD_VOL($v1) # Activate CD volume
- sh $v0, SPU_CD_VOL+2($v1)
+ sh $v0, SPU_CD_VOL_L($v1) # Activate CD volume
+ sh $v0, SPU_CD_VOL_R($v1)
lw $ra, 0($sp)
addiu $sp, 4
@@ -108,7 +99,7 @@ SpuCtrlSync:
lui $v1, IOBASE
andi $a0, 0x3f
.Lctrl_wait:
- lhu $v0, SPUSTAT($v1) # Get SPUSTAT value
+ lhu $v0, SPU_STAT($v1) # Get SPUSTAT value
nop
andi $v0, 0x3f
bne $v0, $a0, .Lctrl_wait # Wait until SPUCNT and SPUSTAT are equal
@@ -123,7 +114,7 @@ SpuCtrlSync:
.type SpuWait, @function
SpuWait:
lui $v0, IOBASE
- lhu $v0, SPUSTAT($v0)
+ lhu $v0, SPU_STAT($v0)
nop
andi $v0, 0x400
bnez $v0, SpuWait
diff --git a/libpsn00b/psxspu/spureverbon.s b/libpsn00b/psxspu/spureverbon.s
index 852bff3..635fac3 100644
--- a/libpsn00b/psxspu/spureverbon.s
+++ b/libpsn00b/psxspu/spureverbon.s
@@ -11,6 +11,6 @@ SpuReverbOn:
lui $v1, IOBASE
li $v0, 1
sll $v0, $a0
- sh $v0, SPU_REVERB_ON($v1)
+ sw $v0, SPU_REVERB_ON($v1)
jr $ra
nop \ No newline at end of file
diff --git a/libpsn00b/psxspu/spusetreverb.s b/libpsn00b/psxspu/spusetreverb.s
index 993b166..8257812 100644
--- a/libpsn00b/psxspu/spusetreverb.s
+++ b/libpsn00b/psxspu/spusetreverb.s
@@ -10,11 +10,12 @@
SpuSetReverb:
addiu $sp, -4
sw $ra, 0($sp)
-
- lhu $v0, SPUCNT($v1)
+
+ lui $v1, IOBASE
+ lhu $v0, SPU_CTRL($v1)
nop
ori $v0, 0x80 # Enable reverb
- sh $v0, SPUCNT($v1)
+ sh $v0, SPU_CTRL($v1)
jal SpuCtrlSync
move $a0, $v0
diff --git a/libpsn00b/psxspu/spusetreverbaddr.s b/libpsn00b/psxspu/spusetreverbaddr.s
index 6ddbf44..089a91a 100644
--- a/libpsn00b/psxspu/spusetreverbaddr.s
+++ b/libpsn00b/psxspu/spusetreverbaddr.s
@@ -8,7 +8,7 @@
.global SpuSetReverbAddr
.type SpuSetReverbAddr, @function
SpuSetReverbAddr:
- lui $a3, 0x1f80
+ lui $a3, IOBASE
srl $a0, 3
sh $a0, SPU_REVERB_ADDR($a3)
jr $ra
@@ -18,8 +18,8 @@ SpuSetReverbAddr:
.global SpuSetReverbVolume
.type SpuSetReverbVolume, @function
SpuSetReverbVolume:
- lui $a3, 0x1f80
- sh $a0, SPU_REVERB_VOL($a3)
- sh $a1, SPU_REVERB_VOL+2($a3)
+ lui $a3, IOBASE
+ sh $a0, SPU_REVERB_VOL_L($a3)
+ sh $a1, SPU_REVERB_VOL_R($a3)
jr $ra
nop \ No newline at end of file
diff --git a/libpsn00b/psxspu/transfer.s b/libpsn00b/psxspu/transfer.s
index 5b62c28..adcdb33 100644
--- a/libpsn00b/psxspu/transfer.s
+++ b/libpsn00b/psxspu/transfer.s
@@ -46,10 +46,10 @@ SpuWrite:
lui $a3, IOBASE
- lhu $v0, SPUCNT($a3) # Set transfer mode to Stop
+ lhu $v0, SPU_CTRL($a3) # Set transfer mode to Stop
nop
andi $v0, 0xffcf
- sh $v0, SPUCNT($a3)
+ sh $v0, SPU_CTRL($a3)
jal SpuCtrlSync
move $a0, $v0
@@ -58,10 +58,10 @@ SpuWrite:
nop
sh $v1, SPU_ADDR($a3)
- lhu $v0, SPUCNT($a3) # Set transfer mode to DMA write
+ lhu $v0, SPU_CTRL($a3) # Set transfer mode to DMA write
nop
ori $v0, 0x20
- sh $v0, SPUCNT($a3)
+ sh $v0, SPU_CTRL($a3)
#jal SpuCtrlSync # Locks up on most emulators (bit 5 in
#move $a0, $v0 # SPUSTAT likely not updating, seems to
# be okay to not wait for it on real HW)
@@ -69,13 +69,13 @@ SpuWrite:
lw $a0, 4($sp)
.Ldma_wait: # Wait for SPU to be ready for DMA
- lhu $v0, SPUSTAT($a3)
+ lhu $v0, SPU_STAT($a3)
nop
andi $v0, 0x400 # Bit 8 in SPUSTAT never changes to 1 on
bnez $v0, .Ldma_wait # emulators so use bit 10 instead
nop
- sw $a0, D4_MADR($a3) # Set DMA source address
+ sw $a0, DMA4_MADR($a3) # Set DMA source address
li $v0, 0x10 # 16 words per block (64 bytes)
addiu $a1, 63 # Add by 63 to ensure all bytes get sent
@@ -83,11 +83,11 @@ SpuWrite:
andi $a1, 0xffff
sll $a1, 16
or $v0, $a1
- sw $v0, D4_BCR($a3)
+ sw $v0, DMA4_BCR($a3)
lui $v0, 0x0100 # Commence transfer
ori $v0, 0x0201
- sw $v0, D4_CHCR($a3)
+ sw $v0, DMA4_CHCR($a3)
lw $ra, 0($sp)
addiu $sp, 8