📄 dsp.asm
字号:
NEWSYM RDSPRegA1 ; mov al,[DSPMem+0A1h] retNEWSYM RDSPRegA2 ; mov al,[DSPMem+0A2h] retNEWSYM RDSPRegA3 ; mov al,[DSPMem+0A3h] retNEWSYM RDSPRegA4 ; mov al,[DSPMem+0A4h] retNEWSYM RDSPRegA5 ; mov al,[DSPMem+0A5h] retNEWSYM RDSPRegA6 ; mov al,[DSPMem+0A6h] retNEWSYM RDSPRegA7 ; mov al,[DSPMem+0A7h] retNEWSYM RDSPRegA8 ; mov al,[DSPMem+0A8h] retNEWSYM RDSPRegA9 ; mov al,[DSPMem+0A9h] retNEWSYM RDSPRegAA ; mov al,[DSPMem+0AAh] retNEWSYM RDSPRegAB ; mov al,[DSPMem+0ABh] retNEWSYM RDSPRegAC ; mov al,[DSPMem+0ACh] retNEWSYM RDSPRegAD ; mov al,[DSPMem+0ADh] retNEWSYM RDSPRegAE ; mov al,[DSPMem+0AEh] retNEWSYM RDSPRegAF ; mov al,[DSPMem+0AFh] retNEWSYM RDSPRegB0 ; mov al,[DSPMem+0B0h] retNEWSYM RDSPRegB1 ; mov al,[DSPMem+0B1h] retNEWSYM RDSPRegB2 ; mov al,[DSPMem+0B2h] retNEWSYM RDSPRegB3 ; mov al,[DSPMem+0B3h] retNEWSYM RDSPRegB4 ; mov al,[DSPMem+0B4h] retNEWSYM RDSPRegB5 ; mov al,[DSPMem+0B5h] retNEWSYM RDSPRegB6 ; mov al,[DSPMem+0B6h] retNEWSYM RDSPRegB7 ; mov al,[DSPMem+0B7h] retNEWSYM RDSPRegB8 ; mov al,[DSPMem+0B8h] retNEWSYM RDSPRegB9 ; mov al,[DSPMem+0B9h] retNEWSYM RDSPRegBA ; mov al,[DSPMem+0BAh] retNEWSYM RDSPRegBB ; mov al,[DSPMem+0BBh] retNEWSYM RDSPRegBC ; mov al,[DSPMem+0BCh] retNEWSYM RDSPRegBD ; mov al,[DSPMem+0BDh] retNEWSYM RDSPRegBE ; mov al,[DSPMem+0BEh] retNEWSYM RDSPRegBF ; mov al,[DSPMem+0BFh] retNEWSYM RDSPRegC0 ; mov al,[DSPMem+0C0h] retNEWSYM RDSPRegC1 ; mov al,[DSPMem+0C1h] retNEWSYM RDSPRegC2 ; mov al,[DSPMem+0C2h] retNEWSYM RDSPRegC3 ; mov al,[DSPMem+0C3h] retNEWSYM RDSPRegC4 ; mov al,[DSPMem+0C4h] retNEWSYM RDSPRegC5 ; mov al,[DSPMem+0C5h] retNEWSYM RDSPRegC6 ; mov al,[DSPMem+0C6h] retNEWSYM RDSPRegC7 ; mov al,[DSPMem+0C7h] retNEWSYM RDSPRegC8 ; mov al,[DSPMem+0C8h] retNEWSYM RDSPRegC9 ; mov al,[DSPMem+0C9h] retNEWSYM RDSPRegCA ; mov al,[DSPMem+0CAh] retNEWSYM RDSPRegCB ; mov al,[DSPMem+0CBh] retNEWSYM RDSPRegCC ; mov al,[DSPMem+0CCh] retNEWSYM RDSPRegCD ; mov al,[DSPMem+0CDh] retNEWSYM RDSPRegCE ; mov al,[DSPMem+0CEh] retNEWSYM RDSPRegCF ; mov al,[DSPMem+0CFh] retNEWSYM RDSPRegD0 ; mov al,[DSPMem+0D0h] retNEWSYM RDSPRegD1 ; mov al,[DSPMem+0D1h] retNEWSYM RDSPRegD2 ; mov al,[DSPMem+0D2h] retNEWSYM RDSPRegD3 ; mov al,[DSPMem+0D3h] retNEWSYM RDSPRegD4 ; mov al,[DSPMem+0D4h] retNEWSYM RDSPRegD5 ; mov al,[DSPMem+0D5h] retNEWSYM RDSPRegD6 ; mov al,[DSPMem+0D6h] retNEWSYM RDSPRegD7 ; mov al,[DSPMem+0D7h] retNEWSYM RDSPRegD8 ; mov al,[DSPMem+0D8h] retNEWSYM RDSPRegD9 ; mov al,[DSPMem+0D9h] retNEWSYM RDSPRegDA ; mov al,[DSPMem+0DAh] retNEWSYM RDSPRegDB ; mov al,[DSPMem+0DBh] retNEWSYM RDSPRegDC ; mov al,[DSPMem+0DCh] retNEWSYM RDSPRegDD ; mov al,[DSPMem+0DDh] retNEWSYM RDSPRegDE ; mov al,[DSPMem+0DEh] retNEWSYM RDSPRegDF ; mov al,[DSPMem+0DFh] retNEWSYM RDSPRegE0 ; mov al,[DSPMem+0E0h] retNEWSYM RDSPRegE1 ; mov al,[DSPMem+0E1h] retNEWSYM RDSPRegE2 ; mov al,[DSPMem+0E2h] retNEWSYM RDSPRegE3 ; mov al,[DSPMem+0E3h] retNEWSYM RDSPRegE4 ; mov al,[DSPMem+0E4h] retNEWSYM RDSPRegE5 ; mov al,[DSPMem+0E5h] retNEWSYM RDSPRegE6 ; mov al,[DSPMem+0E6h] retNEWSYM RDSPRegE7 ; mov al,[DSPMem+0E7h] retNEWSYM RDSPRegE8 ; mov al,[DSPMem+0E8h] retNEWSYM RDSPRegE9 ; mov al,[DSPMem+0E9h] retNEWSYM RDSPRegEA ; mov al,[DSPMem+0EAh] retNEWSYM RDSPRegEB ; mov al,[DSPMem+0EBh] retNEWSYM RDSPRegEC ; mov al,[DSPMem+0ECh] retNEWSYM RDSPRegED ; mov al,[DSPMem+0EDh] retNEWSYM RDSPRegEE ; mov al,[DSPMem+0EEh] retNEWSYM RDSPRegEF ; mov al,[DSPMem+0EFh] retNEWSYM RDSPRegF0 ; mov al,[DSPMem+0F0h] retNEWSYM RDSPRegF1 ; mov al,[DSPMem+0F1h] retNEWSYM RDSPRegF2 ; mov al,[DSPMem+0F2h] retNEWSYM RDSPRegF3 ; mov al,[DSPMem+0F3h] retNEWSYM RDSPRegF4 ; mov al,[DSPMem+0F4h] retNEWSYM RDSPRegF5 ; mov al,[DSPMem+0F5h] retNEWSYM RDSPRegF6 ; mov al,[DSPMem+0F6h] retNEWSYM RDSPRegF7 ; mov al,[DSPMem+0F7h] retNEWSYM RDSPRegF8 ; mov al,[DSPMem+0F8h] retNEWSYM RDSPRegF9 ; mov al,[DSPMem+0F9h] retNEWSYM RDSPRegFA ; mov al,[DSPMem+0FAh] retNEWSYM RDSPRegFB ; mov al,[DSPMem+0FBh] retNEWSYM RDSPRegFC ; mov al,[DSPMem+0FCh] retNEWSYM RDSPRegFD ; mov al,[DSPMem+0FDh] retNEWSYM RDSPRegFE ; mov al,[DSPMem+0FEh] retNEWSYM RDSPRegFF ; mov al,[DSPMem+0FFh] ret%macro ProcessGain 1 push eax push ebx push edx test byte[DSPMem+07h+%1*10h],80h jz near %%Direct test byte[DSPMem+07h+%1*10h],40h jnz near %%Increase test byte[DSPMem+07h+%1*10h],20h jz %%LinearDec xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[DecreaseRateExp+eax*4] mov dword[Voice0EnvInc+%1*4],007FFFFFh shr ebx,5 mov [Voice0Time+%1*4],ebx mov [GainDecBendDataTime+%1*4],ebx xor edx,edx mov eax,127*65536 sub eax,118*65536 mov byte[GainDecBendDataPos+%1],0 mov byte[GainDecBendDataDat+%1],127 div ebx neg eax mov [Voice0IncNumber+%1*4],eax pop edx pop ebx pop eax mov byte[Voice0State+%1],7 ret%%LinearDec xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[Decrease+eax*4] mov dword[Voice0EnvInc+%1*4],007FFFFFh mov [Voice0Time+%1*4],ebx xor edx,edx mov eax,127*65536 div ebx neg eax mov [Voice0IncNumber+%1*4],eax pop edx pop ebx pop eax mov byte[Voice0State+%1],5 ret%%Increase test byte[DSPMem+07h+%1*10h],20h jz %%LinearInc xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[Increase+eax*4] mov dword[Voice0EnvInc+%1*4],0 mov [Voice0Time+%1*4],ebx xor edx,edx mov eax,127*65536 div ebx mov [Voice0IncNumber+%1*4],eax mov ebx,[Voice0Time+%1*4] mov eax,ebx shr eax,2 sub ebx,eax dec ebx mov [Voice0Time+%1*4],ebx pop edx pop ebx pop eax mov byte[Voice0State+%1],6 ret%%LinearInc xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[Increase+eax*4] mov dword[Voice0EnvInc+%1*4],0 mov [Voice0Time+%1*4],ebx xor edx,edx mov eax,127*65536 div ebx mov [Voice0IncNumber+%1*4],eax pop edx pop ebx pop eax mov byte[Voice0State+%1],3 ret%%Direct mov al,[DSPMem+07h+%1*10h] and al,7Fh mov dword[Voice0EnvInc+%1*4],0 mov [Voice0EnvInc+%1*4+2],al mov dword[Voice0Time+%1*4],0FFFFFFFFh mov dword[Voice0IncNumber+%1*4],0 pop edx pop ebx pop eax mov byte[Voice0State+%1],4 ret%endmacro%macro ProcessGain2 1 push eax push ebx push edx test byte[DSPMem+07h+%1*10h],80h jz near %%Direct test byte[DSPMem+07h+%1*10h],40h jnz near %%Increase test byte[DSPMem+07h+%1*10h],20h jz %%LinearDec xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[DecreaseRateExp+eax*4] shr ebx,5 mov [Voice0Time+%1*4],ebx mov [GainDecBendDataTime+%1*4],ebx xor edx,edx mov dh,118 mov dl,[Voice0EnvInc+%1*4+2] xor eax,eax mov al,[VolumeConvTable+edx*2] xor edx,edx shl eax,16 mov dl,[Voice0EnvInc+%1*4+2] neg eax shl edx,16 add eax,edx xor edx,edx mov byte[GainDecBendDataPos+%1],0 div ebx neg eax mov [Voice0IncNumber+%1*4],eax mov al,[Voice0EnvInc+%1*4+2] mov [GainDecBendDataDat+%1],al pop edx pop ebx pop eax mov byte[Voice0State+%1],7 ret%%LinearDec xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[Decrease+eax*4] mov [Voice0Time+%1*4],ebx xor edx,edx xor eax,eax mov al,[Voice0EnvInc+%1*4+2] shl eax,16 div ebx neg eax mov [Voice0IncNumber+%1*4],eax pop edx pop ebx pop eax mov byte[Voice0State+%1],5 ret%%Increase test byte[DSPMem+07h+%1*10h],20h jz %%LinearInc xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[Increase+eax*4] mov [Voice0Time+%1*4],ebx xor edx,edx xor eax,eax mov al,[Voice0EnvInc+%1*4+2] inc al test al,80h jz %%noof mov al,127%%noof xor al,127 shl eax,16 div ebx mov [Voice0IncNumber+%1*4],eax mov ebx,[Voice0Time+%1*4] mov eax,ebx shr eax,2 sub ebx,eax dec ebx mov [Voice0Time+%1*4],ebx pop edx pop ebx pop eax mov byte[Voice0State+%1],6 ret%%LinearInc xor eax,eax mov al,[DSPMem+07h+%1*10h] and al,1Fh mov ebx,[Increase+eax*4] mov [Voice0Time+%1*4],ebx xor edx,edx xor eax,eax mov al,[Voice0EnvInc+%1*4+2] inc al test al,80h jz %%noof2 mov al,127%%noof2 xor al,127 shl eax,16 div ebx mov [Voice0IncNumber+%1*4],eax pop edx pop ebx pop eax mov byte[Voice0State+%1],3 ret%%Direct mov al,[DSPMem+07h+%1*10h] and al,7Fh mov dword[Voice0EnvInc+%1*4],0 mov [Voice0EnvInc+%1*4+2],al mov dword[Voice0Time+%1*4],0FFFFFFFFh mov dword[Voice0IncNumber+%1*4],0 pop edx pop ebx pop eax mov byte[Voice0State+%1],4 ret%%end pop edx pop ebx pop eax ret%endmacro%macro SwitchSustain 1 push eax push ebx push edx mov al,[Voice0EnvInc+%1*4+2] mov [GainDecBendDataDat+%1],al cmp byte[Voice0State+%1],8 je %%full cmp byte[Voice0State+%1],2 jae %%nofull%%full mov byte[GainDecBendDataDat+%1],7Fh%%nofull mov al,[DSPMem+05h+%1*10h] shr al,4 and eax,07h mov edx,[DecayRate+eax*4] xor eax,eax mov al,[DSPMem+06h+%1*10h] and al,1Fh mov ebx,[SustainRate+eax*4] cmp edx,ebx jae near %%decayover ; ebx = total sustain time xor eax,eax mov al,[DSPMem+06h+%1*10h] shr al,5 mov al,[AdsrSustLevLoc+eax] ; traverse through al entries in edx time ; then through 64-al entries in ebx-edx time mov [AdsrBlocksLeft+%1],al sub ebx,edx push ebx push eax mov ebx,eax mov eax,edx xor edx,edx or ebx,ebx jz .oopszero div ebx.oopszero mov [Voice0Time+%1*4],eax mov [GainDecBendDataTime+%1*4],eax pop eax pop ebx mov edx,ebx mov ebx,64 sub bl,al mov eax,edx xor edx,edx div ebx mov [AdsrNextTimeDepth+%1*4],eax mov dword[Voice0EnvInc+%1*4],0 mov al,[GainDecBendDataDat+%1] mov [Voice0EnvInc+%1*4+2],al mov ebx,[Voice0Time+%1*4] xor edx,edx mov dh,122 mov dl,[Voice0EnvInc+%1*4+2] xor eax,eax mov al,[VolumeConvTable+edx*2] xor edx,edx shl eax,16 mov dl,[Voice0EnvInc+%1*4+2] neg eax shl edx,16 add eax,edx xor edx,edx mov byte[GainDecBendDataPos+%1],0 div ebx neg eax mov [Voice0IncNumber+%1*4],eax pop edx pop ebx pop eax mov byte[Voice0State+%1],9 ret%%decayover sub edx,ebx push ebx mov eax,edx xor ebx,ebx mov bl,[DSPMem+06h+%1*10h] shr bl,5 xor bl,07h mul ebx mov ebx,7 div ebx pop ebx add ebx,eax mov dword[Voice0EnvInc+%1*4],007FFFFFh shr ebx,5 mov [Voice0Time+%1*4],ebx mov [GainDecBendDataTime+%1*4],ebx xor edx,edx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -