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

📄 mvreverb.nasm

📁 An interactive water fountain. A realistic water source in your pocket with full control. Contro
💻 NASM
字号:
;Copyright (C) 1994-1995 Apogee Software, Ltd.;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;as published by the Free Software Foundation; either version 2;of the License, or (at your option) any later version.;;This program is distributed in the hope that it will be useful,;but WITHOUT ANY WARRANTY; without even the implied warranty of;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.;;See the GNU General Public License for more details.;;You should have received a copy of the GNU General Public License;along with this program; if not, write to the Free Software;Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.;;Modifications for JonoF's port by Jonathon Fowler (jonof@edgenetwk.com)CPU 386SECTION .data%ifdef UNDERSCORES%define MV_16BitReverb		_MV_16BitReverb%define MV_8BitReverb		_MV_8BitReverb%define MV_16BitReverbFast	_MV_16BitReverbFast%define MV_8BitReverbFast	_MV_8BitReverbFast%endif	GLOBAL MV_16BitReverb	GLOBAL MV_8BitReverb	GLOBAL MV_16BitReverbFast	GLOBAL MV_8BitReverbFast%define OFFSET;================;; MV_16BitReverb;;================; eax - source position; edx - destination position; ebx - Volume table; ecx - number of samples	ALIGN 4MV_16BitReverb:	pushad	mov     eax, dword [esp + 0*4 + 9*4]	mov     edx, dword [esp + 1*4 + 9*4]	mov     ebx, dword [esp + 2*4 + 9*4]	mov     ecx, dword [esp + 3*4 + 9*4]        mov     esi, eax        lea     edi, [edx - 2]        ALIGN 4rev16loop:        movzx   eax, word [esi]                 ; get sample        add     edi, 2        movzx   edx, ah        sub     ah, ah        movsx   eax, byte [2*eax+ebx+1]         ; volume translate low byte of sample        xor     edx, 80h        movsx   edx, word [2*edx+ebx]           ; volume translate high byte of sample        add     esi, 2        lea     eax, [ eax + edx + 80h ]        ; mix high byte of sample        dec     ecx                             ; decrement count        mov     word [edi], ax                  ; write new sample to destination        jnz     rev16loop                       ; loop	popad        ret;================;; MV_8BitReverb;;================; eax - source position; edx - destination position; ebx - Volume table; ecx - number of samples	ALIGN 4MV_8BitReverb:	pushad	mov     eax, dword [esp + 0*4 + 9*4]	mov     edx, dword [esp + 1*4 + 9*4]	mov     ebx, dword [esp + 2*4 + 9*4]	mov     ecx, dword [esp + 3*4 + 9*4]        mov     esi, eax        lea     edi, [edx - 1]        xor     eax, eax        ALIGN 4rev8loop:;        movzx   eax, byte ptr [esi]             ; get sample        mov     al, byte [esi]                  ; get sample        inc     edi;        movsx   eax, byte ptr [2*eax+ebx]       ; volume translate sample        mov     al, byte [2*eax+ebx]            ; volume translate sample        inc     esi;        add     eax, 80h        add     al, 80h        dec     ecx                             ; decrement count        mov     byte [edi], al                  ; write new sample to destination        jnz     rev8loop                        ; loop	popad        ret;================;; MV_16BitReverbFast;;================; eax - source position; edx - destination position; ebx - number of samples; ecx - shift	ALIGN 4MV_16BitReverbFast:	pushad	mov     eax, dword [esp + 0*4 + 9*4]	mov     edx, dword [esp + 1*4 + 9*4]	mov     ebx, dword [esp + 2*4 + 9*4]	mov     ecx, dword [esp + 3*4 + 9*4]        mov     esi, eax        mov     eax,OFFSET rpatch16+3        mov     byte [eax],cl        lea     edi, [edx - 2]        ALIGN 4frev16loop:        mov     ax, word [esi]                  ; get sample        add     edi, 2rpatch16:        sar     ax, 5    ;;;;Add 1 before shift        add     esi, 2        mov     word [edi], ax                  ; write new sample to destination        dec     ebx                             ; decrement count        jnz     frev16loop                      ; loop	popad        ret;================;; MV_8BitReverbFast;;================; eax - source position; edx - destination position; ebx - number of samples; ecx - shift	ALIGN 4MV_8BitReverbFast:	pushad	mov     eax, dword [esp + 0*4 + 9*4]	mov     edx, dword [esp + 1*4 + 9*4]	mov     ebx, dword [esp + 2*4 + 9*4]	mov     ecx, dword [esp + 3*4 + 9*4]	mov     esi, eax        mov     eax,OFFSET rpatch8+2        mov     edi, edx        mov     edx, 80h        mov     byte [eax],cl        mov     eax, 80h        shr     eax, cl        dec     edi        sub     edx, eax        ALIGN 4frev8loop:        mov     al, byte [esi]                  ; get sample        inc     esi        mov     ecx, eax        inc     edirpatch8:        shr     eax, 3        xor     ecx, 80h                        ; flip the sign bit        shr     ecx, 7                          ; shift the sign down to 1        add     eax, edx        add     eax, ecx                        ; add sign bit to round to 0        dec     ebx                             ; decrement count        mov     byte [edi], al                  ; write new sample to destination        jnz     frev8loop                       ; loop	popad        ret

⌨️ 快捷键说明

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