--- np2/win9x/x86/opngeng.x86 2003/10/27 15:06:31 1.5 +++ np2/win9x/x86/opngeng.x86 2003/11/28 08:01:33 1.6 @@ -1,4 +1,33 @@ +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 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 + + struc slot_t .detune1 resd 1 ; 00 .totallevel resd 1 ; 04 @@ -66,36 +95,11 @@ .vr_en resd 1 .vr_l resd 1 .vr_r resd 1 - endstruc - -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 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 +.sintable resd SIN_ENT +.envtable resd EVC_ENT +.envcurve resd (EVC_ENT*2 + 1) + endstruc section .text @@ -105,10 +109,11 @@ section .text extern _opncfg extern _sinshift - extern _sintable 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 @@ -119,9 +124,9 @@ section .text shr eax, (FREQ_BITS - SIN_BITS) and eax, (SIN_ENT - 1) mov cl, [_sinshift + eax] - mov eax, [_sintable + eax*4] + mov eax, [SINTABLE + eax*4] add cl, [_envshift + edx] - imul eax, [_envtable + edx*4] + imul eax, [ENVTABLE + edx*4] sar eax, cl %endmacro @@ -135,7 +140,7 @@ section .text %2: mov [edi + slot_t.env_cnt], eax shr eax, ENV_BITS mov edx, [edi + slot_t.totallevel] - sub edx, [_env_curve + eax*4] + sub edx, [ENVCURVE + eax*4] %endmacro %macro setenv 3