Diff for /np2/win9x/x86/opngeng.x86 between versions 1.5 and 1.8

version 1.5, 2003/10/27 15:06:31 version 1.8, 2011/02/04 14:43:55
Line 1 Line 1
   
   FMDIV_BITS              equ             8
   FMDIV_ENT               equ             (1 << FMDIV_BITS)
   FMVOL_SFTBIT    equ             4
   
   SIN_BITS                equ             11
   EVC_BITS                equ             10
   ENV_BITS                equ             16
   KF_BITS                 equ             6
   FREQ_BITS               equ             21
   ENVTBL_BIT              equ             14
   SINTBL_BIT              equ             14
   
   TL_BITS                 equ             (FREQ_BITS+2)
   OPM_OUTSB               equ             (TL_BITS + 2 - 16)
   
   SIN_ENT                 equ             (1 << SIN_BITS)
   EVC_ENT                 equ             (1 << EVC_BITS)
   
   EC_ATTACK               equ             0
   EC_DECAY                equ             (EVC_ENT << ENV_BITS)
   EC_OFF                  equ             ((2 * EVC_ENT) << ENV_BITS)
   
   EM_ATTACK               equ             4
   EM_DECAY1               equ             3
   EM_DECAY2               equ             2
   EM_RELEASE              equ             1
   EM_OFF                  equ             0
   
   
                                 struc   slot_t                                  struc   slot_t
 .detune1                resd    1               ; 00  .detune1                resd    1               ; 00
 .totallevel             resd    1               ; 04  .totallevel             resd    1               ; 04
Line 21 Line 50
 .env_inc_decay1 resd    1               ; 3c  .env_inc_decay1 resd    1               ; 3c
 .env_inc_decay2 resd    1               ; 40  .env_inc_decay2 resd    1               ; 40
 .env_inc_rel    resd    1               ; 44  .env_inc_rel    resd    1               ; 44
 .size  
                                 endstruc                                  endstruc
   
                                 struc   ch_t                                  struc   ch_t
 .slot                   resb    (slot_t.size * 4)  .slot                   resb    (slot_t_size * 4)
 .algorithm              resb    1  .algorithm              resb    1
 .feedback               resb    1  .feedback               resb    1
 .playing                resb    1  .playing                resb    1
Line 43 Line 71
 .extop                  resb    1  .extop                  resb    1
 .stereo                 resb    1  .stereo                 resb    1
                                 resb    1                                  resb    1
 .size  
                                 endstruc                                  endstruc
   
                                 struc opngen_t                                  struc opngen_t
Line 66 Line 93
 .vr_en                  resd    1  .vr_en                  resd    1
 .vr_l                   resd    1  .vr_l                   resd    1
 .vr_r                   resd    1  .vr_r                   resd    1
                                 endstruc  
   
   
 FMDIV_BITS              equ             8  .sintable               resd    SIN_ENT
 FMDIV_ENT               equ             (1 << FMDIV_BITS)  .envtable               resd    EVC_ENT
 FMVOL_SFTBIT    equ             4  .envcurve               resd    (EVC_ENT*2 + 1)
                                   endstruc
 SIN_BITS                equ             11  
 EVC_BITS                equ             10  
 ENV_BITS                equ             16  
 KF_BITS                 equ             6  
 FREQ_BITS               equ             20  
 ENVTBL_BIT              equ             14  
 SINTBL_BIT              equ             14  
   
 TL_BITS                 equ             (FREQ_BITS+2)  
 OPM_OUTSB               equ             (TL_BITS + 2 - 16)  
   
 SIN_ENT                 equ             (1 << SIN_BITS)  
 EVC_ENT                 equ             (1 << EVC_BITS)  
   
 EC_ATTACK               equ             0  
 EC_DECAY                equ             (EVC_ENT << ENV_BITS)  
 EC_OFF                  equ             ((2 * EVC_ENT) << ENV_BITS)  
   
 EM_ATTACK               equ             4  
 EM_DECAY1               equ             3  
 EM_DECAY2               equ             2  
 EM_RELEASE              equ             1  
 EM_OFF                  equ             0  
   
   
 section .text  section .text
Line 105  section .text Line 107  section .text
         extern  _opncfg          extern  _opncfg
   
         extern  _sinshift          extern  _sinshift
         extern  _sintable  
         extern  _envshift          extern  _envshift
         extern  _envtable  
         extern  _env_curve  ENVCURVE        equ             (_opncfg + opncfg_t.envcurve)
   SINTABLE        equ             (_opncfg + opncfg_t.sintable)
   ENVTABLE        equ             (_opncfg + opncfg_t.envtable)
   
   
         global  @opngen_getpcm@12          global  @opngen_getpcm@12
Line 119  section .text Line 122  section .text
                                 shr             eax, (FREQ_BITS - SIN_BITS)                                  shr             eax, (FREQ_BITS - SIN_BITS)
                                 and             eax, (SIN_ENT - 1)                                  and             eax, (SIN_ENT - 1)
                                 mov             cl, [_sinshift + eax]                                  mov             cl, [_sinshift + eax]
                                 mov             eax, [_sintable + eax*4]                                  mov             eax, [SINTABLE + eax*4]
                                 add             cl, [_envshift + edx]                                  add             cl, [_envshift + edx]
                                 imul    eax, [_envtable + edx*4]                                  imul    eax, [ENVTABLE + edx*4]
                                 sar             eax, cl                                  sar             eax, cl
 %endmacro  %endmacro
   
Line 135  section .text Line 138  section .text
 %2:                             mov             [edi + slot_t.env_cnt], eax  %2:                             mov             [edi + slot_t.env_cnt], eax
                                 shr             eax, ENV_BITS                                  shr             eax, ENV_BITS
                                 mov             edx, [edi + slot_t.totallevel]                                  mov             edx, [edi + slot_t.totallevel]
                                 sub             edx, [_env_curve + eax*4]                                  sub             edx, [ENVCURVE + eax*4]
 %endmacro  %endmacro
   
 %macro  setenv          3  %macro  setenv          3
Line 233  og_algchk:  cmp  byte [esi + ch_t.algori Line 236  og_algchk:  cmp  byte [esi + ch_t.algori
                                 jmp             short og_calcslot3                                  jmp             short og_calcslot3
 og_calcalg5:    mov             ebx, [esi + ch_t.connect1]      ; case ALG != 5  og_calcalg5:    mov             ebx, [esi + ch_t.connect1]      ; case ALG != 5
                                 add             [ebx], eax                                  add             [ebx], eax
 og_calcslot3:   add             edi, byte slot_t.size           ; slot3 calculate  og_calcslot3:   add             edi, byte slot_t_size           ; slot3 calculate
                                 calcenv envcalc2, envret2                                  calcenv envcalc2, envret2
                                 jl              short og_calcslot2                                  jl              short og_calcslot2
                                 mov             eax, [_opngen + opngen_t.feedback2]                                  mov             eax, [_opngen + opngen_t.feedback2]
                                 op_out                                  op_out
                                 mov             ebx, [esi + ch_t.connect2]                                  mov             ebx, [esi + ch_t.connect2]
                                 add             [ebx], eax                                  add             [ebx], eax
 og_calcslot2:   add             edi, byte slot_t.size           ; slot2 calculate  og_calcslot2:   add             edi, byte slot_t_size           ; slot2 calculate
                                 calcenv envcalc3, envret3                                  calcenv envcalc3, envret3
                                 jl              short og_calcslot4                                  jl              short og_calcslot4
                                 mov             eax, [_opngen + opngen_t.feedback3]                                  mov             eax, [_opngen + opngen_t.feedback3]
                                 op_out                                  op_out
                                 mov             ebx, [esi + ch_t.connect3]                                  mov             ebx, [esi + ch_t.connect3]
                                 add             [ebx], eax                                  add             [ebx], eax
 og_calcslot4:   add             edi, byte slot_t.size           ; slot4 calculate  og_calcslot4:   add             edi, byte slot_t_size           ; slot4 calculate
                                 calcenv envcalc4, envret4                                  calcenv envcalc4, envret4
                                 jl              short og_calcsloted                                  jl              short og_calcsloted
                                 mov             eax, [_opngen + opngen_t.feedback4]                                  mov             eax, [_opngen + opngen_t.feedback4]
Line 255  og_calcslot4: add  edi, byte slot_t.size Line 258  og_calcslot4: add  edi, byte slot_t.size
                                 mov             ebx, [esi + ch_t.connect4]                                  mov             ebx, [esi + ch_t.connect4]
                                 add             [ebx], eax                                  add             [ebx], eax
 og_calcsloted:  inc             dword [_opngen + opngen_t.playing]  og_calcsloted:  inc             dword [_opngen + opngen_t.playing]
 og_calcch_nt:   add             esi, ch_t.size  og_calcch_nt:   add             esi, ch_t_size
                                 dec             ch                                  dec             ch
                                 jne             near og_calcch_lp                                  jne             near og_calcch_lp
                                 mov             eax, [_opngen + opngen_t.outdc]                                  mov             eax, [_opngen + opngen_t.outdc]
Line 365  ogv_algchk:  cmp  byte [esi + ch_t.algor Line 368  ogv_algchk:  cmp  byte [esi + ch_t.algor
                                 jmp             short ogv_calcslot3                                  jmp             short ogv_calcslot3
 ogv_calcalg5:   mov             ebx, [esi + ch_t.connect1]      ; case ALG != 5  ogv_calcalg5:   mov             ebx, [esi + ch_t.connect1]      ; case ALG != 5
                                 add             [ebx], eax                                  add             [ebx], eax
 ogv_calcslot3:  add             edi, byte slot_t.size           ; slot3 calculate  ogv_calcslot3:  add             edi, byte slot_t_size           ; slot3 calculate
                                 calcenv vrenvcalc2, vrenvret2                                  calcenv vrenvcalc2, vrenvret2
                                 jl              short ogv_calcslot2                                  jl              short ogv_calcslot2
                                 mov             eax, [_opngen + opngen_t.feedback2]                                  mov             eax, [_opngen + opngen_t.feedback2]
                                 op_out                                  op_out
                                 mov             ebx, [esi + ch_t.connect2]                                  mov             ebx, [esi + ch_t.connect2]
                                 add             [ebx], eax                                  add             [ebx], eax
 ogv_calcslot2:  add             edi, byte slot_t.size           ; slot2 calculate  ogv_calcslot2:  add             edi, byte slot_t_size           ; slot2 calculate
                                 calcenv vrenvcalc3, vrenvret3                                  calcenv vrenvcalc3, vrenvret3
                                 jl              short ogv_calcslot4                                  jl              short ogv_calcslot4
                                 mov             eax, [_opngen + opngen_t.feedback3]                                  mov             eax, [_opngen + opngen_t.feedback3]
                                 op_out                                  op_out
                                 mov             ebx, [esi + ch_t.connect3]                                  mov             ebx, [esi + ch_t.connect3]
                                 add             [ebx], eax                                  add             [ebx], eax
 ogv_calcslot4:  add             edi, byte slot_t.size           ; slot4 calculate  ogv_calcslot4:  add             edi, byte slot_t_size           ; slot4 calculate
                                 calcenv vrenvcalc4, vrenvret4                                  calcenv vrenvcalc4, vrenvret4
                                 jl              short ogv_calcsloted                                  jl              short ogv_calcsloted
                                 mov             eax, [_opngen + opngen_t.feedback4]                                  mov             eax, [_opngen + opngen_t.feedback4]
                                 op_out                                  op_out
                                 mov             ebx, [esi + ch_t.connect4]                                  mov             ebx, [esi + ch_t.connect4]
                                 add             [ebx], eax                                  add             [ebx], eax
 ogv_calcsloted: add             edi, byte (ch_t.size - (slot_t.size * 3))  ogv_calcsloted: add             edi, byte (ch_t_size - (slot_t_size * 3))
                                 dec             ch                                  dec             ch
                                 jne             near ogv_calcch_lp                                  jne             near ogv_calcch_lp
                                 mov             eax, [_opngen + opngen_t.outdl]                                  mov             eax, [_opngen + opngen_t.outdl]
Line 446  ogv_noupdate: ret  4 Line 449  ogv_noupdate: ret  4
                                 setenv  vrenvcalc3, vrenvret3, 4                                  setenv  vrenvcalc3, vrenvret3, 4
                                 setenv  vrenvcalc4, vrenvret4, 8                                  setenv  vrenvcalc4, vrenvret4, 8
   
         ends  
   

Removed from v.1.5  
changed lines
  Added in v.1.8


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