mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-04 23:07:46 -04:00
sound, fix ym2612 arm assembly (ssg-eg)
This commit is contained in:
parent
50587ccd1f
commit
b0e445ef0c
1 changed files with 12 additions and 9 deletions
|
@ -166,7 +166,7 @@
|
||||||
addpl r0, r0, r2, asr #4
|
addpl r0, r0, r2, asr #4
|
||||||
cmp r0, #0 @ if (volume <= MIN_ATT_INDEX)
|
cmp r0, #0 @ if (volume <= MIN_ATT_INDEX)
|
||||||
bgt 10f
|
bgt 10f
|
||||||
ldr r2, [r5,#0x1c]
|
ldr r2, [r5,#0x1c] @ sl
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
cmp r2, #0
|
cmp r2, #0
|
||||||
movne r3, #EG_DEC
|
movne r3, #EG_DEC
|
||||||
|
@ -175,8 +175,7 @@
|
||||||
b 10f
|
b 10f
|
||||||
|
|
||||||
1: @ EG_REL
|
1: @ EG_REL
|
||||||
mov r2, #0x200
|
cmp r0, #0x200 @ if ( volume >= 0x200 )
|
||||||
cmp r0, r2 @ if ( volume >= 0x200 )
|
|
||||||
movge r0, #1024
|
movge r0, #1024
|
||||||
subge r0, #1
|
subge r0, #1
|
||||||
movge r3, #EG_OFF
|
movge r3, #EG_OFF
|
||||||
|
@ -236,7 +235,7 @@
|
||||||
eorne r0, r0, #0x400 @ ssgn ^= 4
|
eorne r0, r0, #0x400 @ ssgn ^= 4
|
||||||
strneh r0, [r5,#0x30]
|
strneh r0, [r5,#0x30]
|
||||||
moveq r0, #0
|
moveq r0, #0
|
||||||
streq r0, [r5,#0x0c] @ phase = 0
|
streq r0, [lr,#0x10] @ phase = 0
|
||||||
|
|
||||||
cmp r2, #EG_ATT @ if ( state != EG_ATT )
|
cmp r2, #EG_ATT @ if ( state != EG_ATT )
|
||||||
beq 9f
|
beq 9f
|
||||||
|
@ -250,11 +249,11 @@
|
||||||
cmp r0, #32+62 @ if ( ar+ksr >= 32+62 )
|
cmp r0, #32+62 @ if ( ar+ksr >= 32+62 )
|
||||||
movge r3, #0
|
movge r3, #0
|
||||||
strgeh r3, [r5,#0x1a] @ volume = MIN_ATT
|
strgeh r3, [r5,#0x1a] @ volume = MIN_ATT
|
||||||
bge 9f
|
bge 8f
|
||||||
|
|
||||||
cmp r3, #0
|
cmp r3, #0
|
||||||
movgt r2, #EG_ATT
|
movgt r2, #EG_ATT
|
||||||
strb r2, [r5,#0x17] @ state
|
8: strb r2, [r5,#0x17] @ state
|
||||||
9:
|
9:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -277,8 +276,6 @@
|
||||||
rsbge r0, r0, #0x200 @ volume = (0x200-volume) & MAX_ATT
|
rsbge r0, r0, #0x200 @ volume = (0x200-volume) & MAX_ATT
|
||||||
lslge r0, r0, #22
|
lslge r0, r0, #22
|
||||||
lsrge r0, r0, #22
|
lsrge r0, r0, #22
|
||||||
ldrh r0, [r5,#0x1a] @ volume
|
|
||||||
ldrh r3, [r5,#0x18] @ tl
|
|
||||||
|
|
||||||
add r0, r0, r3 @ volume += tl
|
add r0, r0, r3 @ volume += tl
|
||||||
strh r0, [r5,#0x34] @ vol_out
|
strh r0, [r5,#0x34] @ vol_out
|
||||||
|
@ -731,18 +728,24 @@ crl_loop:
|
||||||
|
|
||||||
ssg_loop:
|
ssg_loop:
|
||||||
mov r6, #4
|
mov r6, #4
|
||||||
|
bic r4, r4, #0x10 @ ssg_update
|
||||||
ssg_upd_loop:
|
ssg_upd_loop:
|
||||||
|
@ use lr as a pointer to the slot phases stored in the context
|
||||||
update_ssg_eg
|
update_ssg_eg
|
||||||
#if 0
|
#if 0
|
||||||
subs r6, r6, #1
|
subs r6, r6, #1
|
||||||
|
addne lr, lr, #4
|
||||||
addne r5, r5, #SLOT_STRUCT_SIZE
|
addne r5, r5, #SLOT_STRUCT_SIZE
|
||||||
#else
|
#else
|
||||||
|
add lr, lr, #4*2
|
||||||
add r5, r5, #SLOT_STRUCT_SIZE*2
|
add r5, r5, #SLOT_STRUCT_SIZE*2
|
||||||
update_ssg_eg
|
update_ssg_eg
|
||||||
subs r6, r6, #2
|
subs r6, r6, #2
|
||||||
|
subne lr, lr, #4
|
||||||
subne r5, r5, #SLOT_STRUCT_SIZE
|
subne r5, r5, #SLOT_STRUCT_SIZE
|
||||||
#endif
|
#endif
|
||||||
bne ssg_upd_loop
|
bne ssg_upd_loop
|
||||||
|
sub lr, lr, #4*3
|
||||||
sub r5, r5, #SLOT_STRUCT_SIZE*3
|
sub r5, r5, #SLOT_STRUCT_SIZE*3
|
||||||
|
|
||||||
subs r7, r7, #1<<EG_SH
|
subs r7, r7, #1<<EG_SH
|
||||||
|
@ -753,7 +756,7 @@ ssg_done:
|
||||||
@ -- EG --
|
@ -- EG --
|
||||||
add r8, r8, r9
|
add r8, r8, r9
|
||||||
cmp r8, #EG_TIMER_OVERFLOW
|
cmp r8, #EG_TIMER_OVERFLOW
|
||||||
bcc volout_upd
|
blo volout_upd
|
||||||
ldr r1, [lr, #0x3c] @ eg_cnt
|
ldr r1, [lr, #0x3c] @ eg_cnt
|
||||||
eg_loop:
|
eg_loop:
|
||||||
sub r8, r8, #EG_TIMER_OVERFLOW
|
sub r8, r8, #EG_TIMER_OVERFLOW
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue