Diff for /np2/wince/arm/opngeng.s between versions 1.1 and 1.4

version 1.1, 2003/11/28 21:06:03 version 1.4, 2003/12/24 14:01:56
Line 1 Line 1
   
 ; OPNGENARMを定義するか SIN_BITS,EVC_BITSの設定を合せること。  
   
 FMDIV_BITS              equ             8  FMDIV_BITS              equ             8
 FMDIV_ENT               equ             (1 << FMDIV_BITS)  FMDIV_ENT               equ             (1 << FMDIV_BITS)
 FMVOL_SFTBIT    equ             4  FMVOL_SFTBIT    equ             4
Line 54  S1_ENVINCDECAY2  equ  64 Line 52  S1_ENVINCDECAY2  equ  64
 ; s_env_inc_release     equ             68  ; s_env_inc_release     equ             68
 S_SIZE                          equ             72  S_SIZE                          equ             72
   
 S2_ENV_INC                      equ             (S_SIZE * 1 + S1_ENV_INC)  
 S2_ENV_CNT                      equ             (S_SIZE * 1 + S1_ENV_CNT)  
 S2_ENV_END                      equ             (S_SIZE * 1 + S1_ENV_END)  
 S2_TOTALLEVEL           equ             (S_SIZE * 1 + S1_TOTALLEVEL)  
 S2_FREQ_INC                     equ             (S_SIZE * 1 + S1_FREQ_INC)  
 S2_FREQ_CNT                     equ             (S_SIZE * 1 + S1_FREQ_CNT)  
 S2_ENV_MODE                     equ             (S_SIZE * 1 + S1_ENV_MODE)  
 S2_DECAYLEVEL           equ             (S_SIZE * 1 + S1_DECAYLEVEL)  
 S2_ENVINCDECAY1         equ             (S_SIZE * 1 + S1_ENVINCDECAY1)  
 S2_ENVINCDECAY2         equ             (S_SIZE * 1 + S1_ENVINCDECAY2)  
   
 S3_ENV_INC                      equ             (S_SIZE * 2 + S1_ENV_INC)  
 S3_ENV_CNT                      equ             (S_SIZE * 2 + S1_ENV_CNT)  
 S3_ENV_END                      equ             (S_SIZE * 2 + S1_ENV_END)  
 S3_TOTALLEVEL           equ             (S_SIZE * 2 + S1_TOTALLEVEL)  
 S3_FREQ_INC                     equ             (S_SIZE * 2 + S1_FREQ_INC)  
 S3_FREQ_CNT                     equ             (S_SIZE * 2 + S1_FREQ_CNT)  
 S3_ENV_MODE                     equ             (S_SIZE * 2 + S1_ENV_MODE)  
 S3_DECAYLEVEL           equ             (S_SIZE * 2 + S1_DECAYLEVEL)  
 S3_ENVINCDECAY1         equ             (S_SIZE * 2 + S1_ENVINCDECAY1)  
 S3_ENVINCDECAY2         equ             (S_SIZE * 2 + S1_ENVINCDECAY2)  
   
 S4_ENV_INC                      equ             (S_SIZE * 3 + S1_ENV_INC)  
 S4_ENV_CNT                      equ             (S_SIZE * 3 + S1_ENV_CNT)  
 S4_ENV_END                      equ             (S_SIZE * 3 + S1_ENV_END)  
 S4_TOTALLEVEL           equ             (S_SIZE * 3 + S1_TOTALLEVEL)  
 S4_FREQ_INC                     equ             (S_SIZE * 3 + S1_FREQ_INC)  
 S4_FREQ_CNT                     equ             (S_SIZE * 3 + S1_FREQ_CNT)  
 S4_ENV_MODE                     equ             (S_SIZE * 3 + S1_ENV_MODE)  
 S4_DECAYLEVEL           equ             (S_SIZE * 3 + S1_DECAYLEVEL)  
 S4_ENVINCDECAY1         equ             (S_SIZE * 3 + S1_ENVINCDECAY1)  
 S4_ENVINCDECAY2         equ             (S_SIZE * 3 + S1_ENVINCDECAY2)  
   
 ; C_algorithm           equ             (S_SIZE * 4 + 0)  ; C_algorithm           equ             (S_SIZE * 4 + 0)
 C_FEEDBACK                      equ             (S_SIZE * 4 + 1)  C_FEEDBACK                      equ             (S_SIZE * 4 + 1)
 C_PLAYING                       equ             (S_SIZE * 4 + 2)  C_PLAYING                       equ             (S_SIZE * 4 + 2)
Line 134  T_envcurve   equ  (24 - T_ORG + SIN_ENT  Line 99  T_envcurve   equ  (24 - T_ORG + SIN_ENT 
         EXPORT  opngen_getpcm          EXPORT  opngen_getpcm
         EXPORT  opngen_getpcmvr          EXPORT  opngen_getpcmvr
   
         AREA    OPNGENA, CODE, READONLY          AREA    .text, CODE, READONLY
   
 ; r0    Temporary Register  ; r0    Temporary Register
 ; r1    Offset  ; r1    Offset
Line 150  T_envcurve   equ  (24 - T_ORG + SIN_ENT  Line 115  T_envcurve   equ  (24 - T_ORG + SIN_ENT 
 ; r11   opncfg Fix  ; r11   opncfg Fix
 ; r12   Temporary Register  ; r12   Temporary Register
   
           MACRO
   $label  SLTFREQ $o, $upd
   $label          ldr             r3, [r6, #($o + S1_ENV_INC)]    ; calc env
                           ldr             r4, [r6, #($o + S1_ENV_CNT)]
                           ldr             r12, [r6, #($o + S1_ENV_END)]
                           ;
                           add             r3, r3, r4
                           cmp             r3, r12
                           bcs             $upd
           MEND
   
           MACRO
   $label  SLTOUT  $o, $fd, $cn
   $label          mov             r4, r3 lsr #ENV_BITS
                           subs    r12, r4, #EVC_ENT
                           addcc   r12, r11, #T_envcurve                   ; r12 = opntbl.envcurve
                           ldr             r0, [r6, #($o + S1_TOTALLEVEL)]
                           ldrcc   r12, [r12, r4 lsl #2]
                           str             r3, [r6, #($o + S1_ENV_CNT)]
                           ldr             r4, [r6, #($o + S1_FREQ_CNT)]
                           ldr             r3, [r6, #($o + S1_FREQ_INC)]   ; freq
                           subs    r0, r0, r12
                           ldr             r12, [r10, $fd]
                           add             r3, r3, r4
                           str             r3, [r6, #($o + S1_FREQ_CNT)]
                           bls             $label.ed
                           add             r3, r3, r12
                           add             r0, r11, r0 lsl #2
                           mov             r3, r3 lsl #(32 - FREQ_BITS)
                           add             r12, r11, #T_sintable           ; r12 = opntbl.sintable
                           mov             r3, r3 lsr #(32 - SIN_BITS)
                           ldr             r4, [r6, $cn]
                           ldr             r0, [r0, #T_envtable]
                           ldr             r3, [r12, r3 lsl #2]
                           ldr             r12, [r4]
                           mul             r0, r3, r0
                           ;
                           add             r12, r12, r0 asr #(ENVTBL_BIT + SINTBL_BIT - TL_BITS)
                           str             r12, [r4]
   $label.ed
           MEND
   
   
           MACRO
   $label  SLTUPD  $r, $o, $m
   $label          ldrb    r3, [r6, #($o + S1_ENV_MODE)]
                           ;
                           ;
                           sub             r3, r3, #1
                           cmp             r3, #EM_ATTACK
                           addcc   pc, pc, r3 lsl #2
                           b               $label.off                                      ; EM_OFF
                           b               $label.rel                                      ; EM_RELEASE
                           b               $label.dc2                                      ; EM_DECAY2
                           b               $label.dc1                                      ; EM_DECAY1
   $label.att      strb    r3, [r6, #($o + S1_ENV_MODE)]
                           ldr             r0, [r6, #($o + S1_DECAYLEVEL)]
                           ldr             r4, [r6, #($o + S1_ENVINCDECAY1)]
                           mov             r3, #EC_DECAY
                           str             r0, [r6, #($o + S1_ENV_END)]
                           str             r4, [r6, #($o + S1_ENV_INC)]
                           b               $r
   $label.dc1      strb    r3, [r6, #($o + S1_ENV_MODE)]
                           mov             r0, #EC_OFF
                           ldr             r4, [r6, #($o + S1_ENVINCDECAY2)]
                           ldr             r3, [r6, #($o + S1_DECAYLEVEL)]
                           str             r0, [r6, #($o + S1_ENV_END)]
                           str             r4, [r6, #($o + S1_ENV_INC)]
                           b               $r
   $label.rel      strb    r3, [r6, #($o + S1_ENV_MODE)]
   $label.dc2      add             r3, r12, #1
                           ldrb    r4, [r6, #C_PLAYING]
                           mov             r0, #0
                           str             r3, [r6, #($o + S1_ENV_END)]
                           str             r0, [r6, #($o + S1_ENV_INC)]
                           and             r4, r4, $m
                           strb    r4, [r6, #C_PLAYING]
   $label.off      mov             r3, #EC_OFF
                           b               $r
           MEND
   
   
 opngen_getpcm  opngen_getpcm
 opngen_getpcmvr  opngen_getpcmvr
Line 188  slotcalc_lp  ldrb r0, [r6, #C_PLAYING] Line 234  slotcalc_lp  ldrb r0, [r6, #C_PLAYING]
                                 str             r12, [r10, #G_FEEDBACK2]                                  str             r12, [r10, #G_FEEDBACK2]
                                 str             r12, [r10, #G_FEEDBACK3]                                  str             r12, [r10, #G_FEEDBACK3]
                                 str             r12, [r10, #G_FEEDBACK4]                                  str             r12, [r10, #G_FEEDBACK4]
 slot1calc               ldr             r3, [r6, #S1_ENV_INC]           ; calc env  
                                 ldr             r12, [r6, #S1_ENV_CNT]  slot1calc               SLTFREQ 0, slot1update
                                 add             r3, r3, r12  s1calcenv               mov             r12, r3, lsr #ENV_BITS
                                 ldr             r12, [r6, #S1_ENV_END]                                  subs    r4, r12, #EVC_ENT
                                 cmp             r3, r12                                  addcc   r4, r11, #T_envcurve            ; r4 = opntbl.envcurve
                                 bcs             slot1update  
 s1calcenv               str             r3, [r6, #S1_ENV_CNT]  
                                 mov             r3, r3, lsr #ENV_BITS  
                                 subs    r12, r3, #EVC_ENT  
                                 addcc   r12, r11, #T_envcurve           ; r12 = opntbl.envcurve  
                                 ldrcc   r12, [r12, r3, lsl #2]  
                                 ldr             r0, [r6, #S1_TOTALLEVEL]                                  ldr             r0, [r6, #S1_TOTALLEVEL]
                                 subs    r0, r0, r12                                  ldrcc   r4, [r4, r12 lsl #2]
                                 ldr             r3, [r6, #S1_FREQ_INC]          ; freq                                  str             r3, [r6, #S1_ENV_CNT]
                                 ldr             r12, [r6, #S1_FREQ_CNT]                                  ldr             r12, [r6, #S1_FREQ_CNT]
                                   ldr             r3, [r6, #S1_FREQ_INC]          ; freq
                                   subs    r0, r0, r4
                                   ldrb    r4, [r6, #C_FEEDBACK]
                                 add             r3, r3, r12                                  add             r3, r3, r12
                                 str             r3, [r6, #S1_FREQ_CNT]                                  str             r3, [r6, #S1_FREQ_CNT]
                                 bls             slot2calc                                  bls             slot2calc
                                 ldrb    r4, [r6, #C_FEEDBACK]                                  ldr             r12, [r6, #C_OP1FB]
                                 cmp             r4, #0                                  cmp             r4, #0
                                 ldrne   r12, [r6, #C_OP1FB]  
                                 addne   r3, r3, r12 asr r4                      ; back!                                  addne   r3, r3, r12 asr r4                      ; back!
         if 1  
                                 mov             r3, r3, lsl #(32 - FREQ_BITS)  
         else  
                                 mov             r3, r3, lsr #(FREQ_BITS - SIN_BITS)  
                                 mov             r3, r3, lsl #(32 - SIN_BITS)  
         endif  
                                 mov             r3, r3, lsr #(32 - SIN_BITS)  
                                 add             r4, r11, #T_sintable            ; r1 = opntbl.sintable                                  add             r4, r11, #T_sintable            ; r1 = opntbl.sintable
                                 ldr             r3, [r4, r3, lsl #2]                                  mov             r3, r3 lsl #(32 - FREQ_BITS)
                                 add             r4, r11, #T_envtable            ; r1 = opntbl.envtable                                  add             r0, r11, r0 lsl #2
                                 ldr             r4, [r4, r0, lsl #2]                                  mov             r3, r3 lsr #(32 - SIN_BITS)
                                 mul             r3, r4, r3                                  ldr             r0, [r0, #T_envtable]
                                 mov             r3, r3, asr #(ENVTBL_BIT + SINTBL_BIT - TL_BITS)                                  ldr             r3, [r4, r3 lsl #2]
                                   ldr             r4, [r6, #C_CONNECT1]
                                   mul             r0, r3, r0
                                   mov             r3, r0 asr #(ENVTBL_BIT + SINTBL_BIT - TL_BITS)
                                 strne   r3, [r6, #C_OP1FB]                                  strne   r3, [r6, #C_OP1FB]
                                 addne   r3, r3, r12                                  addne   r3, r3, r12
                                 subne   r3, r3, r3 asr #31                      ; adjust....                                  subne   r3, r3, r3 asr #31                      ; adjust....
                                 movne   r3, r3, asr #1                                  movne   r3, r3 asr #1
                                 ldr             r12, [r6, #C_CONNECT1]                                  cmp             r4, #0
                                 cmp             r12, #0                                  ldrne   r0, [r4]
                                 streq   r3, [r10, #G_FEEDBACK2]                                  streq   r3, [r10, #G_FEEDBACK2]
                                 streq   r3, [r10, #G_FEEDBACK3]                                  streq   r3, [r10, #G_FEEDBACK3]
                                 streq   r3, [r10, #G_FEEDBACK4]                                  streq   r3, [r10, #G_FEEDBACK4]
                                 ldrne   r0, [r12]  
                                 addne   r0, r0, r3                                  addne   r0, r0, r3
                                 strne   r0, [r12]                                  strne   r0, [r4]
 slot2calc               ldr             r3, [r6, #S2_ENV_INC]           ; calc env  
                                 ldr             r12, [r6, #S2_ENV_CNT]  slot2calc               SLTFREQ (S_SIZE * 1), slot2update
                                 add             r3, r3, r12  s2calcenv               SLTOUT  (S_SIZE * 1), #G_FEEDBACK2, #C_CONNECT2
                                 ldr             r12, [r6, #S2_ENV_END]  
                                 cmp             r3, r12  slot3calc               SLTFREQ (S_SIZE * 2), slot3update
                                 bcs             slot2update  s3calcenv               SLTOUT  (S_SIZE * 2), #G_FEEDBACK3, #C_CONNECT3
 s2calcenv               str             r3, [r6, #S2_ENV_CNT]  
                                 mov             r3, r3, lsr #ENV_BITS  slot4calc               SLTFREQ (S_SIZE * 3), slot4update
                                 subs    r12, r3, #EVC_ENT  s4calcenv               SLTOUT  (S_SIZE * 3), #G_FEEDBACK4, #C_CONNECT4
                                 addcc   r12, r11, #T_envcurve           ; r12 = opntbl.envcurve  
                                 ldrcc   r12, [r12, r3, lsl #2]  
                                 ldr             r0, [r6, #S2_TOTALLEVEL]  
                                 subs    r0, r0, r12  
                                 ldr             r3, [r6, #S2_FREQ_INC]          ; freq  
                                 ldr             r12, [r6, #S2_FREQ_CNT]  
                                 add             r3, r3, r12  
                                 str             r3, [r6, #S2_FREQ_CNT]  
                                 bls             slot3calc  
                                 ldr             r12, [r10, #G_FEEDBACK2]  
                                 add             r3, r3, r12  
         if 1  
                                 mov             r3, r3, lsl #(32 - FREQ_BITS)  
         else  
                                 mov             r3, r3, lsr #(FREQ_BITS - SIN_BITS)  
                                 mov             r3, r3, lsl #(32 - SIN_BITS)  
         endif  
                                 mov             r3, r3, lsr #(32 - SIN_BITS)  
                                 add             r12, r11, #T_sintable           ; r12 = opntbl.sintable  
                                 ldr             r3, [r12, r3, lsl #2]  
                                 add             r12, r11, #T_envtable           ; r12 = opntbl.envtable  
                                 ldr             r12, [r12, r0, lsl #2]  
                                 mul             r3, r12, r3  
                                 ldr             r12, [r6, #C_CONNECT2]  
                                 ldr             r0, [r12]  
                                 add             r0, r0, r3, asr #(ENVTBL_BIT + SINTBL_BIT - TL_BITS)  
                                 str             r0, [r12]  
 slot3calc               ldr             r3, [r6, #S3_ENV_INC]           ; calc env  
                                 ldr             r12, [r6, #S3_ENV_CNT]  
                                 add             r3, r3, r12  
                                 ldr             r12, [r6, #S3_ENV_END]  
                                 cmp             r3, r12  
                                 bcs             slot3update  
 s3calcenv               str             r3, [r6, #S3_ENV_CNT]  
                                 mov             r3, r3, lsr #ENV_BITS  
                                 subs    r12, r3, #EVC_ENT  
                                 addcc   r12, r11, #T_envcurve           ; r12 = opntbl.envcurve  
                                 ldrcc   r12, [r12, r3, lsl #2]  
                                 ldr             r0, [r6, #S3_TOTALLEVEL]  
                                 subs    r0, r0, r12  
                                 ldr             r3, [r6, #S3_FREQ_INC]          ; freq  
                                 ldr             r12, [r6, #S3_FREQ_CNT]  
                                 add             r3, r3, r12  
                                 str             r3, [r6, #S3_FREQ_CNT]  
                                 bls             slot4calc  
                                 ldr             r12, [r10, #G_FEEDBACK3]  
                                 add             r3, r3, r12  
         if 1  
                                 mov             r3, r3, lsl #(32 - FREQ_BITS)  
         else  
                                 mov             r3, r3, lsr #(FREQ_BITS - SIN_BITS)  
                                 mov             r3, r3, lsl #(32 - SIN_BITS)  
         endif  
                                 mov             r3, r3, lsr #(32 - SIN_BITS)  
                                 add             r12, r11, #T_sintable           ; r12 = opntbl.sintable  
                                 ldr             r3, [r12, r3, lsl #2]  
                                 add             r12, r11, #T_envtable           ; r12 = opntbl.envtable  
                                 ldr             r12, [r12, r0, lsl #2]  
                                 mul             r3, r12, r3  
                                 ldr             r12, [r6, #C_CONNECT3]  
                                 ldr             r0, [r12]  
                                 add             r0, r0, r3, asr #(ENVTBL_BIT + SINTBL_BIT - TL_BITS)  
                                 str             r0, [r12]  
 slot4calc               ldr             r3, [r6, #S4_ENV_INC]           ; calc env  
                                 ldr             r12, [r6, #S4_ENV_CNT]  
                                 add             r3, r3, r12  
                                 ldr             r12, [r6, #S4_ENV_END]  
                                 cmp             r3, r12  
                                 bcs             slot4update  
 s4calcenv               str             r3, [r6, #S4_ENV_CNT]  
                                 mov             r3, r3, lsr #ENV_BITS  
                                 subs    r12, r3, #EVC_ENT  
                                 addcc   r12, r11, #T_envcurve           ; r12 = opntbl.envcurve  
                                 ldrcc   r12, [r12, r3, lsl #2]  
                                 ldr             r0, [r6, #S4_TOTALLEVEL]  
                                 subs    r0, r0, r12  
                                 ldr             r3, [r6, #S4_FREQ_INC]          ; freq  
                                 ldr             r12, [r6, #S4_FREQ_CNT]  
                                 add             r3, r3, r12  
                                 str             r3, [r6, #S4_FREQ_CNT]  
                                 bls             slot5calc  
                                 ldr             r12, [r10, #G_FEEDBACK4]  
                                 add             r3, r3, r12  
         if 1  
                                 mov             r3, r3, lsl #(32 - FREQ_BITS)  
         else  
                                 mov             r3, r3, lsr #(FREQ_BITS - SIN_BITS)  
                                 mov             r3, r3, lsl #(32 - SIN_BITS)  
         endif  
                                 mov             r3, r3, lsr #(32 - SIN_BITS)  
                                 add             r12, r11, #T_sintable           ; r12 = opntbl.sintable  
                                 ldr             r3, [r12, r3, lsl #2]  
                                 add             r12, r11, #T_envtable           ; r12 = opntbl.envtable  
                                 ldr             r12, [r12, r0, lsl #2]  
                                 mul             r3, r12, r3  
                                 ldr             r12, [r6, #C_CONNECT4]  
                                 ldr             r0, [r12]  
                                 add             r0, r0, r3, asr #(ENVTBL_BIT + SINTBL_BIT - TL_BITS)  
                                 str             r0, [r12]  
 slot5calc               add             r6, r6, #C_SIZE  slot5calc               add             r6, r6, #C_SIZE
                                 adds    r5, r5, #256                                  adds    r5, r5, #256
                                 bcc             slotcalc_lp                                  bcc             slotcalc_lp
                                   ldr             r0, [r10, #G_OUTDC]
                                 ldr             r12, [r10, #G_OUTDC]  
                                 ldr             r3, [r10, #G_OUTDL]                                  ldr             r3, [r10, #G_OUTDL]
                                 ldr             r4, [r10, #G_OUTDR]                                  ldr             r4, [r10, #G_OUTDR]
                                 add             r3, r3, r12                                  ldr             r12, [r11, #T_CALC1024]
                                 add             r4, r4, r12                                  add             r3, r3, r0
                                   add             r4, r4, r0
                                 mov             r3, r3, asr #FMVOL_SFTBIT                                  mov             r3, r3, asr #FMVOL_SFTBIT
                                 mov             r4, r4, asr #FMVOL_SFTBIT                                  mov             r4, r4, asr #FMVOL_SFTBIT
                                 ldr             r12, [r11, #T_CALC1024]  
                                 subs    lr, lr, r12                                  subs    lr, lr, r12
                                 addle   r12, lr, r12                                  addle   r12, lr, r12
                                 mla             r8, r12, r3, r8                                  mla             r8, r12, r3, r8
                                 mla             r9, r12, r4, r9                                  mla             r9, r12, r4, r9
                                 bgt             mksmp_lp                                  bgt             mksmp_lp
                                 ldr             r0, [r11, #T_FMVOL]                                  ldr             r0, [r11, #T_FMVOL]
                                 mov             r8, r8, asr #FMDIV_BITS                                  mov             r8, r8 asr #FMDIV_BITS
                                 mov             r9, r9, asr #FMDIV_BITS                                  mov             r9, r9 asr #FMDIV_BITS
                                 mul             r8, r0, r8                                  mul             r8, r0, r8
                                   ldr             r12, [r1]
                                 mul             r9, r0, r9                                  mul             r9, r0, r9
                                 ldr             r0, [r1]                                  ldr             r0, [r1, #4]
                                 add             r0, r0, r8, asr #(OPM_OUTSB + FMDIV_BITS + 1 + 6 - FMVOL_SFTBIT - 8);                                  add             r12, r12, r8 asr #(OPM_OUTSB + FMDIV_BITS + 1 + 6 - FMVOL_SFTBIT - 8)
                                 str             r0, [r1], #4                                  str             r12, [r1], #4
                                 ldr             r0, [r1]                                  add             r0, r0, r9 asr #(OPM_OUTSB + FMDIV_BITS + 1 + 6 - FMVOL_SFTBIT - 8)
                                 add             r0, r0, r9, asr #(OPM_OUTSB + FMDIV_BITS + 1 + 6 - FMVOL_SFTBIT - 8);  
                                 str             r0, [r1], #4                                  str             r0, [r1], #4
                                 subs    r2, r2, #1                                  subs    r2, r2, #1
                                 bne             getpcm_lp                                  bne             getpcm_lp
Line 383  dcd_opngen  dcd  opngen Line 321  dcd_opngen  dcd  opngen
 dcd_opnch               dcd             opnch  dcd_opnch               dcd             opnch
 dcd_opncfg              dcd             opncfg + T_ORG  dcd_opncfg              dcd             opncfg + T_ORG
   
 slot1update             ldrb    r3, [r6, #S1_ENV_MODE]  slot1update             SLTUPD  s1calcenv, (S_SIZE * 0), #&fe
                                 sub             r3, r3, #1  slot2update             SLTUPD  s2calcenv, (S_SIZE * 1), #&fd
                                 cmp             r3, #EM_ATTACK  slot3update             SLTUPD  s3calcenv, (S_SIZE * 2), #&fb
                                 addcc   pc, pc, r3, lsl #2  slot4update             SLTUPD  s4calcenv, (S_SIZE * 3), #&f7
                                 b               s1u_off                                         ; EM_OFF  
                                 b               s1u_rel                                         ; EM_RELEASE  
                                 b               s1u_dc2                                         ; EM_DECAY2  
                                 b               s1u_dc1                                         ; EM_DECAY1  
 s1u_att                 strb    r3, [r6, #S1_ENV_MODE]  
                                 ldr             r3, [r6, #S1_DECAYLEVEL]  
                                 str             r3, [r6, #S1_ENV_END]  
                                 ldr             r3, [r6, #S1_ENVINCDECAY1]  
                                 str             r3, [r6, #S1_ENV_INC]  
                                 mov             r3, #EC_DECAY  
                                 b               s1calcenv  
 s1u_dc1                 strb    r3, [r6, #S1_ENV_MODE]  
                                 mov             r3, #EC_OFF  
                                 str             r3, [r6, #S1_ENV_END]  
                                 ldr             r3, [r6, #S1_ENVINCDECAY2]  
                                 str             r3, [r6, #S1_ENV_INC]  
                                 ldr             r3, [r6, #S1_DECAYLEVEL]  
                                 b               s1calcenv  
 s1u_rel                 strb    r3, [r6, #S1_ENV_MODE]  
 s1u_dc2                 add             r3, r12, #1  
                                 str             r3, [r6, #S1_ENV_END]  
                                 mov             r3, #0  
                                 str             r3, [r6, #S1_ENV_INC]  
                                 ldrb    r12, [r6, #C_PLAYING]  
                                 and             r12, r12, #0xfe  
                                 strb    r12, [r6, #C_PLAYING]  
 s1u_off                 mov             r3, #EC_OFF  
                                 b               s1calcenv  
   
 slot2update             ldrb    r3, [r6, #S2_ENV_MODE]  
                                 sub             r3, r3, #1  
                                 cmp             r3, #EM_ATTACK  
                                 addcc   pc, pc, r3, lsl #2  
                                 b               s2u_off                                         ; EM_OFF  
                                 b               s2u_rel                                         ; EM_RELEASE  
                                 b               s2u_dc2                                         ; EM_DECAY2  
                                 b               s2u_dc1                                         ; EM_DECAY1  
 s2u_att                 strb    r3, [r6, #S2_ENV_MODE]  
                                 ldr             r3, [r6, #S2_DECAYLEVEL]  
                                 str             r3, [r6, #S2_ENV_END]  
                                 ldr             r3, [r6, #S2_ENVINCDECAY1]  
                                 str             r3, [r6, #S2_ENV_INC]  
                                 mov             r3, #EC_DECAY  
                                 b               s2calcenv  
 s2u_dc1                 strb    r3, [r6, #S2_ENV_MODE]  
                                 mov             r3, #EC_OFF  
                                 str             r3, [r6, #S2_ENV_END]  
                                 ldr             r3, [r6, #S2_ENVINCDECAY2]  
                                 str             r3, [r6, #S2_ENV_INC]  
                                 ldr             r3, [r6, #S2_DECAYLEVEL]  
                                 b               s2calcenv  
 s2u_rel                 strb    r3, [r6, #S2_ENV_MODE]  
 s2u_dc2                 add             r3, r12, #1  
                                 str             r3, [r6, #S2_ENV_END]  
                                 mov             r3, #0  
                                 str             r3, [r6, #S2_ENV_INC]  
                                 ldrb    r12, [r6, #C_PLAYING]  
                                 and             r12, r12, #0xfd  
                                 strb    r12, [r6, #C_PLAYING]  
 s2u_off                 mov             r3, #EC_OFF  
                                 b               s2calcenv  
   
 slot3update             ldrb    r3, [r6, #S3_ENV_MODE]  
                                 sub             r3, r3, #1  
                                 cmp             r3, #EM_ATTACK  
                                 addcc   pc, pc, r3, lsl #2  
                                 b               s3u_off                                         ; EM_OFF  
                                 b               s3u_rel                                         ; EM_RELEASE  
                                 b               s3u_dc2                                         ; EM_DECAY2  
                                 b               s3u_dc1                                         ; EM_DECAY1  
 s3u_att                 strb    r3, [r6, #S3_ENV_MODE]  
                                 ldr             r3, [r6, #S3_DECAYLEVEL]  
                                 str             r3, [r6, #S3_ENV_END]  
                                 ldr             r3, [r6, #S3_ENVINCDECAY1]  
                                 str             r3, [r6, #S3_ENV_INC]  
                                 mov             r3, #EC_DECAY  
                                 b               s3calcenv  
 s3u_dc1                 strb    r3, [r6, #S3_ENV_MODE]  
                                 mov             r3, #EC_OFF  
                                 str             r3, [r6, #S3_ENV_END]  
                                 ldr             r3, [r6, #S3_ENVINCDECAY2]  
                                 str             r3, [r6, #S3_ENV_INC]  
                                 ldr             r3, [r6, #S3_DECAYLEVEL]  
                                 b               s3calcenv  
 s3u_rel                 strb    r3, [r6, #S3_ENV_MODE]  
 s3u_dc2                 add             r3, r12, #1  
                                 str             r3, [r6, #S3_ENV_END]  
                                 mov             r3, #0  
                                 str             r3, [r6, #S3_ENV_INC]  
                                 ldrb    r12, [r6, #C_PLAYING]  
                                 and             r12, r12, #0xfb  
                                 strb    r12, [r6, #C_PLAYING]  
 s3u_off                 mov             r3, #EC_OFF  
                                 b               s3calcenv  
   
 slot4update             ldrb    r3, [r6, #S4_ENV_MODE]  
                                 sub             r3, r3, #1  
                                 cmp             r3, #EM_ATTACK  
                                 addcc   pc, pc, r3, lsl #2  
                                 b               s4u_off                                         ; EM_OFF  
                                 b               s4u_rel                                         ; EM_RELEASE  
                                 b               s4u_dc2                                         ; EM_DECAY2  
                                 b               s4u_dc1                                         ; EM_DECAY1  
 s4u_att                 strb    r3, [r6, #S4_ENV_MODE]  
                                 ldr             r3, [r6, #S4_DECAYLEVEL]  
                                 str             r3, [r6, #S4_ENV_END]  
                                 ldr             r3, [r6, #S4_ENVINCDECAY1]  
                                 str             r3, [r6, #S4_ENV_INC]  
                                 mov             r3, #EC_DECAY  
                                 b               s4calcenv  
 s4u_dc1                 strb    r3, [r6, #S4_ENV_MODE]  
                                 mov             r3, #EC_OFF  
                                 str             r3, [r6, #S4_ENV_END]  
                                 ldr             r3, [r6, #S4_ENVINCDECAY2]  
                                 str             r3, [r6, #S4_ENV_INC]  
                                 ldr             r3, [r6, #S4_DECAYLEVEL]  
                                 b               s4calcenv  
 s4u_rel                 strb    r3, [r6, #S4_ENV_MODE]  
 s4u_dc2                 add             r3, r12, #1  
                                 str             r3, [r6, #S4_ENV_END]  
                                 mov             r3, #0  
                                 str             r3, [r6, #S4_ENV_INC]  
                                 ldrb    r12, [r6, #C_PLAYING]  
                                 and             r12, r12, #0xf7  
                                 strb    r12, [r6, #C_PLAYING]  
 s4u_off                 mov             r3, #EC_OFF  
                                 b               s4calcenv  
   
         END          END
   

Removed from v.1.1  
changed lines
  Added in v.1.4


RetroPC.NET-CVS <cvs@retropc.net>