sound, fix ym2612 arm assembly (ssg-eg)

This commit is contained in:
kub 2021-11-12 18:34:49 +01:00
parent 50587ccd1f
commit b0e445ef0c

View file

@ -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