243 lines
6.4 KiB
Plaintext
243 lines
6.4 KiB
Plaintext
|
|
|||
|
ERROR EQU CX
|
|||
|
DELTAERROR EQU BP
|
|||
|
DELTAOFFSET EQU DX
|
|||
|
HIGHERROR EQU CH
|
|||
|
|
|||
|
; Different mixing routines required:
|
|||
|
; Left } shared
|
|||
|
; Right }
|
|||
|
; Central
|
|||
|
; Surround
|
|||
|
; Panned ; Each requires 8 bit and 16 bit
|
|||
|
; Single output - for Mono, pure left/pure right
|
|||
|
|
|||
|
; Interpolation = [DI+1]*Error + [DI]*(1-Error)
|
|||
|
; = [DI+1]*Error + [DI] - [DI]*Error
|
|||
|
; = Error*([DI+1]-[DI]) + [DI]
|
|||
|
|
|||
|
|
|||
|
M12Mix8ICentral Macro Index
|
|||
|
|
|||
|
M12Mix8ICentral&Index&:
|
|||
|
Mov AX, [ES:DI]
|
|||
|
Mov BL, AL
|
|||
|
SAR AL, 1
|
|||
|
SAR AH, 1
|
|||
|
Sub AH, AL
|
|||
|
Mov AL, CH
|
|||
|
ShR AL, 1
|
|||
|
IMul AH
|
|||
|
SHL AX, 2
|
|||
|
Add BL, AH
|
|||
|
|
|||
|
M12Mix8ICentralVolume&Index& EQU $+1
|
|||
|
Mov BH, 12h
|
|||
|
|
|||
|
Add ERROR, DELTAERROR ;; 1
|
|||
|
Mov AX, [EBX+EBX]
|
|||
|
AdC DI, DELTAOFFSET ;; 1
|
|||
|
Sub [SI+(Index-15)*2], AX
|
|||
|
|
|||
|
EndM
|
|||
|
|
|||
|
M12Mix16ICentral Macro Index
|
|||
|
|
|||
|
M12Mix16ICentral&Index&:
|
|||
|
Mov BX, [ES:EDI+EDI]
|
|||
|
Mov AH, [ES:EDI+EDI+3]
|
|||
|
Mov BL, BH
|
|||
|
SAR AH, 1
|
|||
|
SAR BH, 1
|
|||
|
Sub AH, BH
|
|||
|
Mov AL, CH
|
|||
|
ShR AL, 1
|
|||
|
IMul AH
|
|||
|
SHL AX, 2
|
|||
|
Add BL, AH
|
|||
|
|
|||
|
M12Mix16ICentralVolume&Index& EQU $+1
|
|||
|
Mov BH, 12h
|
|||
|
|
|||
|
Add ERROR, DELTAERROR ;; 1
|
|||
|
Mov AX, [EBX+EBX]
|
|||
|
AdC DI, DELTAOFFSET ;; 1
|
|||
|
Sub [SI+(Index-15)*2], AX
|
|||
|
|
|||
|
EndM
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Mix12Central8BitIOffsetTable Label Word
|
|||
|
|
|||
|
IndexCounter = 15
|
|||
|
|
|||
|
M12Mix8ICentralOffset Macro Index
|
|||
|
DW Offset M12Mix8ICentral&Index&
|
|||
|
EndM
|
|||
|
|
|||
|
REPT 16
|
|||
|
M12Mix8ICentralOffset %IndexCounter
|
|||
|
IndexCounter = IndexCounter-1
|
|||
|
EndM
|
|||
|
|
|||
|
Proc Mix12Central8BitI
|
|||
|
|
|||
|
Dec AX
|
|||
|
Mov BX, AX
|
|||
|
And AX, 0Fh
|
|||
|
ShR BX, 4
|
|||
|
Add AX, AX
|
|||
|
Inc BX
|
|||
|
Mov LoopCounter, BX
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
ShL AX, RESOLUTIONSHIFT-1
|
|||
|
|
|||
|
Add SI, AX
|
|||
|
|
|||
|
Push [CS:Mix12Central8BitIOffsetTable+BX]
|
|||
|
|
|||
|
Xor EBX, EBX
|
|||
|
|
|||
|
RetN
|
|||
|
|
|||
|
M12Mix8ICentral 0
|
|||
|
M12Mix8ICentral 1
|
|||
|
M12Mix8ICentral 2
|
|||
|
M12Mix8ICentral 3
|
|||
|
M12Mix8ICentral 4
|
|||
|
M12Mix8ICentral 5
|
|||
|
M12Mix8ICentral 6
|
|||
|
M12Mix8ICentral 7
|
|||
|
M12Mix8ICentral 8
|
|||
|
M12Mix8ICentral 9
|
|||
|
M12Mix8ICentral 10
|
|||
|
M12Mix8ICentral 11
|
|||
|
M12Mix8ICentral 12
|
|||
|
M12Mix8ICentral 13
|
|||
|
M12Mix8ICentral 14
|
|||
|
M12Mix8ICentral 15
|
|||
|
|
|||
|
Add SI, 32
|
|||
|
Dec LoopCounter
|
|||
|
JNZ M12Mix8ICentral0
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Mix12Central8BitI
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc PreMix12Central8BitI
|
|||
|
|
|||
|
Mov AL, [SI+0Eh]
|
|||
|
|
|||
|
IndexCounter = 0
|
|||
|
|
|||
|
PreMix12Central8BitIMacro Macro Index
|
|||
|
Mov Byte Ptr [CS:M12Mix8ICentralVolume&Index&], AL
|
|||
|
EndM
|
|||
|
|
|||
|
REPT 16
|
|||
|
PreMix12Central8BitIMacro %IndexCounter
|
|||
|
IndexCounter = IndexCounter+1
|
|||
|
EndM
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP PreMix12Central8BitI
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Mix12Central16BitIOffsetTable Label Word
|
|||
|
|
|||
|
IndexCounter = 15
|
|||
|
|
|||
|
M12Mix16ICentralOffset Macro Index
|
|||
|
DW Offset M12Mix16ICentral&Index&
|
|||
|
EndM
|
|||
|
|
|||
|
REPT 16
|
|||
|
M12Mix16ICentralOffset %IndexCounter
|
|||
|
IndexCounter = IndexCounter-1
|
|||
|
EndM
|
|||
|
|
|||
|
Proc Mix12Central16BitI
|
|||
|
|
|||
|
Dec AX
|
|||
|
Mov BX, AX
|
|||
|
And AX, 0Fh
|
|||
|
ShR BX, 4
|
|||
|
Add AX, AX
|
|||
|
Inc BX
|
|||
|
Mov LoopCounter, BX
|
|||
|
Mov BX, AX
|
|||
|
|
|||
|
ShL AX, RESOLUTIONSHIFT-1
|
|||
|
|
|||
|
Add SI, AX
|
|||
|
|
|||
|
Push [CS:Mix12Central16BitIOffsetTable+BX]
|
|||
|
|
|||
|
Xor EBX, EBX
|
|||
|
|
|||
|
|
|||
|
RetN
|
|||
|
|
|||
|
M12Mix16ICentral 0
|
|||
|
M12Mix16ICentral 1
|
|||
|
M12Mix16ICentral 2
|
|||
|
M12Mix16ICentral 3
|
|||
|
M12Mix16ICentral 4
|
|||
|
M12Mix16ICentral 5
|
|||
|
M12Mix16ICentral 6
|
|||
|
M12Mix16ICentral 7
|
|||
|
M12Mix16ICentral 8
|
|||
|
M12Mix16ICentral 9
|
|||
|
M12Mix16ICentral 10
|
|||
|
M12Mix16ICentral 11
|
|||
|
M12Mix16ICentral 12
|
|||
|
M12Mix16ICentral 13
|
|||
|
M12Mix16ICentral 14
|
|||
|
M12Mix16ICentral 15
|
|||
|
|
|||
|
Add SI, 32
|
|||
|
Dec LoopCounter
|
|||
|
JNZ M12Mix16ICentral0
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Mix12Central16BitI
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc PreMix12Central16BitI
|
|||
|
|
|||
|
Mov AL, [SI+0Eh]
|
|||
|
|
|||
|
IndexCounter = 0
|
|||
|
|
|||
|
PreMix12Central16BitIMacro Macro Index
|
|||
|
Mov Byte Ptr [CS:M12Mix16ICentralVolume&Index&], AL
|
|||
|
EndM
|
|||
|
|
|||
|
REPT 16
|
|||
|
PreMix12Central16BitIMacro %IndexCounter
|
|||
|
IndexCounter = IndexCounter+1
|
|||
|
EndM
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP PreMix12Central16BitI
|
|||
|
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|