⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspproc.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
%ifdef __MSDOS__NEWSYM SBToSPCSpeeds, dd 8000,10989,22222,43478,15874,32258,48000NEWSYM SBToSPCSpeeds2, dd 8192,11289,22579,45158,16384,32768,48000%elseNEWSYM SBToSPCSpeeds, dd 8000,11025,22050,44100,16000,32000,48000%endifNEWSYM NumofSPCBlock, dd 626,456,228,114,314,156,104NEWSYM SPCBlockNum, dd 0NEWSYM NoiseSpeeds, dd 1,16,21,25,31,42,50,63,83,100,125,167,200,250,333,400,500  dd 667,800,1000,1333,1600,2000,2667,3200,4000,5333,6400,8000,10667,16000,32000SECTION .textNEWSYM conv2speed.next    mov eax,[edi]    mov ebx,[SBToSPC]    mul ebx    mov ebx,11025    div ebx    mov [esi],eax    add esi,4    add edi,4    dec ecx    jnz .next    retNEWSYM AdjustFrequency      xor ebx,ebx      mov ah,[MMXSupport]      mov al,[SoundInterpType]      or ah,ah      jnz .mmx      cmp byte[LowPassFilterType],3      jb .nothq      mov byte[LowPassFilterType],0.nothq      cmp al,3      jb .mmx      mov al,1      mov [SoundInterpType],al.mmx      or al,al      jz near .notgaussian      cmp al,2      je near .cubicspline      ja near .fir_mmx      ; Copy from Gaussian to DSPInterP%ifndef __MSDOS__      ; this ifndef is needed the workaround the "snow" in the DOS port      ; used only for Gaussian though      test ah,ah      jne .gaussian_mmx%endif      mov ebx,DSPInterP+1024      mov edx,DSPInterP+1022      mov esi,Gaussian      mov ecx,512.intrploop      movzx eax,word[esi]      mov [edx],ax      mov [ebx],ax      add ebx,2      sub edx,2      add esi,2      dec ecx      jnz .intrploop      mov ebx, DSPInterpolate_4      jmp .notgaussian.gaussian_mmx      mov ebx,Gaussian      mov edx,Gaussian+510      mov esi,DSPInterP      mov ecx,256.intrploopm      mov ax,[ebx+512]      mov [esi],ax      mov ax,[ebx]      mov [esi+2],ax      mov ax,[edx]      mov [esi+4],ax      mov ax,[edx+512]      mov [esi+6],ax      add ebx,2      sub edx,2      add esi,8      dec ecx      jnz .intrploopm      mov ebx, DSPInterpolate_4_mmx      jmp .notgaussian.cubicspline      ; Copy from CubicSpline to DSPInterP      test ah,ah      jne .cubic_mmx      mov ebx,CubicSpline      mov edx,DSPInterP      mov ecx,1024.intrploopb      movzx eax,word[ebx]      push ebx      mov bx,ax      sar bx,3      sub ax,bx      pop ebx      mov [edx],ax      add ebx,2      add edx,2      dec ecx      jnz .intrploopb      mov ebx, DSPInterpolate_4      jmp .notgaussian.cubic_mmx      mov ebx,CubicSpline      mov esi,DSPInterP      mov ecx,256.intrploopmb      mov ax,[ebx+256*6]      mov dx,ax      sar dx,3      sub ax,dx      mov [esi],ax      mov ax,[ebx+256*4]      mov dx,ax      sar dx,3      sub ax,dx      mov [esi+2],ax      mov ax,[ebx+256*2]      mov dx,ax      sar dx,3      sub ax,dx      mov [esi+4],ax      mov ax,[ebx]      mov dx,ax      sar dx,3      sub ax,dx      mov [esi+6],ax      add ebx,2      add esi,8      dec ecx      jnz .intrploopmb      mov ebx, DSPInterpolate_4_mmx      jmp .notgaussian.fir_mmx      mov ebx, DSPInterpolate_8.notgaussian      mov [DSPInterpolate],ebx%ifdef __MSDOS__      call SB_quality_limiter%endif      mov eax,[SoundQuality]      mov ebx,[NumofSPCBlock+eax*4]      cmp byte[StereoSound],1      jne .nostereo      shr ebx,1.nostereo      mov [SPCBlockNum],ebx.next      mov ecx,[SoundQuality]      mov eax,[SBToSPCSpeeds+ecx*4]%ifdef __MSDOS__      ; code for supporting vibra cards (coded by Peter Santing)      cmp byte[vibracard],1      je .vibrafix      cmp byte[SBHDMA],0      je .not16bit.vibrafix      mov eax,[SBToSPCSpeeds2+ecx*4].not16bit%endif      mov [SBToSPC],eax      mov [SBRateb],eax      xor edx,edx      mov ebx,eax      mov eax,32000      shld edx,eax,20      shl eax,20      div ebx      mov [dspPAdj],eax      ; Init all rates      mov esi,EchoRate      mov edi,EchoRateO      mov ecx,16      call conv2speed      mov esi,AttackRate      mov edi,AttackRateO      mov ecx,16      call conv2speed      mov esi,DecayRate      mov edi,DecayRateO      mov ecx,8      call conv2speed      mov esi,SustainRate+4      mov edi,SustainRateO+4      mov ecx,31      call conv2speed      mov esi,Increase+4      mov edi,IncreaseO+4      mov ecx,31      call conv2speed      mov esi,IncreaseBent+4      mov edi,IncreaseBentO+4      mov ecx,31      call conv2speed      mov esi,Decrease+4      mov edi,DecreaseO+4      mov ecx,31      call conv2speed      mov esi,DecreaseRateExp+4      mov edi,DecreaseRateExpO+4      mov ecx,31      call conv2speed      mov dword[Voice0Pitch],0xFFFEFFFE      mov dword[Voice0Pitch+4],0xFFFEFFFE      mov dword[Voice0Pitch+8],0xFFFEFFFE      mov dword[Voice0Pitch+12],0xFFFEFFFE      retNEWSYM InitSPC      push eax      push ebx      push ecx      push edx      call AdjustFrequency      mov ecx,32768      mov edx,32767.nextvol      mov al,dh      imul dl      shr ax,7      movsx bx,al      mov [VolumeConvTable+edx*2],bx      dec edx      dec ecx      jnz .nextvol      mov eax,SPCRAM      mov ebx,0EFh.loop2      mov byte[eax],0      inc eax      dec ebx      jnz .loop2      mov byte[spcX],0      xor eax,eax      xor ebx,ebx      mov ebp,SPCRAM      mov ax,0FFC0h      add ebp,eax      mov [spcPCRam],ebp      mov dword[spcS],1EFh      mov dword[spcRamDP],SPCRAM      ; initialize all the SPC write registers      mov dword[spcWptr+0],SPCRegF0      mov dword[spcWptr+4],SPCRegF1      mov dword[spcWptr+8],SPCRegF2      mov dword[spcWptr+12],SPCRegF3      mov dword[spcWptr+16],SPCRegF4      mov dword[spcWptr+20],SPCRegF5      mov dword[spcWptr+24],SPCRegF6      mov dword[spcWptr+28],SPCRegF7      mov dword[spcWptr+32],SPCRegF8      mov dword[spcWptr+36],SPCRegF9      mov dword[spcWptr+40],SPCRegFA      mov dword[spcWptr+44],SPCRegFB      mov dword[spcWptr+48],SPCRegFC      mov dword[spcWptr+52],SPCRegFD      mov dword[spcWptr+56],SPCRegFE      mov dword[spcWptr+60],SPCRegFF      mov dword[spcRptr+0],RSPCRegF0      mov dword[spcRptr+4],RSPCRegF1      mov dword[spcRptr+8],RSPCRegF2      mov dword[spcRptr+12],RSPCRegF3      mov dword[spcRptr+16],RSPCRegF4      mov dword[spcRptr+20],RSPCRegF5      mov dword[spcRptr+24],RSPCRegF6      mov dword[spcRptr+28],RSPCRegF7      mov dword[spcRptr+32],RSPCRegF8      mov dword[spcRptr+36],RSPCRegF9      mov dword[spcRptr+40],RSPCRegFA      mov dword[spcRptr+44],RSPCRegFB      mov dword[spcRptr+48],RSPCRegFC      mov dword[spcRptr+52],RSPCRegFD      mov dword[spcRptr+56],RSPCRegFE      mov dword[spcRptr+60],RSPCRegFF      mov dword[dspRptr+00h],RDSPReg00      mov dword[dspRptr+04h],RDSPReg01      mov dword[dspRptr+08h],RDSPReg02      mov dword[dspRptr+0Ch],RDSPReg03      mov dword[dspRptr+010h],RDSPReg04      mov dword[dspRptr+014h],RDSPReg05      mov dword[dspRptr+018h],RDSPReg06      mov dword[dspRptr+01Ch],RDSPReg07      mov dword[dspRptr+020h],RDSPReg08      mov dword[dspRptr+024h],RDSPReg09      mov dword[dspRptr+028h],RDSPReg0A      mov dword[dspRptr+02Ch],RDSPReg0B      mov dword[dspRptr+030h],RDSPReg0C      mov dword[dspRptr+034h],RDSPReg0D      mov dword[dspRptr+038h],RDSPReg0E      mov dword[dspRptr+03Ch],RDSPReg0F      mov dword[dspRptr+040h],RDSPReg10      mov dword[dspRptr+044h],RDSPReg11      mov dword[dspRptr+048h],RDSPReg12      mov dword[dspRptr+04Ch],RDSPReg13      mov dword[dspRptr+050h],RDSPReg14      mov dword[dspRptr+054h],RDSPReg15      mov dword[dspRptr+058h],RDSPReg16      mov dword[dspRptr+05Ch],RDSPReg17      mov dword[dspRptr+060h],RDSPReg18      mov dword[dspRptr+064h],RDSPReg19      mov dword[dspRptr+068h],RDSPReg1A      mov dword[dspRptr+06Ch],RDSPReg1B      mov dword[dspRptr+070h],RDSPReg1C      mov dword[dspRptr+074h],RDSPReg1D      mov dword[dspRptr+078h],RDSPReg1E      mov dword[dspRptr+07Ch],RDSPReg1F      mov dword[dspRptr+080h],RDSPReg20      mov dword[dspRptr+084h],RDSPReg21      mov dword[dspRptr+088h],RDSPReg22      mov dword[dspRptr+08Ch],RDSPReg23      mov dword[dspRptr+090h],RDSPReg24      mov dword[dspRptr+094h],RDSPReg25      mov dword[dspRptr+098h],RDSPReg26      mov dword[dspRptr+09Ch],RDSPReg27      mov dword[dspRptr+0A0h],RDSPReg28      mov dword[dspRptr+0A4h],RDSPReg29      mov dword[dspRptr+0A8h],RDSPReg2A      mov dword[dspRptr+0ACh],RDSPReg2B      mov dword[dspRptr+0B0h],RDSPReg2C      mov dword[dspRptr+0B4h],RDSPReg2D      mov dword[dspRptr+0B8h],RDSPReg2E      mov dword[dspRptr+0BCh],RDSPReg2F      mov dword[dspRptr+0C0h],RDSPReg30      mov dword[dspRptr+0C4h],RDSPReg31      mov dword[dspRptr+0C8h],RDSPReg32      mov dword[dspRptr+0CCh],RDSPReg33      mov dword[dspRptr+0D0h],RDSPReg34      mov dword[dspRptr+0D4h],RDSPReg35      mov dword[dspRptr+0D8h],RDSPReg36      mov dword[dspRptr+0DCh],RDSPReg37      mov dword[dspRptr+0E0h],RDSPReg38      mov dword[dspRptr+0E4h],RDSPReg39      mov dword[dspRptr+0E8h],RDSPReg3A      mov dword[dspRptr+0ECh],RDSPReg3B      mov dword[dspRptr+0F0h],RDSPReg3C      mov dword[dspRptr+0F4h],RDSPReg3D      mov dword[dspRptr+0F8h],RDSPReg3E      mov dword[dspRptr+0FCh],RDSPReg3F      mov dword[dspRptr+0100h],RDSPReg40      mov dword[dspRptr+0104h],RDSPReg41      mov dword[dspRptr+0108h],RDSPReg42      mov dword[dspRptr+010Ch],RDSPReg43      mov dword[dspRptr+0110h],RDSPReg44      mov dword[dspRptr+0114h],RDSPReg45      mov dword[dspRptr+0118h],RDSPReg46      mov dword[dspRptr+011Ch],RDSPReg47      mov dword[dspRptr+0120h],RDSPReg48      mov dword[dspRptr+0124h],RDSPReg49      mov dword[dspRptr+0128h],RDSPReg4A      mov dword[dspRptr+012Ch],RDSPReg4B      mov dword[dspRptr+0130h],RDSPReg4C      mov dword[dspRptr+0134h],RDSPReg4D      mov dword[dspRptr+0138h],RDSPReg4E      mov dword[dspRptr+013Ch],RDSPReg4F      mov dword[dspRptr+0140h],RDSPReg50      mov dword[dspRptr+0144h],RDSPReg51      mov dword[dspRptr+0148h],RDSPReg52      mov dword[dspRptr+014Ch],RDSPReg53      mov dword[dspRptr+0150h],RDSPReg54      mov dword[dspRptr+0154h],RDSPReg55      mov dword[dspRptr+0158h],RDSPReg56      mov dword[dspRptr+015Ch],RDSPReg57      mov dword[dspRptr+0160h],RDSPReg58      mov dword[dspRptr+0164h],RDSPReg59      mov dword[dspRptr+0168h],RDSPReg5A      mov dword[dspRptr+016Ch],RDSPReg5B      mov dword[dspRptr+0170h],RDSPReg5C      mov dword[dspRptr+0174h],RDSPReg5D      mov dword[dspRptr+0178h],RDSPReg5E      mov dword[dspRptr+017Ch],RDSPReg5F      mov dword[dspRptr+0180h],RDSPReg60

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -