rott/audiolib/SOURCE/MV_MIX1.ASM
2002-12-25 00:00:00 +00:00

91 lines
2.4 KiB
NASM

.386
.MODEL flat
.data
.code
SEGMENT text USE32
ALIGN 16
;================
;
; MV_Mix8BitMonoFast
;
;================
; eax - position
; edx - rate
; ecx - Volume table
; ebx - Harsh clip table
; edi - to
; esi - start
MixBufferSize equ 256
PROC MV_Mix8BitMonoFast_
PUBLIC MV_Mix8BitMonoFast_
push ebp
; mov edi,[to]
; mov esi,[start]
; mov ebp,[position]
; mov edx,[Rate]
mov ebp, eax
; Rate scale ptr
; mov edx,[rate]
mov eax,OFFSET apatch1+2 ; convice tasm to modify code...
mov [eax],edx
; Volume table ptr
; mov ecx,[VolumeTable]
mov eax,OFFSET apatch2+3 ; convice tasm to modify code...
mov [eax],ecx
; Harsh Clip table ptr
; mov ebx,HarshClipTable ; get harsh clip table address
add ebx,128
mov eax,OFFSET apatch3+3 ; convice tasm to modify code...
mov [eax],ebx
mov ecx, MixBufferSize
; eax - scratch
; ebx - scratch
; edx - scratch
; ecx - count
; edi - destination
; esi - source
; ebp - frac pointer
; apatch1 - volume table
; apatch2 - volume table
; apatch3 - harsh clip table
; apatch4 - harsh clip table
; apatch5 - sample rate
; apatch6 - sample rate
ALIGN 16
mix8Mloop:
mov eax,ebp ; begin calculating first sample
apatch1:
add ebp,12345678h ; advance frac pointer
shr eax,16 ; finish calculation for first sample
movzx eax, byte ptr [esi+eax] ; get first sample
movzx edx, byte ptr [edi] ; get current sample from destination
apatch2:
movsx eax, byte ptr [eax+12345678h] ; volume translate first sample
apatch3:
mov eax, [eax + edx + 12345678h] ; harsh clip new sample
mov [edi], al ; write new sample to destination
inc edi ; move destination to second sample
dec ecx ; decrement count
jnz mix8Mloop ; loop
pop ebp
ret
ENDP
ENDS
END