initial work on port

updated readme, new "build system," fixed some errors
This commit is contained in:
'mr software' 2023-03-09 21:35:56 -08:00
parent 9fcee05b53
commit ff7c092581
220 changed files with 220138 additions and 220096 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
obj
gen
test.s

View File

@ -1,9 +0,0 @@
IT.EXE: IT.OBJ IT_DISK.OBJ IT_DISPL.OBJ IT_EMS.OBJ IT_ERR.OBJ IT_F.OBJ IT_G.OBJ IT_H.OBJ \
IT_I.OBJ IT_K.OBJ IT_L.OBJ IT_M.OBJ IT_NET.OBJ IT_MSG.OBJ IT_MUSIC.OBJ IT_NET.OBJ IT_OBJ1.OBJ IT_PE.OBJ IT_S.OBJ \
IT_TUTE.OBJ IT_MMTSR.OBJ IT_MOUSE.OBJ IT_MDATA.OBJ IT_FOUR.OBJ IT_VESA.OBJ
tlink /3 /s /v @source.lst
.ASM.OBJ:
# TASM /Zi /m /uT310 /jSMART $*.asm
TASM /m /uT310 /jSMART $*.asm

View File

@ -1,33 +1,20 @@
Impulse Tracker
===============
Full source code for Impulse Tracker, including sound drivers, network drivers,
and some supporting documentation
 
Eventually, maybe, a version of IT for modern systems
Pre-Requisite Software
----------------------
To build Impulse Tracker, you will need:
- Turbo Assembler v4.1
- Netwide Assembler
- Turbo Link v3.01
- GCC
- Borland MAKE v4.0
- sh
- A DOS environment
 
Once you have these, building IT.EXE should be just a single call to `MAKE`
Sound drivers are build individually via M\*.BAT files inside the SoundDrivers
subdirectory
 
Once you have these, building IT should be just a single call to `./build`
Quick File Overview
-------------------
@ -105,8 +92,6 @@ Quick File Overview
- SWITCH.INC:
High level switches for the program
Frequently Asked Questions
--------------------------
@ -129,10 +114,8 @@ A: The original code was compatible all the way back to an 8086 machine. 8086 wo
conditional jumps only within +/-128 bytes, so I spent too much time shuffling code around to meet
this restriction. When I shifted away from this 8086 restriction, I never went back to update the
code that was mutilated by it.
 
License
-------
License for this source code is pending.
Refer to LICENSE.TXT

View File

@ -1,44 +0,0 @@
TRACEENABLED EQU 0
TUTORIAL = 0
EMSUSE41 = 0
SHOWVERSION = 0
SHOWREGISTERNAME = 1
USE32BITSCREENCOPY = 0
SORTENABLED = 1
DDCOMPRESS = 1
ORDERSORT = 1
FILTERENVELOPES = 1
CHORDENTRY = 1
SPECTRUMANALYSER = 1
SAVESAMPLEWAV = 1
ENABLEPRESETENVELOPES = 1
ENABLESOLO = 1
DEFAULTFORMAT = 3 ; 0 = IT214, 1 = S3M, 2 = IT2xx, 3 = IT215
USEFPUCODE = 1 ; For IT_MUSIC, this will change from LUT to FPU code
OLDDRIVER = 0
MUSICDEBUG = 0
EMSDEBUG = 0
MEMORYDEBUG = 0
ENABLEINT3 = 0 ; For debugging.
TIMERSCREEN = 1
NETWORKENABLED = 1
SHOWPATTERNLENGTH = 0
IF TUTORIAL
SORTENABLED = 1
DDCOMPRESS = 1
ENDIF
TRACKERVERSION = 217h ; Still have to change text in IT.ASM, IT_F.ASM

File diff suppressed because it is too large Load Diff

View File

@ -1,56 +1,56 @@
; 8-bit interpolated mixing routine, 4 samples at a time. Rearranged
; MM7 contains volume as packed floating point
; MM6 contains offset as packed integer offset
; MM5 = DeltaOffset
; MM7 = RVol|LVol
; MM6 = (1-Offset2)|Offset2|(1-Offset1)|Offset1
MovD MM0, [SampleBlock1] ; MM0 = x|x|x|x|S2H|S2L|S1H|S1L
MovQ MM2, MM6
PSRAW MM2, 1
PUnpckLBW MM0, MM0 ; MM0 = S2H|S2L|S1H|S1L
PAddW MM6, MM5
PMAddWD MM0, MM2 ; MM0 = IS2|IS1
MovD MM1, [SampleBlock2] ; MM1 = x|x|x|x|S4H|S4L|S3H|S3L
MovQ MM2, MM6
PUnpckLBW MM1, MM1 ; MM1 = S4H|S4L|S3H|S3L
PSRAW MM2, 1
PI2FD MM0, MM0 ; MM0 = FIS2|FIS1
PMAddWD MM1, MM2 ; MM1 = IS4|IS3
MovQ MM2, MM0
PUnpckLDQ MM0, MM0 ; MM0 = FIS1|FIS1
PUnpckHDQ MM2, MM2 ; MM2 = FIS2|FIS2
PI2FD MM1, MM1 ; MM1 = FIS4|FIS3
PFMul MM0, MM7 ; MM0 = R1|L1
PAddW MM6, MM5
PFMul MM2, MM7 ; MM2 = R2|L2
MovQ MM3, MM1
PFAdd MM0, [Buffer1]
PUnpckLDQ MM1, MM1 ; MM1 = FIS3|FIS3
PFAdd MM2, [Buffer2]
PUnpckHDQ MM3, MM3 ; MM3 = FIS4|FIS4
PFMul MM1, MM7
MovQ [Buffer1], MM0
PFMul MM3, MM7
PFAdd MM1, [Buffer3]
MovQ [Buffer2], MM2
PFAdd MM3, [Buffer4]
MovQ [Buffer3], MM1
MovQ [Buffer4], MM3
; 8-bit interpolated mixing routine, 4 samples at a time. Rearranged
; MM7 contains volume as packed floating point
; MM6 contains offset as packed integer offset
; MM5 = DeltaOffset
; MM7 = RVol|LVol
; MM6 = (1-Offset2)|Offset2|(1-Offset1)|Offset1
MovD MM0, [SampleBlock1] ; MM0 = x|x|x|x|S2H|S2L|S1H|S1L
MovQ MM2, MM6
PSRAW MM2, 1
PUnpckLBW MM0, MM0 ; MM0 = S2H|S2L|S1H|S1L
PAddW MM6, MM5
PMAddWD MM0, MM2 ; MM0 = IS2|IS1
MovD MM1, [SampleBlock2] ; MM1 = x|x|x|x|S4H|S4L|S3H|S3L
MovQ MM2, MM6
PUnpckLBW MM1, MM1 ; MM1 = S4H|S4L|S3H|S3L
PSRAW MM2, 1
PI2FD MM0, MM0 ; MM0 = FIS2|FIS1
PMAddWD MM1, MM2 ; MM1 = IS4|IS3
MovQ MM2, MM0
PUnpckLDQ MM0, MM0 ; MM0 = FIS1|FIS1
PUnpckHDQ MM2, MM2 ; MM2 = FIS2|FIS2
PI2FD MM1, MM1 ; MM1 = FIS4|FIS3
PFMul MM0, MM7 ; MM0 = R1|L1
PAddW MM6, MM5
PFMul MM2, MM7 ; MM2 = R2|L2
MovQ MM3, MM1
PFAdd MM0, [Buffer1]
PUnpckLDQ MM1, MM1 ; MM1 = FIS3|FIS3
PFAdd MM2, [Buffer2]
PUnpckHDQ MM3, MM3 ; MM3 = FIS4|FIS4
PFMul MM1, MM7
MovQ [Buffer1], MM0
PFMul MM3, MM7
PFAdd MM1, [Buffer3]
MovQ [Buffer2], MM2
PFAdd MM3, [Buffer4]
MovQ [Buffer3], MM1
MovQ [Buffer4], MM3

View File

@ -1,304 +1,304 @@
; 8-bit non interpolated mixing routine, 8 samples at a time. Not rearranged
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovD MM0, [SampleBlock1] ; Low 4 bytes contain samples 1-4
MovD MM1, [SampleBlock2] ; Low 4 bytes contain samples 5-8
PUnpckLBW MM0, MM0 ; MM0 = S4|S3|S2|S1
PUnpckLBW MM1, MM1 ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
MovQ MM3, MM1
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
; only one resource shared between pipes?)
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PI2FD MM1, MM1 ; MM1 = FS6|FS5
PI2FD MM2, MM2 ; MM2 = FS4|FS3
PI2FD MM3, MM3 ; MM3 = FS8|FS7
MovQ MM4, MM0
MovQ MM5, MM2
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFMul MM0, MM7 ; MM0 = R1|L1
PFMul MM4, MM7 ; MM4 = R2|L2
PFMul MM2, MM7 ; MM2 = R3|L3
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM0, [Buffer1]
PFAdd MM4, [Buffer2]
PFAdd MM2, [Buffer3]
PFAdd MM5, [Buffer4]
MovQ [Buffer1], MM0
MovQ [Buffer2], MM4
MovQ [Buffer3], MM2
MovQ [Buffer4], MM5
MovQ MM0, MM1
MovQ MM2, MM3
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFMul MM0, MM7
PFMul MM1, MM7
PFMul MM2, MM7
PFMul MM3, MM7
PFAdd MM0, [Buffer5]
PFAdd MM1, [Buffer6]
PFAdd MM2, [Buffer7]
PFAdd MM3, [Buffer8]
MovQ [Buffer5], MM0
MovQ [Buffer6], MM1
MovQ [Buffer7], MM2
MovQ [Buffer8], MM3
;-----------------------------------------------------------------------------
; Rearranged to improve pairing
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovD MM0, [SampleBlock1] ; Low 4 bytes contain samples 1-4
MovD MM1, [SampleBlock2] ; Low 4 bytes contain samples 5-8
PUnpckLBW MM0, MM0 ; MM0 = S4|S3|S2|S1
PUnpckLBW MM1, MM1 ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
MovQ MM3, MM1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
PI2FD MM1, MM1 ; MM1 = FS6|FS5
MovQ MM4, MM0
PI2FD MM2, MM2 ; MM2 = FS4|FS3
MovQ MM5, MM2
PI2FD MM3, MM3 ; MM3 = FS8|FS7
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PFMul MM0, MM7 ; MM0 = R1|L1
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PFMul MM4, MM7 ; MM4 = R2|L2
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFMul MM2, MM7 ; MM2 = R3|L3
PFAdd MM0, [Buffer1]
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM4, [Buffer2]
PFAdd MM2, [Buffer3]
MovQ [Buffer1], MM0
MovQ [Buffer2], MM4
PFAdd MM5, [Buffer4]
MovQ [Buffer3], MM2
MovQ MM0, MM1
MovQ [Buffer4], MM5
MovQ MM2, MM3
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PFMul MM0, MM7
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PFMul MM1, MM7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFAdd MM0, [Buffer5]
PFMul MM2, MM7
PFAdd MM1, [Buffer6]
PFMul MM3, MM7
MovQ [Buffer5], MM0
PFAdd MM2, [Buffer7]
MovQ [Buffer6], MM1
PFAdd MM3, [Buffer8]
MovQ [Buffer7], MM2 ; These will be rearranged to match
MovQ [Buffer8], MM3 ; the next iteration.
; 16-bit non interpolated mixing routine, 8 samples at a time. Not rearranged
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovQ MM0, [SampleBlock1] ; MM0 = S4|S3|S2|S1
MovQ MM1, [SampleBlock2] ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
MovQ MM3, MM1
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
; only one resource shared between pipes?)
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PI2FD MM1, MM1 ; MM1 = FS6|FS5
PI2FD MM2, MM2 ; MM2 = FS4|FS3
PI2FD MM3, MM3 ; MM3 = FS8|FS7
MovQ MM4, MM0
MovQ MM5, MM2
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFMul MM0, MM7 ; MM0 = R1|L1
PFMul MM4, MM7 ; MM4 = R2|L2
PFMul MM2, MM7 ; MM2 = R3|L3
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM0, [Buffer1]
PFAdd MM4, [Buffer2]
PFAdd MM2, [Buffer3]
PFAdd MM5, [Buffer4]
MovQ [Buffer1], MM0
MovQ [Buffer2], MM4
MovQ [Buffer3], MM2
MovQ [Buffer4], MM5
MovQ MM0, MM1
MovQ MM2, MM3
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFMul MM0, MM7
PFMul MM1, MM7
PFMul MM2, MM7
PFMul MM3, MM7
PFAdd MM0, [Buffer5]
PFAdd MM1, [Buffer6]
PFAdd MM2, [Buffer7]
PFAdd MM3, [Buffer8]
MovQ [Buffer5], MM0
MovQ [Buffer6], MM1
MovQ [Buffer7], MM2
MovQ [Buffer8], MM3
;-----------------------------------------------------------------------------
; Rearranged to improve pairing
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovQ MM0, [SampleBlock1] ; MM0 = S4|S3|S2|S1
MovQ MM1, [SampleBlock2] ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
MovQ MM3, MM1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PI2FD MM1, MM1 ; MM1 = FS6|FS5
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
; only one resource shared between pipes?)
MovQ MM4, MM0
PI2FD MM2, MM2 ; MM2 = FS4|FS3
MovQ MM5, MM2
PI2FD MM3, MM3 ; MM3 = FS8|FS7
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PFMul MM0, MM7 ; MM0 = R1|L1
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PFMul MM4, MM7 ; MM4 = R2|L2
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFAdd MM0, [Buffer1]
PFMul MM2, MM7 ; MM2 = R3|L3
PFAdd MM4, [Buffer2]
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM2, [Buffer3]
MovQ [Buffer1], MM0
PFAdd MM5, [Buffer4]
MovQ [Buffer2], MM4
MovQ MM0, MM1
MovQ [Buffer3], MM2
MovQ MM2, MM3
MovQ [Buffer4], MM5
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PFMul MM0, MM7
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PFMul MM1, MM7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFAdd MM0, [Buffer5]
PFMul MM2, MM7
PFAdd MM1, [Buffer6]
PFMul MM3, MM7
MovQ [Buffer5], MM0
PFAdd MM2, [Buffer7]
MovQ [Buffer6], MM1
PFAdd MM3, [Buffer8]
MovQ [Buffer7], MM2
MovQ [Buffer8], MM3
; 8-bit non interpolated mixing routine, 8 samples at a time. Not rearranged
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovD MM0, [SampleBlock1] ; Low 4 bytes contain samples 1-4
MovD MM1, [SampleBlock2] ; Low 4 bytes contain samples 5-8
PUnpckLBW MM0, MM0 ; MM0 = S4|S3|S2|S1
PUnpckLBW MM1, MM1 ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
MovQ MM3, MM1
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
; only one resource shared between pipes?)
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PI2FD MM1, MM1 ; MM1 = FS6|FS5
PI2FD MM2, MM2 ; MM2 = FS4|FS3
PI2FD MM3, MM3 ; MM3 = FS8|FS7
MovQ MM4, MM0
MovQ MM5, MM2
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFMul MM0, MM7 ; MM0 = R1|L1
PFMul MM4, MM7 ; MM4 = R2|L2
PFMul MM2, MM7 ; MM2 = R3|L3
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM0, [Buffer1]
PFAdd MM4, [Buffer2]
PFAdd MM2, [Buffer3]
PFAdd MM5, [Buffer4]
MovQ [Buffer1], MM0
MovQ [Buffer2], MM4
MovQ [Buffer3], MM2
MovQ [Buffer4], MM5
MovQ MM0, MM1
MovQ MM2, MM3
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFMul MM0, MM7
PFMul MM1, MM7
PFMul MM2, MM7
PFMul MM3, MM7
PFAdd MM0, [Buffer5]
PFAdd MM1, [Buffer6]
PFAdd MM2, [Buffer7]
PFAdd MM3, [Buffer8]
MovQ [Buffer5], MM0
MovQ [Buffer6], MM1
MovQ [Buffer7], MM2
MovQ [Buffer8], MM3
;-----------------------------------------------------------------------------
; Rearranged to improve pairing
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovD MM0, [SampleBlock1] ; Low 4 bytes contain samples 1-4
MovD MM1, [SampleBlock2] ; Low 4 bytes contain samples 5-8
PUnpckLBW MM0, MM0 ; MM0 = S4|S3|S2|S1
PUnpckLBW MM1, MM1 ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
MovQ MM3, MM1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
PI2FD MM1, MM1 ; MM1 = FS6|FS5
MovQ MM4, MM0
PI2FD MM2, MM2 ; MM2 = FS4|FS3
MovQ MM5, MM2
PI2FD MM3, MM3 ; MM3 = FS8|FS7
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PFMul MM0, MM7 ; MM0 = R1|L1
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PFMul MM4, MM7 ; MM4 = R2|L2
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFMul MM2, MM7 ; MM2 = R3|L3
PFAdd MM0, [Buffer1]
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM4, [Buffer2]
PFAdd MM2, [Buffer3]
MovQ [Buffer1], MM0
MovQ [Buffer2], MM4
PFAdd MM5, [Buffer4]
MovQ [Buffer3], MM2
MovQ MM0, MM1
MovQ [Buffer4], MM5
MovQ MM2, MM3
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PFMul MM0, MM7
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PFMul MM1, MM7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFAdd MM0, [Buffer5]
PFMul MM2, MM7
PFAdd MM1, [Buffer6]
PFMul MM3, MM7
MovQ [Buffer5], MM0
PFAdd MM2, [Buffer7]
MovQ [Buffer6], MM1
PFAdd MM3, [Buffer8]
MovQ [Buffer7], MM2 ; These will be rearranged to match
MovQ [Buffer8], MM3 ; the next iteration.
; 16-bit non interpolated mixing routine, 8 samples at a time. Not rearranged
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovQ MM0, [SampleBlock1] ; MM0 = S4|S3|S2|S1
MovQ MM1, [SampleBlock2] ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
MovQ MM3, MM1
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
; only one resource shared between pipes?)
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PI2FD MM1, MM1 ; MM1 = FS6|FS5
PI2FD MM2, MM2 ; MM2 = FS4|FS3
PI2FD MM3, MM3 ; MM3 = FS8|FS7
MovQ MM4, MM0
MovQ MM5, MM2
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFMul MM0, MM7 ; MM0 = R1|L1
PFMul MM4, MM7 ; MM4 = R2|L2
PFMul MM2, MM7 ; MM2 = R3|L3
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM0, [Buffer1]
PFAdd MM4, [Buffer2]
PFAdd MM2, [Buffer3]
PFAdd MM5, [Buffer4]
MovQ [Buffer1], MM0
MovQ [Buffer2], MM4
MovQ [Buffer3], MM2
MovQ [Buffer4], MM5
MovQ MM0, MM1
MovQ MM2, MM3
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFMul MM0, MM7
PFMul MM1, MM7
PFMul MM2, MM7
PFMul MM3, MM7
PFAdd MM0, [Buffer5]
PFAdd MM1, [Buffer6]
PFAdd MM2, [Buffer7]
PFAdd MM3, [Buffer8]
MovQ [Buffer5], MM0
MovQ [Buffer6], MM1
MovQ [Buffer7], MM2
MovQ [Buffer8], MM3
;-----------------------------------------------------------------------------
; Rearranged to improve pairing
; MM7 contains volume as packed floating point MM7 = RVol|LVol
MovQ MM0, [SampleBlock1] ; MM0 = S4|S3|S2|S1
MovQ MM1, [SampleBlock2] ; MM1 = S8|S7|S6|S5
MovQ MM2, MM0
PUnpckLWD MM0, MM0 ; MM0 = S2|S1
MovQ MM3, MM1
PUnpckLWD MM1, MM1 ; MM1 = S6|S5
PI2FD MM0, MM0 ; MM0 = FS2|FS1
PUnpckHWD MM2, MM2 ; MM2 = S4|S3
PI2FD MM1, MM1 ; MM1 = FS6|FS5
PUnpckHWD MM3, MM3 ; MM3 = S8|S7
; What category do PI2FD instructions fall under? Are they AMD-3D ALU (ie.
; only one resource shared between pipes?)
MovQ MM4, MM0
PI2FD MM2, MM2 ; MM2 = FS4|FS3
MovQ MM5, MM2
PI2FD MM3, MM3 ; MM3 = FS8|FS7
PUnpckLDQ MM0, MM0 ; MM0 = FS1|FS1
PUnpckHDQ MM4, MM4 ; MM4 = FS2|FS2
PFMul MM0, MM7 ; MM0 = R1|L1
PUnpckLDQ MM2, MM2 ; MM2 = FS3|FS3
PFMul MM4, MM7 ; MM4 = R2|L2
PUnpckHDQ MM5, MM5 ; MM5 = FS4|FS4
PFAdd MM0, [Buffer1]
PFMul MM2, MM7 ; MM2 = R3|L3
PFAdd MM4, [Buffer2]
PFMul MM5, MM7 ; MM5 = R4|L4
PFAdd MM2, [Buffer3]
MovQ [Buffer1], MM0
PFAdd MM5, [Buffer4]
MovQ [Buffer2], MM4
MovQ MM0, MM1
MovQ [Buffer3], MM2
MovQ MM2, MM3
MovQ [Buffer4], MM5
PUnpckLDQ MM0, MM0 ; MM0 = FS5|FS5
PUnpckHDQ MM1, MM1 ; MM1 = FS6|FS6
PFMul MM0, MM7
PUnpckLDQ MM2, MM2 ; MM2 = FS7|FS7
PFMul MM1, MM7
PUnpckHDQ MM3, MM3 ; MM3 = FS8|FS8
PFAdd MM0, [Buffer5]
PFMul MM2, MM7
PFAdd MM1, [Buffer6]
PFMul MM3, MM7
MovQ [Buffer5], MM0
PFAdd MM2, [Buffer7]
MovQ [Buffer6], MM1
PFAdd MM3, [Buffer8]
MovQ [Buffer7], MM2
MovQ [Buffer8], MM3

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,101 +1,101 @@
;
; Debug macro. To write to the file, use "Trace <logmessage>"
;
IF TRACEENABLED
IF CREATENEWLOGFILE
FirstTime DB 0
ENDIF
LogFileName DB "Logfile.Txt", 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc WriteDebugFile
PushA
Push DS
Push CS
Pop DS
Mov DX, Offset LogFileName
IF CREATENEWLOGFILE
Cmp DS:FirstTime, 0
JNE WriteDebugFile1
Mov AH, 3Ch
Xor CX, CX
Int 21h
JC WriteDebugFileEnd
Mov DS:FirstTime, 1
XChg AX, BX
Jmp WriteDebugFile2
WriteDebugFile1:
ENDIF
Mov AX, 3D02h
Int 21h
JC WriteDebugFileEnd
XChg AX, BX
Mov AX, 4202h
Xor CX, CX
Xor DX, DX
Int 21h ; Move to end of file
WriteDebugFile2:
Mov AH, 40h
Mov CX, 82
Mov DX, SI
Int 21h
Mov AH, 3Eh
Int 21h
WriteDebugFileEnd:
Pop DS
PopA
Ret
EndP WriteDebugFile
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Trace Macro LogMessage
Local X, Y
PushF
Push SI
Jmp Y
X:
DB LogMessage
DB 80-($-Offset X) Dup (0)
DB 0Dh, 0Ah
Y:
Mov SI, Offset X
Call WriteDebugFile
Pop SI
PopF
EndM
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ELSE
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Trace Macro LogMessage
EndM
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ENDIF
;
; Debug macro. To write to the file, use "Trace <logmessage>"
;
IF TRACEENABLED
IF CREATENEWLOGFILE
FirstTime DB 0
ENDIF
LogFileName DB "Logfile.Txt", 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc WriteDebugFile
PushA
Push DS
Push CS
Pop DS
Mov DX, Offset LogFileName
IF CREATENEWLOGFILE
Cmp DS:FirstTime, 0
JNE WriteDebugFile1
Mov AH, 3Ch
Xor CX, CX
Int 21h
JC WriteDebugFileEnd
Mov DS:FirstTime, 1
XChg AX, BX
Jmp WriteDebugFile2
WriteDebugFile1:
ENDIF
Mov AX, 3D02h
Int 21h
JC WriteDebugFileEnd
XChg AX, BX
Mov AX, 4202h
Xor CX, CX
Xor DX, DX
Int 21h ; Move to end of file
WriteDebugFile2:
Mov AH, 40h
Mov CX, 82
Mov DX, SI
Int 21h
Mov AH, 3Eh
Int 21h
WriteDebugFileEnd:
Pop DS
PopA
Ret
EndP WriteDebugFile
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Trace Macro LogMessage
Local X, Y
PushF
Push SI
Jmp Y
X:
DB LogMessage
DB 80-($-Offset X) Dup (0)
DB 0Dh, 0Ah
Y:
Mov SI, Offset X
Call WriteDebugFile
Pop SI
PopF
EndM
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ELSE
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Trace Macro LogMessage
EndM
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ENDIF

View File

@ -1,113 +1,113 @@
DMAData Label Byte
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
DB 0Ah, 4, 0Ch, 0, 0Bh, 58h, 87h, 0, 1, 0Ah, 0
DB 0Ah, 5, 0Ch, 0, 0Bh, 59h, 83h, 2, 3, 0Ah, 1
DB 0Ah, 6, 0Ch, 0, 0Bh, 5Ah, 81h, 4, 5, 0Ah, 2
DB 0Ah, 7, 0Ch, 0, 0Bh, 5Bh, 82h, 6, 7, 0Ah, 3
DB 0D4h, 4, 0D8h, 0, 0D6h, 58h, 8Fh, 0C0h, 0C2h, 0D4h, 0
DB 0D4h, 5, 0D8h, 0, 0D6h, 59h, 8Bh, 0C4h, 0C6h, 0D4h, 1
DB 0D4h, 6, 0D8h, 0, 0D6h, 5Ah, 89h, 0C8h, 0CAh, 0D4h, 2
DB 0D4h, 7, 0D8h, 0, 0D6h, 5Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
ActualDMAPtr Label DWord
ActualDMAOffset DW 0
ActualDMASegment DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetDMA ; BX:AX points to DMA buffer
; DL = DMA Channel
; DI = DMA Size
PushA
Push DS
Push CS
Pop DS
Assume DS:Driver
Mov ActualDMASegment, BX
Mov ActualDMAOffset, AX
Mov CH, BH
ShR CH, 4
ShL BX, 4
Add BX, AX
AdC CH, 0
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
Neg SI
Cmp SI, DI
JA SetDMA1
Add ActualDMAOffset, SI
Add BX, SI
AdC CH, 0
SetDMA1:
Cmp DL, 3
JBE SetDMA2
ShR DI, 1
Push CX
ShR CH, 1
Pop CX
RCR BX, 1
SetDMA2:
Mov AL, 11
Mul DL
Mov SI, AX
Add SI, Offset DMAData
Xor DX, DX
LodsB ; Set mask
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Clear Ptrs
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Set Mode
Mov DL, AL
LodsB
Out DX, AL
LodsB
Mov DL, AL ; DL = page port
Mov AL, CH
Out DX, AL
LodsB
Mov DL, AL ; DL = address port
Mov AL, BL
Out DX, AL
Mov AL, BH
Out DX, AL
LodsB
Mov DL, AL ; DL = count port
Mov AX, DI
Dec AX
Out DX, AL
Mov AL, AH
Out DX, AL
LodsB ; Reset mask
Mov DL, AL
LodsB
Out DX, AL
Pop DS
PopA
Ret
EndP SetDMA
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DMAData Label Byte
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
DB 0Ah, 4, 0Ch, 0, 0Bh, 58h, 87h, 0, 1, 0Ah, 0
DB 0Ah, 5, 0Ch, 0, 0Bh, 59h, 83h, 2, 3, 0Ah, 1
DB 0Ah, 6, 0Ch, 0, 0Bh, 5Ah, 81h, 4, 5, 0Ah, 2
DB 0Ah, 7, 0Ch, 0, 0Bh, 5Bh, 82h, 6, 7, 0Ah, 3
DB 0D4h, 4, 0D8h, 0, 0D6h, 58h, 8Fh, 0C0h, 0C2h, 0D4h, 0
DB 0D4h, 5, 0D8h, 0, 0D6h, 59h, 8Bh, 0C4h, 0C6h, 0D4h, 1
DB 0D4h, 6, 0D8h, 0, 0D6h, 5Ah, 89h, 0C8h, 0CAh, 0D4h, 2
DB 0D4h, 7, 0D8h, 0, 0D6h, 5Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
ActualDMAPtr Label DWord
ActualDMAOffset DW 0
ActualDMASegment DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetDMA ; BX:AX points to DMA buffer
; DL = DMA Channel
; DI = DMA Size
PushA
Push DS
Push CS
Pop DS
Assume DS:Driver
Mov ActualDMASegment, BX
Mov ActualDMAOffset, AX
Mov CH, BH
ShR CH, 4
ShL BX, 4
Add BX, AX
AdC CH, 0
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
Neg SI
Cmp SI, DI
JA SetDMA1
Add ActualDMAOffset, SI
Add BX, SI
AdC CH, 0
SetDMA1:
Cmp DL, 3
JBE SetDMA2
ShR DI, 1
Push CX
ShR CH, 1
Pop CX
RCR BX, 1
SetDMA2:
Mov AL, 11
Mul DL
Mov SI, AX
Add SI, Offset DMAData
Xor DX, DX
LodsB ; Set mask
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Clear Ptrs
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Set Mode
Mov DL, AL
LodsB
Out DX, AL
LodsB
Mov DL, AL ; DL = page port
Mov AL, CH
Out DX, AL
LodsB
Mov DL, AL ; DL = address port
Mov AL, BL
Out DX, AL
Mov AL, BH
Out DX, AL
LodsB
Mov DL, AL ; DL = count port
Mov AX, DI
Dec AX
Out DX, AL
Mov AL, AH
Out DX, AL
LodsB ; Reset mask
Mov DL, AL
LodsB
Out DX, AL
Pop DS
PopA
Ret
EndP SetDMA
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

View File

@ -1,113 +1,113 @@
DMAData Label Byte
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
DB 0Ah, 4, 0Ch, 0, 0Bh, 08h, 87h, 0, 1, 0Ah, 0
DB 0Ah, 5, 0Ch, 0, 0Bh, 09h, 83h, 2, 3, 0Ah, 1
DB 0Ah, 6, 0Ch, 0, 0Bh, 0Ah, 81h, 4, 5, 0Ah, 2
DB 0Ah, 7, 0Ch, 0, 0Bh, 0Bh, 82h, 6, 7, 0Ah, 3
DB 0D4h, 4, 0D8h, 0, 0D6h, 08h, 8Fh, 0C0h, 0C2h, 0D4h, 0
DB 0D4h, 5, 0D8h, 0, 0D6h, 09h, 8Bh, 0C4h, 0C6h, 0D4h, 1
DB 0D4h, 6, 0D8h, 0, 0D6h, 0Ah, 89h, 0C8h, 0CAh, 0D4h, 2
DB 0D4h, 7, 0D8h, 0, 0D6h, 0Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
ActualDMAPtr Label DWord
ActualDMAOffset DW 0
ActualDMASegment DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetDMA ; BX:AX points to DMA buffer
; DL = DMA Channel
; DI = DMA Size
PushA
Push DS
Push CS
Pop DS
Assume DS:Driver
Mov ActualDMASegment, BX
Mov ActualDMAOffset, AX
Mov CH, BH
ShR CH, 4
ShL BX, 4
Add BX, AX
AdC CH, 0
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
Neg SI
Cmp SI, DI
JA SetDMA1
Add ActualDMAOffset, SI
Add BX, SI
AdC CH, 0
SetDMA1:
Cmp DL, 3
JBE SetDMA2
ShR DI, 1
Push CX
ShR CH, 1
Pop CX
RCR BX, 1
SetDMA2:
Mov AL, 11
Mul DL
Mov SI, AX
Add SI, Offset DMAData
Xor DX, DX
LodsB ; Set mask
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Clear Ptrs
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Set Mode
Mov DL, AL
LodsB
Out DX, AL
LodsB
Mov DL, AL ; DL = page port
Mov AL, CH
Out DX, AL
LodsB
Mov DL, AL ; DL = address port
Mov AL, BL
Out DX, AL
Mov AL, BH
Out DX, AL
LodsB
Mov DL, AL ; DL = count port
Mov AX, DI
Dec AX
Out DX, AL
Mov AL, AH
Out DX, AL
LodsB ; Reset mask
Mov DL, AL
LodsB
Out DX, AL
Pop DS
PopA
Ret
EndP SetDMA
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DMAData Label Byte
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
DB 0Ah, 4, 0Ch, 0, 0Bh, 08h, 87h, 0, 1, 0Ah, 0
DB 0Ah, 5, 0Ch, 0, 0Bh, 09h, 83h, 2, 3, 0Ah, 1
DB 0Ah, 6, 0Ch, 0, 0Bh, 0Ah, 81h, 4, 5, 0Ah, 2
DB 0Ah, 7, 0Ch, 0, 0Bh, 0Bh, 82h, 6, 7, 0Ah, 3
DB 0D4h, 4, 0D8h, 0, 0D6h, 08h, 8Fh, 0C0h, 0C2h, 0D4h, 0
DB 0D4h, 5, 0D8h, 0, 0D6h, 09h, 8Bh, 0C4h, 0C6h, 0D4h, 1
DB 0D4h, 6, 0D8h, 0, 0D6h, 0Ah, 89h, 0C8h, 0CAh, 0D4h, 2
DB 0D4h, 7, 0D8h, 0, 0D6h, 0Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
ActualDMAPtr Label DWord
ActualDMAOffset DW 0
ActualDMASegment DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetDMA ; BX:AX points to DMA buffer
; DL = DMA Channel
; DI = DMA Size
PushA
Push DS
Push CS
Pop DS
Assume DS:Driver
Mov ActualDMASegment, BX
Mov ActualDMAOffset, AX
Mov CH, BH
ShR CH, 4
ShL BX, 4
Add BX, AX
AdC CH, 0
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
Neg SI
Cmp SI, DI
JA SetDMA1
Add ActualDMAOffset, SI
Add BX, SI
AdC CH, 0
SetDMA1:
Cmp DL, 3
JBE SetDMA2
ShR DI, 1
Push CX
ShR CH, 1
Pop CX
RCR BX, 1
SetDMA2:
Mov AL, 11
Mul DL
Mov SI, AX
Add SI, Offset DMAData
Xor DX, DX
LodsB ; Set mask
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Clear Ptrs
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Set Mode
Mov DL, AL
LodsB
Out DX, AL
LodsB
Mov DL, AL ; DL = page port
Mov AL, CH
Out DX, AL
LodsB
Mov DL, AL ; DL = address port
Mov AL, BL
Out DX, AL
Mov AL, BH
Out DX, AL
LodsB
Mov DL, AL ; DL = count port
Mov AX, DI
Dec AX
Out DX, AL
Mov AL, AH
Out DX, AL
LodsB ; Reset mask
Mov DL, AL
LodsB
Out DX, AL
Pop DS
PopA
Ret
EndP SetDMA
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

View File

@ -1,116 +1,116 @@
DMAData Label Byte
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
DB 0Ah, 4, 0Ch, 0, 0Bh, 58h, 87h, 0, 1, 0Ah, 0
DB 0Ah, 5, 0Ch, 0, 0Bh, 59h, 83h, 2, 3, 0Ah, 1
DB 0Ah, 6, 0Ch, 0, 0Bh, 5Ah, 81h, 4, 5, 0Ah, 2
DB 0Ah, 7, 0Ch, 0, 0Bh, 5Bh, 82h, 6, 7, 0Ah, 3
DB 0D4h, 4, 0D8h, 0, 0D6h, 58h, 8Fh, 0C0h, 0C2h, 0D4h, 0
DB 0D4h, 5, 0D8h, 0, 0D6h, 59h, 8Bh, 0C4h, 0C6h, 0D4h, 1
DB 0D4h, 6, 0D8h, 0, 0D6h, 5Ah, 89h, 0C8h, 0CAh, 0D4h, 2
DB 0D4h, 7, 0D8h, 0, 0D6h, 5Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
ActualDMAPtr Label DWord
ActualDMAOffset DW 0
ActualDMASegment DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetDMA ; BX:AX points to DMA buffer
; DL = DMA Channel
; DI = DMA Size
PushA
Push DS
Push CS
Pop DS
Assume DS:Driver
Mov ActualDMASegment, BX
Mov ActualDMAOffset, AX
Mov CH, BH
ShR CH, 4
ShL BX, 4
Add BX, AX
AdC CH, 0
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
Neg SI
Cmp SI, DI
JA SetDMA1
Add ActualDMAOffset, SI
Add BX, SI
AdC CH, 0
SetDMA1:
Cmp DL, 3
JBE SetDMA2
ShR DI, 1
Push CX
ShR CH, 1
Pop CX
RCR BX, 1
SetDMA2:
Mov AL, 11
Mul DL
Mov SI, AX
Add SI, Offset DMAData
Xor DX, DX
LodsB ; Set mask
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Clear Ptrs
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Set Mode
Mov DL, AL
LodsB
Out DX, AL
LodsB
Mov DL, AL ; DL = page port
Mov AL, CH
Out DX, AL
LodsB
Mov DL, AL ; DL = address port
Mov AL, BL
Out DX, AL
Mov AL, BH
Out DX, AL
LodsB
Mov DL, AL ; DL = count port
Mov AX, DI
Dec AX
Out DX, AL
Mov AL, AH
Out DX, AL
Mov Byte Ptr [CS:DMAPort1], DL
Mov Byte Ptr [CS:DMAPort2], DL
LodsB ; Reset mask
Mov DL, AL
LodsB
Out DX, AL
Pop DS
PopA
Ret
EndP SetDMA
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DMAData Label Byte
; Port/Mask, Port/Clear, Port/DMAMode, Address, Page, Count, Port/Mask
DB 0Ah, 4, 0Ch, 0, 0Bh, 58h, 87h, 0, 1, 0Ah, 0
DB 0Ah, 5, 0Ch, 0, 0Bh, 59h, 83h, 2, 3, 0Ah, 1
DB 0Ah, 6, 0Ch, 0, 0Bh, 5Ah, 81h, 4, 5, 0Ah, 2
DB 0Ah, 7, 0Ch, 0, 0Bh, 5Bh, 82h, 6, 7, 0Ah, 3
DB 0D4h, 4, 0D8h, 0, 0D6h, 58h, 8Fh, 0C0h, 0C2h, 0D4h, 0
DB 0D4h, 5, 0D8h, 0, 0D6h, 59h, 8Bh, 0C4h, 0C6h, 0D4h, 1
DB 0D4h, 6, 0D8h, 0, 0D6h, 5Ah, 89h, 0C8h, 0CAh, 0D4h, 2
DB 0D4h, 7, 0D8h, 0, 0D6h, 5Bh, 8Ah, 0CCh, 0CEh, 0D4h, 3
ActualDMAPtr Label DWord
ActualDMAOffset DW 0
ActualDMASegment DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetDMA ; BX:AX points to DMA buffer
; DL = DMA Channel
; DI = DMA Size
PushA
Push DS
Push CS
Pop DS
Assume DS:Driver
Mov ActualDMASegment, BX
Mov ActualDMAOffset, AX
Mov CH, BH
ShR CH, 4
ShL BX, 4
Add BX, AX
AdC CH, 0
Mov SI, BX ; CH:BH:BL contains 24 bit DMA address
Neg SI
Cmp SI, DI
JA SetDMA1
Add ActualDMAOffset, SI
Add BX, SI
AdC CH, 0
SetDMA1:
Cmp DL, 3
JBE SetDMA2
ShR DI, 1
Push CX
ShR CH, 1
Pop CX
RCR BX, 1
SetDMA2:
Mov AL, 11
Mul DL
Mov SI, AX
Add SI, Offset DMAData
Xor DX, DX
LodsB ; Set mask
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Clear Ptrs
Mov DL, AL
LodsB
Out DX, AL
LodsB ; Set Mode
Mov DL, AL
LodsB
Out DX, AL
LodsB
Mov DL, AL ; DL = page port
Mov AL, CH
Out DX, AL
LodsB
Mov DL, AL ; DL = address port
Mov AL, BL
Out DX, AL
Mov AL, BH
Out DX, AL
LodsB
Mov DL, AL ; DL = count port
Mov AX, DI
Dec AX
Out DX, AL
Mov AL, AH
Out DX, AL
Mov Byte Ptr [CS:DMAPort1], DL
Mov Byte Ptr [CS:DMAPort2], DL
LodsB ; Reset mask
Mov DL, AL
LodsB
Out DX, AL
Pop DS
PopA
Ret
EndP SetDMA
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

View File

@ -1,8 +1,8 @@
ID DB "Impulse Tracker Advanced Sound Driver", 13, 10
DB "Copyright (C) 1995-1998 Jeffrey Lim", 0
DB 26
DB 126 - ($ - Offset ID) Dup (0)
LengthOfDriver DW Offset EndDriver - Offset StartDriver
ID DB "Impulse Tracker Advanced Sound Driver", 13, 10
DB "Copyright (C) 1995-1998 Jeffrey Lim", 0
DB 26
DB 126 - ($ - Offset ID) Dup (0)
LengthOfDriver DW Offset EndDriver - Offset StartDriver

File diff suppressed because it is too large Load Diff

View File

@ -1,161 +1,161 @@
; Do output filtering
; First copy old contents across
; Assumes destination is MixSegment:0
; data order is lastvalues, coefficients, volumes
Push CS
Pop DS
Assume DS:Driver
Xor DI, DI
Mov SI, Offset LastFilter
Mov EAX, [SI+40h]
Mov EBX, [SI+44h]
Mov ECX, [SI+48h]
Mov EDX, [SI+4Ch]
Or EAX, EBX
Or ECX, EDX
Or EAX, ECX
JZ NoEqualize
Mov CX, 80/4
Mov ES, MixSegment
Rep MovsD
; Now do filtering.
FNInit
Mov CX, BytesToMix
Push ES
Pop DS
Assume DS:Nothing
Mov SI, DMABUFFERLENGTH*2+80
OutputFilter1:
FILD DWord Ptr [SI] ; Left sample
FILD DWord Ptr [SI+4] ; R, L
FLd DWord Ptr [DS:20h] ; LB, R, L
FMul ST, ST(2) ; L.LB, R, L
FLd DWord Ptr [DS:20h] ; LB, L.LB, R, L
FMul ST, ST(2) ; R.LB, L.LB, R, L
FLd DWord Ptr [DS:0] ; OL, R.LB, L.LB, R, L
FMul DWord Ptr [DS:24h] ; OL.LB, R.LB, L.LB, R, L
FLd DWord Ptr [DS:4] ; OR, OL.LB, R.LB, L.LB, R, L
FMul DWord Ptr [DS:24h] ; OR.LB, OL.LB, R.LB, L.LB, R, L
FXCh ; OL.LB, OR.LB, R.LB, L.LB, R, L
FAddP ST(3), ST
FAdd ; RLB, LLB, R, L
FLd DWord Ptr [DS:28h] ; MB, RLB, LLB, R, L
FMul ST, ST(4) ; L.MB, RLB, LLB, R, L
FLd DWord Ptr [DS:28h] ; MB, L.MB, RLB, LLB, R, L
FMul ST, ST(4) ; R.MB, L.MB, RLB, LLB, R, L
FLd DWord Ptr [DS:8] ; OL, R.MB, L.MB, RLB, LLB, R, L
FMul DWord Ptr [DS:2Ch] ; OL.MB, R.MB, L.MB, RLB, LLB, R, L
FLd DWord Ptr [DS:0Ch] ; OR, OL.MB, R.MB, L.MB, RLB, LLB, R, L
FMul DWord Ptr [DS:2Ch] ; OR.MB, OL.MB, R.MB, L.MB, RLB, LLB, R, L
FXCh ; OL.MB, OR.MB, R.MB, L.MB, RLB, LLB, R, L
FAddP ST(3), ST
FAdd ; RMB, LMB, RLB, LLB, R, L
FXCh ST(3) ; LLB, LMB, RLB, RMB, R, L
FStP DWord Ptr [DS:0]
FStP DWord Ptr [DS:8]
FStP DWord Ptr [DS:4]
FStP DWord Ptr [DS:0Ch]
FLd DWord Ptr [DS:30h]
FMul ST, ST(2)
FLd DWord Ptr [DS:30h]
FMul ST, ST(2)
FLd DWord Ptr [DS:10h]
FMul DWord Ptr [DS:34h]
FLd DWord Ptr [DS:14h]
FMul DWord Ptr [DS:34h]
FXCh
FAddP ST(3), ST
FAdd
FLd DWord Ptr [DS:38h]
FMul ST, ST(4)
FLd DWord Ptr [DS:38h]
FMul ST, ST(4)
FLd DWord Ptr [DS:18h]
FMul DWord Ptr [DS:3Ch]
FLd DWord Ptr [DS:1Ch]
FMul DWord Ptr [DS:3Ch]
FXCh
FAddP ST(3), ST
FAdd
FXCh ST(3)
FStP DWord Ptr [DS:10h]
FStP DWord Ptr [DS:18h]
FStP DWord Ptr [DS:14h]
FStP DWord Ptr [DS:1Ch] ; R, L
; For each one, output value += ((band value) - (previous band value)) * Volume
FLd DWord Ptr [DS:18h]
FSub DWord Ptr [DS:10h] ; L4, R, L
FLd DWord Ptr [DS:1Ch]
FSub DWord Ptr [DS:14h] ; R4, L4, R, L
FLd DWord Ptr [DS:10h]
FSub DWord Ptr [DS:8]
FLd DWord Ptr [DS:14h]
FSub DWord Ptr [DS:0Ch] ; R3, L3, R4, L4, R, L
FLd DWord Ptr [DS:8]
FSub DWord Ptr [DS:0]
FLd DWord Ptr [DS:0Ch]
FSub DWord Ptr [DS:4] ; R2, L2, R3, L3, R4, L4, R, L
FXCh ST(5) ; L4, L2, R3, L3, R4, R2, R, L
FMul DWord Ptr [DS:4Ch] ; L4V, L2, R3, L3, R4, R2, R, L
FXCh ST(4) ; R4, L2, R3, L3, L4V, R2, R, L
FMul DWord Ptr [DS:4Ch] ; R4V, L2, R3, L3, L4V, R2, R, L
FXCh ST(3) ; L3, L2, R3, R4V, L4V, R2, R, L
FMul DWord Ptr [DS:48h] ; L3V, L2, R3, R4V, L4V, R2, R, L
FXCh ST(2) ; R3, L2, L3V, R4V, L4V, R2, R, L
FMul DWord Ptr [DS:48h] ; R3V, L2, L3V, R4V, L4V, R2, R, L
FXCh ; L2, R3V, L3V, R4V, L4V, R2, R, L
FMul DWord Ptr [DS:44h] ; L2V, R3V, L3V, R4V, L4V, R2, R, L
FXCh ST(5) ; R2, R3V, L3V, R4V, L4V, L2V, R, L
FMul DWord Ptr [DS:44h] ; R2V, R3V, L3V, R4V, L4V, L2V, R, L
FXCh ST(4) ; L4V, R3V, L3V, R4V, R2V, L2V, R, L
FAddP ST(7), ST ; R3V, L3V, R4V, R2V, L2V, R, L
FAddP ST(5), ST ; L3V, R4V, R2V, L2V, R, L
FAddP ST(3), ST
FAdd
FLd DWord Ptr [DS:0]
FMul DWord Ptr [DS:40h] ; L1V, RV, LV, R, L
FLd DWord Ptr [DS:4] ;
FMul DWord Ptr [DS:40h] ; R1V, L1V, RV, LV, R, L
FXCh ST(2) ; RV, L1V, R1V, LV, R, L
FAddP ST(4), ST ; L1V, R1V, LV, R, L
FAddP ST(4), ST ; R1V, LV, R, L
FAddP ST(2), ST
FAddP ST(2), ST
FIStP DWord Ptr [SI+4]
FIStP DWord Ptr [SI]
Add SI, 8
Dec CX
JNZ OutputFilter1
; Transfer contents out
Push CS
Pop ES
Mov DI, Offset LastFilter
Xor SI, SI
Mov CX, 32/4
Rep MovsD
; Finished output filtering!
NoEqualize:
; Do output filtering
; First copy old contents across
; Assumes destination is MixSegment:0
; data order is lastvalues, coefficients, volumes
Push CS
Pop DS
Assume DS:Driver
Xor DI, DI
Mov SI, Offset LastFilter
Mov EAX, [SI+40h]
Mov EBX, [SI+44h]
Mov ECX, [SI+48h]
Mov EDX, [SI+4Ch]
Or EAX, EBX
Or ECX, EDX
Or EAX, ECX
JZ NoEqualize
Mov CX, 80/4
Mov ES, MixSegment
Rep MovsD
; Now do filtering.
FNInit
Mov CX, BytesToMix
Push ES
Pop DS
Assume DS:Nothing
Mov SI, DMABUFFERLENGTH*2+80
OutputFilter1:
FILD DWord Ptr [SI] ; Left sample
FILD DWord Ptr [SI+4] ; R, L
FLd DWord Ptr [DS:20h] ; LB, R, L
FMul ST, ST(2) ; L.LB, R, L
FLd DWord Ptr [DS:20h] ; LB, L.LB, R, L
FMul ST, ST(2) ; R.LB, L.LB, R, L
FLd DWord Ptr [DS:0] ; OL, R.LB, L.LB, R, L
FMul DWord Ptr [DS:24h] ; OL.LB, R.LB, L.LB, R, L
FLd DWord Ptr [DS:4] ; OR, OL.LB, R.LB, L.LB, R, L
FMul DWord Ptr [DS:24h] ; OR.LB, OL.LB, R.LB, L.LB, R, L
FXCh ; OL.LB, OR.LB, R.LB, L.LB, R, L
FAddP ST(3), ST
FAdd ; RLB, LLB, R, L
FLd DWord Ptr [DS:28h] ; MB, RLB, LLB, R, L
FMul ST, ST(4) ; L.MB, RLB, LLB, R, L
FLd DWord Ptr [DS:28h] ; MB, L.MB, RLB, LLB, R, L
FMul ST, ST(4) ; R.MB, L.MB, RLB, LLB, R, L
FLd DWord Ptr [DS:8] ; OL, R.MB, L.MB, RLB, LLB, R, L
FMul DWord Ptr [DS:2Ch] ; OL.MB, R.MB, L.MB, RLB, LLB, R, L
FLd DWord Ptr [DS:0Ch] ; OR, OL.MB, R.MB, L.MB, RLB, LLB, R, L
FMul DWord Ptr [DS:2Ch] ; OR.MB, OL.MB, R.MB, L.MB, RLB, LLB, R, L
FXCh ; OL.MB, OR.MB, R.MB, L.MB, RLB, LLB, R, L
FAddP ST(3), ST
FAdd ; RMB, LMB, RLB, LLB, R, L
FXCh ST(3) ; LLB, LMB, RLB, RMB, R, L
FStP DWord Ptr [DS:0]
FStP DWord Ptr [DS:8]
FStP DWord Ptr [DS:4]
FStP DWord Ptr [DS:0Ch]
FLd DWord Ptr [DS:30h]
FMul ST, ST(2)
FLd DWord Ptr [DS:30h]
FMul ST, ST(2)
FLd DWord Ptr [DS:10h]
FMul DWord Ptr [DS:34h]
FLd DWord Ptr [DS:14h]
FMul DWord Ptr [DS:34h]
FXCh
FAddP ST(3), ST
FAdd
FLd DWord Ptr [DS:38h]
FMul ST, ST(4)
FLd DWord Ptr [DS:38h]
FMul ST, ST(4)
FLd DWord Ptr [DS:18h]
FMul DWord Ptr [DS:3Ch]
FLd DWord Ptr [DS:1Ch]
FMul DWord Ptr [DS:3Ch]
FXCh
FAddP ST(3), ST
FAdd
FXCh ST(3)
FStP DWord Ptr [DS:10h]
FStP DWord Ptr [DS:18h]
FStP DWord Ptr [DS:14h]
FStP DWord Ptr [DS:1Ch] ; R, L
; For each one, output value += ((band value) - (previous band value)) * Volume
FLd DWord Ptr [DS:18h]
FSub DWord Ptr [DS:10h] ; L4, R, L
FLd DWord Ptr [DS:1Ch]
FSub DWord Ptr [DS:14h] ; R4, L4, R, L
FLd DWord Ptr [DS:10h]
FSub DWord Ptr [DS:8]
FLd DWord Ptr [DS:14h]
FSub DWord Ptr [DS:0Ch] ; R3, L3, R4, L4, R, L
FLd DWord Ptr [DS:8]
FSub DWord Ptr [DS:0]
FLd DWord Ptr [DS:0Ch]
FSub DWord Ptr [DS:4] ; R2, L2, R3, L3, R4, L4, R, L
FXCh ST(5) ; L4, L2, R3, L3, R4, R2, R, L
FMul DWord Ptr [DS:4Ch] ; L4V, L2, R3, L3, R4, R2, R, L
FXCh ST(4) ; R4, L2, R3, L3, L4V, R2, R, L
FMul DWord Ptr [DS:4Ch] ; R4V, L2, R3, L3, L4V, R2, R, L
FXCh ST(3) ; L3, L2, R3, R4V, L4V, R2, R, L
FMul DWord Ptr [DS:48h] ; L3V, L2, R3, R4V, L4V, R2, R, L
FXCh ST(2) ; R3, L2, L3V, R4V, L4V, R2, R, L
FMul DWord Ptr [DS:48h] ; R3V, L2, L3V, R4V, L4V, R2, R, L
FXCh ; L2, R3V, L3V, R4V, L4V, R2, R, L
FMul DWord Ptr [DS:44h] ; L2V, R3V, L3V, R4V, L4V, R2, R, L
FXCh ST(5) ; R2, R3V, L3V, R4V, L4V, L2V, R, L
FMul DWord Ptr [DS:44h] ; R2V, R3V, L3V, R4V, L4V, L2V, R, L
FXCh ST(4) ; L4V, R3V, L3V, R4V, R2V, L2V, R, L
FAddP ST(7), ST ; R3V, L3V, R4V, R2V, L2V, R, L
FAddP ST(5), ST ; L3V, R4V, R2V, L2V, R, L
FAddP ST(3), ST
FAdd
FLd DWord Ptr [DS:0]
FMul DWord Ptr [DS:40h] ; L1V, RV, LV, R, L
FLd DWord Ptr [DS:4] ;
FMul DWord Ptr [DS:40h] ; R1V, L1V, RV, LV, R, L
FXCh ST(2) ; RV, L1V, R1V, LV, R, L
FAddP ST(4), ST ; L1V, R1V, LV, R, L
FAddP ST(4), ST ; R1V, LV, R, L
FAddP ST(2), ST
FAddP ST(2), ST
FIStP DWord Ptr [SI+4]
FIStP DWord Ptr [SI]
Add SI, 8
Dec CX
JNZ OutputFilter1
; Transfer contents out
Push CS
Pop ES
Mov DI, Offset LastFilter
Xor SI, SI
Mov CX, 32/4
Rep MovsD
; Finished output filtering!
NoEqualize:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,83 +1,83 @@
FourierBufferStart DW 0
FourierBufferInputStart DW 0
FourierBufferInputFractional DW 0
FourierBufferStepOffset DW 1
FourierBufferStepFractional DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc UpdateFourierBuffer
PushAD
Push DS
Push ES
Push CS
Pop DS
Assume DS:Driver
Xor EBX, EBX
Xor ESI, ESI
Mov BX, MixTransferOffset
Mov DI, FourierBufferStart
ShR BX, 3
Mov CX, BytesToMix
Mov SI, FourierBufferInputStart
Add SI, BX
Add CX, BX
Mov BP, FourierBufferInputFractional
Mov DX, FourierBufferStepOffset
Mov BX, FourierBufferStepFractional
Mov ES, FourierSegment
Mov DS, MixSegment
Assume DS:Nothing
UpdateFourierBuffer1:
Mov EAX, [ESI*8]
Add EAX, [ESI*8+4]
SAR EAX, 13
Cmp EAX, 7FFFh
JG UpdateFourierBuffer3
Cmp EAX, -8000h
JL UpdateFourierBuffer4
UpdateFourierBuffer2:
StosW
Add BP, BX
AdC SI, DX
And DI, (FOURIERBUFFERLENGTH*2)-1
; Cmp past end of buffer?
Cmp SI, CX
JB UpdateFourierBuffer1
Sub SI, CX
Mov FourierBufferStart, DI
Mov FourierBufferInputFractional, BP
Mov FourierBufferInputStart, SI
Pop ES
Pop DS
PopAD
Ret
UpdateFourierBuffer3:
Mov AX, 7FFFh
Jmp UpdateFourierBuffer2
UpdateFourierBuffer4:
Mov AX, 8000h
Jmp UpdateFourierBuffer2
EndP UpdateFourierBuffer
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
FourierBufferStart DW 0
FourierBufferInputStart DW 0
FourierBufferInputFractional DW 0
FourierBufferStepOffset DW 1
FourierBufferStepFractional DW 0
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc UpdateFourierBuffer
PushAD
Push DS
Push ES
Push CS
Pop DS
Assume DS:Driver
Xor EBX, EBX
Xor ESI, ESI
Mov BX, MixTransferOffset
Mov DI, FourierBufferStart
ShR BX, 3
Mov CX, BytesToMix
Mov SI, FourierBufferInputStart
Add SI, BX
Add CX, BX
Mov BP, FourierBufferInputFractional
Mov DX, FourierBufferStepOffset
Mov BX, FourierBufferStepFractional
Mov ES, FourierSegment
Mov DS, MixSegment
Assume DS:Nothing
UpdateFourierBuffer1:
Mov EAX, [ESI*8]
Add EAX, [ESI*8+4]
SAR EAX, 13
Cmp EAX, 7FFFh
JG UpdateFourierBuffer3
Cmp EAX, -8000h
JL UpdateFourierBuffer4
UpdateFourierBuffer2:
StosW
Add BP, BX
AdC SI, DX
And DI, (FOURIERBUFFERLENGTH*2)-1
; Cmp past end of buffer?
Cmp SI, CX
JB UpdateFourierBuffer1
Sub SI, CX
Mov FourierBufferStart, DI
Mov FourierBufferInputFractional, BP
Mov FourierBufferInputStart, SI
Pop ES
Pop DS
PopAD
Ret
UpdateFourierBuffer3:
Mov AX, 7FFFh
Jmp UpdateFourierBuffer2
UpdateFourierBuffer4:
Mov AX, 8000h
Jmp UpdateFourierBuffer2
EndP UpdateFourierBuffer
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

View File

@ -1,34 +1,34 @@
FilterFrequencyTable Label DWord
DD 3A9F7867h, 3A9AEE36h, 3A96851Bh, 3A923C25h
DD 3A8E1269h, 3A8A0703h, 3A861918h, 3A8247CFh
DD 3A7D24B3h, 3A75EFD6h, 3A6EEF7Dh, 3A68222Ch
DD 3A61866Dh, 3A5B1AD6h, 3A54DE0Bh, 3A4ECEB3h
DD 3A48EB87h, 3A433341h, 3A3DA4ACh, 3A383E96h
DD 3A32FFD8h, 3A2DE754h, 3A28F3F3h, 3A2424A6h
DD 3A1F7867h, 3A1AEE36h, 3A16851Bh, 3A123C25h
DD 3A0E1269h, 3A0A0703h, 3A061918h, 3A0247CFh
DD 39FD24B3h, 39F5EFD6h, 39EEEF7Dh, 39E8222Ch
DD 39E1866Dh, 39DB1AD6h, 39D4DE0Bh, 39CECEB3h
DD 39C8EB87h, 39C33341h, 39BDA4ACh, 39B83E96h
DD 39B2FFD8h, 39ADE754h, 39A8F3F3h, 39A424A6h
DD 399F7867h, 399AEE36h, 3996851Bh, 39923C25h
DD 398E1269h, 398A0703h, 39861918h, 398247CFh
DD 397D24B3h, 3975EFD6h, 396EEF7Dh, 3968222Ch
DD 3961866Dh, 395B1AD6h, 3954DE0Bh, 394ECEB3h
DD 3948EB87h, 39433341h, 393DA4ACh, 39383E96h
DD 3932FFD8h, 392DE754h, 3928F3F3h, 392424A6h
DD 391F7867h, 391AEE36h, 3916851Bh, 39123C25h
DD 390E1269h, 390A0703h, 39061918h, 390247CFh
DD 38FD24B3h, 38F5EFD6h, 38EEEF7Dh, 38E8222Ch
DD 38E1866Dh, 38DB1AD6h, 38D4DE0Bh, 38CECEB3h
DD 38C8EB87h, 38C33341h, 38BDA4ACh, 38B83E96h
DD 38B2FFD8h, 38ADE754h, 38A8F3F3h, 38A424A6h
DD 389F7867h, 389AEE36h, 3896851Bh, 38923C25h
DD 388E1269h, 388A0703h, 38861918h, 388247CFh
DD 387D24B3h, 3875EFD6h, 386EEF7Dh, 3868222Ch
DD 3861866Dh, 385B1AD6h, 3854DE0Bh, 384ECEB3h
DD 3848EB87h, 38433341h, 383DA4ACh, 38383E96h
DD 3832FFD8h, 382DE754h, 3828F3F3h, 382424A6h
DD 381F7867h, 381AEE36h, 3816851Bh, 38123C25h
DD 380E1269h, 380A0703h, 38061918h, 380247CFh
FilterFrequencyTable Label DWord
DD 3A9F7867h, 3A9AEE36h, 3A96851Bh, 3A923C25h
DD 3A8E1269h, 3A8A0703h, 3A861918h, 3A8247CFh
DD 3A7D24B3h, 3A75EFD6h, 3A6EEF7Dh, 3A68222Ch
DD 3A61866Dh, 3A5B1AD6h, 3A54DE0Bh, 3A4ECEB3h
DD 3A48EB87h, 3A433341h, 3A3DA4ACh, 3A383E96h
DD 3A32FFD8h, 3A2DE754h, 3A28F3F3h, 3A2424A6h
DD 3A1F7867h, 3A1AEE36h, 3A16851Bh, 3A123C25h
DD 3A0E1269h, 3A0A0703h, 3A061918h, 3A0247CFh
DD 39FD24B3h, 39F5EFD6h, 39EEEF7Dh, 39E8222Ch
DD 39E1866Dh, 39DB1AD6h, 39D4DE0Bh, 39CECEB3h
DD 39C8EB87h, 39C33341h, 39BDA4ACh, 39B83E96h
DD 39B2FFD8h, 39ADE754h, 39A8F3F3h, 39A424A6h
DD 399F7867h, 399AEE36h, 3996851Bh, 39923C25h
DD 398E1269h, 398A0703h, 39861918h, 398247CFh
DD 397D24B3h, 3975EFD6h, 396EEF7Dh, 3968222Ch
DD 3961866Dh, 395B1AD6h, 3954DE0Bh, 394ECEB3h
DD 3948EB87h, 39433341h, 393DA4ACh, 39383E96h
DD 3932FFD8h, 392DE754h, 3928F3F3h, 392424A6h
DD 391F7867h, 391AEE36h, 3916851Bh, 39123C25h
DD 390E1269h, 390A0703h, 39061918h, 390247CFh
DD 38FD24B3h, 38F5EFD6h, 38EEEF7Dh, 38E8222Ch
DD 38E1866Dh, 38DB1AD6h, 38D4DE0Bh, 38CECEB3h
DD 38C8EB87h, 38C33341h, 38BDA4ACh, 38B83E96h
DD 38B2FFD8h, 38ADE754h, 38A8F3F3h, 38A424A6h
DD 389F7867h, 389AEE36h, 3896851Bh, 38923C25h
DD 388E1269h, 388A0703h, 38861918h, 388247CFh
DD 387D24B3h, 3875EFD6h, 386EEF7Dh, 3868222Ch
DD 3861866Dh, 385B1AD6h, 3854DE0Bh, 384ECEB3h
DD 3848EB87h, 38433341h, 383DA4ACh, 38383E96h
DD 3832FFD8h, 382DE754h, 3828F3F3h, 382424A6h
DD 381F7867h, 381AEE36h, 3816851Bh, 38123C25h
DD 380E1269h, 380A0703h, 38061918h, 380247CFh

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
RAMP EQU 1
include gus.inc
RAMP EQU 1
include gus.inc

View File

@ -1,3 +1,3 @@
include gus.inc
include gus.inc

View File

@ -1,5 +1,5 @@
RIC EQU 1
include gus.inc
RIC EQU 1
include gus.inc

View File

@ -1,4 +1,4 @@
RAMP EQU 1
RIC EQU 1
include gus.inc
RAMP EQU 1
RIC EQU 1
include gus.inc

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,27 @@
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetGUSVolume ; BX = new volume
; To do:
; 1) Set ramp start
; 2) Set ramp end
; 3) Set current volume
; 4) Start ramp
; 5) Save new volume.
Mov AL, 9
Out DX, AL
Add BX, BX
Mov AX, [CS:GUSVolumeTable+BX]
Inc DX
Out DX, AX
Call GUSDelay
Out DX, AX
Dec DX
Ret
EndP SetGUSVolume
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetGUSVolume ; BX = new volume
; To do:
; 1) Set ramp start
; 2) Set ramp end
; 3) Set current volume
; 4) Start ramp
; 5) Save new volume.
Mov AL, 9
Out DX, AL
Add BX, BX
Mov AX, [CS:GUSVolumeTable+BX]
Inc DX
Out DX, AX
Call GUSDelay
Out DX, AX
Dec DX
Ret
EndP SetGUSVolume

View File

@ -1,415 +1,415 @@
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetGUSRegisters ; Given DS:SI, CX
Mov ES, CS:SongDataArea
Push CX
Push SI
Xor AX, AX
GetOffsetLoop:
Push AX
Push CX
Mov DX, GUSVoiceSelect
Out DX, AL ; OK.. now to play with this
; voice.
Call GUSDelay
Inc DL ; DX = select rego
Mov BX, [SI]
Test BH, 2
JZ GetOffsetLoop2
Mov BX, 200h
Mov [SI], BX
GetOffsetLoop2:
Test BL, 1 ; Channel not on!
JZ GetOffsetLoop1
Test BH, 1
JZ GetOffsetLoop3 ; Prev 1.
Xor BX, BX
Call SetGUSVolume
Mov AL, 80h
Out DX, AL
Add DL, 2
In AL, DX
Sub DL, 2
Mov AH, AL
And AX, 400h
Out DX, AL ; AL = 0 (Mode control)
Mov AL, 3
Or AL, AH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Jmp GetOffsetLoop1
GetOffsetLoop3:
Mov EAX, [SI+4Ch]
Mov [SI+2Ch], EAX
Mov AL, 8Ah
Out DX, AL
Inc DX
In AX, DX
Dec DX
And AH, 31
ShL EAX, 16 ; Load high part of EAX
Mov AL, 8Bh
Out DX, AL
Inc DX
In AX, DX
; EAX = 000OOOOO OOOOOOOO OOOOOOOF FFFFFFFF
; Need: 00000000 0000OOOO OOOOOOOO OOOOOOOO
ShR EAX, 9
; EAX contains current loc.
; Convert to Offset (in sample)
MovZX EBX, Byte Ptr [SI+36h]
Sub EAX, [CS:GUSDataTable+EBX*4]
Push CX
Mov CL, CS:Compress
ShL EAX, CL
Pop CX
Mov [SI+4Ch], EAX
GetOffsetLoop1:
Add SI, SLAVECHANNELSIZE
Pop CX
Pop AX
Inc AX
Loop GetOffsetLoop
Pop SI
Pop CX
Xor AX, AX
SetGUSRegisters1:
Push AX
Push CX
Mov DX, GUSVoiceSelect
Out DX, AL ; OK.. now to play with this
; voice.
Call GUSDelay
Mov CX, [SI] ; CX = flags.
Inc DL ; DX = select rego
SetGUSRegisters21:
Test CL, 32 ; Frequency change
JZ SetGUSRegisters7
Push DX
Mov EAX, [SI+10h] ; EAX = freq.
Push CX
Mov CL, CS:Compress
ShR EAX, CL
Pop CX
Xor EDX, EDX
MovZX EBX, MixSpeed
Div EBX ; EAX = I portion.
Test EAX, Not 63
JNZ SetGUSRegisters6
Push EAX
Xor EAX, EAX
Div EBX
Pop EBX ; EBX:EAX = IIII FFFF etc.
SHRD EAX, EBX, 6
; Have: IIIIIIII IIIIIIII FFFFFFFF FFFFFFFF
; Req: IIIIIIFF FFFFFFF0
Pop DX
Mov AL, 1
Out DX, AL
ShR EAX, 16
Add AX, 1
SBB AX, 0 ; Just in case!
And AX, Not 1
Inc DX
Out DX, AX
Dec DX
Jmp SetGUSRegisters7
SetGUSRegisters6:
Mov CH, 2 ; Signify to turn off channel
Pop DX
SetGUSRegisters7:
MovZX BX, Byte Ptr [SI+36h] ; BX = sample number.
Cmp BL, 99
JA SetGUSRegisters20
ShL BX, 2 ; GUSDataTable+BX = position
Cmp DWord Ptr [CS:GUSDataTable+BX], 0FFFFFFFFh
JNE SetGUSRegisters10
SetGUSRegisters20:
Mov CH, 2
Jmp SetGUSRegisters9
SetGUSRegisters10:
Test CH, 5 ; Loop changed?!??!?
JZ SetGUSRegisters8
Mov AL, 3 ; Starting location low.
Out DX, AL
Mov EAX, [SI+40h]
Call GUSGetAddress
; Reqd: ...OOOOO OOOOOOOO OOOOOOOI III.....
Inc DX
Out DX, AX
Dec DX
Mov AL, 2 ; Starting location high
Out DX, AL
ShR EAX, 16
Inc DX
Out DX, AX
Dec DX
; Ending location...
Mov AL, 5 ; Ending location low
Out DX, AL
Mov EAX, [SI+44h]
Call GUSGetAddress
Inc DX
Out DX, AX
Dec DX
Mov AL, 4 ; Ending location high
Out DX, AL
SHR EAX, 16
Inc DX
Out DX, AX
Dec DX
SetGUSRegisters8:
Test CH, 1 ; Do Current position?
JZ SetGUSRegisters9
Mov AL, 0Bh ; Current location LOW
Out DX, AL
Mov EAX, [SI+4Ch]
Mov [SI+2Ch], EAX
; EAX = OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO
; Req: xxxOOOOO OOOOOOOO OOOOOOOF FFFFFFFF
Call GUSGetAddress
Mov DI, AX
Inc DX
Out DX, AX
Dec DX
Mov AL, 0Ah ; Current location HIGH
Out DX, AL
SHR EAX, 16
Inc DX
Out DX, AX
Call GUSDelay
Out DX, AX
Dec DX
Mov AL, 0Bh
Out DX, AL
Mov AX, DI
Inc DX
Out DX, AX
Dec DX
SetGUSRegisters9:
Test CL, 64 ; New volume??
JZ SetGUSPanning
SetGUSRegisters23:
Xor BX, BX
Test CH, 8
JNZ SetGUSRegistersMuted
Mov BL, Byte Ptr [SI+20h] ; BL = volume, 0->128
SetGUSRegistersMuted:
Call SetGUSVolume
SetGUSPanning:
Test CH, 128 ; New panning?
JZ SetGUSRegisters5
Mov AL, 0Ch ; Set panning.
Out DX, AL
Test CS:Stereo, 1
JZ SetGUSRegisters3
Mov AL, [SI+37h]
Cmp AL, 100
JNE SetGUSRegisters4
SetGUSRegisters3:
Mov AL, 32 ; Surround goes to mono :(
SetGUSRegisters4: ; AL = 0->64
ShR AL, 1 ; AL = 0->32
Sub AL, 1
AdC AL, 0 ; AL = 0->31
ShR AL, 1
Add DL, 2
Out DX, AL
Sub DL, 2
SetGUSRegisters5:
; Now for control register.
; If CH | 2, then turn rego OFF
; If CH | 5, then turn rego ON
; If CL | 1, then check channel
Test CH, 2
JNZ SetGUSRegisters11
Test CH, 5
JNZ SetGUSRegisters12
Test CL, 1
JZ SetGUSRegisters13
Mov AL, 80h ; Read voice control
Out DX, AL
Add DL, 2
In AL, DX
Sub DL, 2
Test AL, 1
JZ SetGUSRegisters13
Xor BX, BX
Call SetGUSVolume
Jmp SetGUSRegisters14
SetGUSRegisters11:
; Turn off.
Xor AL, AL
Out DX, AL ; AL = 0 (Mode control)
Mov AL, 2
Add DL, 2
Mov AH, [SI+18h] ; 16 bit?
Add AH, AH
Or AL, AH
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Xor BX, BX
Call SetGUSVolume
SetGUSRegisters14:
Test CL, 1
JZ SetGUSRegisters13
Xor CX, CX ; Turn off channel
Test Byte Ptr [SI+3Ah], 80h
JNZ SetGUSRegisters13
Mov BX, [SI+38h]
And Byte Ptr [BX], Not 4 ; Signify channel off
Jmp SetGUSRegisters13
SetGUSRegisters12: ; Turn on
Xor AL, AL
Out DX, AL
Mov AL, [SI+0Ah]
Cmp CS:Convert16To8Bit, 0
JNZ SetGUSRegistersNo16Bit
Mov AH, [SI+18h] ; 16 bit?
Add AH, AH
Or AL, AH
SetGUSRegistersNo16Bit:
Test CL, 1
JNZ SetGUSRegisters15
Mov AL, 2
Xor CX, CX
SetGUSRegisters15:
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
SetGUSRegisters13:
And CX, 0111100010011111b ; Turns off:
; 1) Freq, pan & vol recalc
; 2) New note/note stop/loop cha
Mov [SI], CX
Add SI, SLAVECHANNELSIZE
; Call CheckMIDI
Pop CX
Pop AX
Inc AX
Dec CX
JNZ SetGUSRegisters1
Ret
EndP SetGUSRegisters
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc SetGUSRegisters ; Given DS:SI, CX
Mov ES, CS:SongDataArea
Push CX
Push SI
Xor AX, AX
GetOffsetLoop:
Push AX
Push CX
Mov DX, GUSVoiceSelect
Out DX, AL ; OK.. now to play with this
; voice.
Call GUSDelay
Inc DL ; DX = select rego
Mov BX, [SI]
Test BH, 2
JZ GetOffsetLoop2
Mov BX, 200h
Mov [SI], BX
GetOffsetLoop2:
Test BL, 1 ; Channel not on!
JZ GetOffsetLoop1
Test BH, 1
JZ GetOffsetLoop3 ; Prev 1.
Xor BX, BX
Call SetGUSVolume
Mov AL, 80h
Out DX, AL
Add DL, 2
In AL, DX
Sub DL, 2
Mov AH, AL
And AX, 400h
Out DX, AL ; AL = 0 (Mode control)
Mov AL, 3
Or AL, AH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Jmp GetOffsetLoop1
GetOffsetLoop3:
Mov EAX, [SI+4Ch]
Mov [SI+2Ch], EAX
Mov AL, 8Ah
Out DX, AL
Inc DX
In AX, DX
Dec DX
And AH, 31
ShL EAX, 16 ; Load high part of EAX
Mov AL, 8Bh
Out DX, AL
Inc DX
In AX, DX
; EAX = 000OOOOO OOOOOOOO OOOOOOOF FFFFFFFF
; Need: 00000000 0000OOOO OOOOOOOO OOOOOOOO
ShR EAX, 9
; EAX contains current loc.
; Convert to Offset (in sample)
MovZX EBX, Byte Ptr [SI+36h]
Sub EAX, [CS:GUSDataTable+EBX*4]
Push CX
Mov CL, CS:Compress
ShL EAX, CL
Pop CX
Mov [SI+4Ch], EAX
GetOffsetLoop1:
Add SI, SLAVECHANNELSIZE
Pop CX
Pop AX
Inc AX
Loop GetOffsetLoop
Pop SI
Pop CX
Xor AX, AX
SetGUSRegisters1:
Push AX
Push CX
Mov DX, GUSVoiceSelect
Out DX, AL ; OK.. now to play with this
; voice.
Call GUSDelay
Mov CX, [SI] ; CX = flags.
Inc DL ; DX = select rego
SetGUSRegisters21:
Test CL, 32 ; Frequency change
JZ SetGUSRegisters7
Push DX
Mov EAX, [SI+10h] ; EAX = freq.
Push CX
Mov CL, CS:Compress
ShR EAX, CL
Pop CX
Xor EDX, EDX
MovZX EBX, MixSpeed
Div EBX ; EAX = I portion.
Test EAX, Not 63
JNZ SetGUSRegisters6
Push EAX
Xor EAX, EAX
Div EBX
Pop EBX ; EBX:EAX = IIII FFFF etc.
SHRD EAX, EBX, 6
; Have: IIIIIIII IIIIIIII FFFFFFFF FFFFFFFF
; Req: IIIIIIFF FFFFFFF0
Pop DX
Mov AL, 1
Out DX, AL
ShR EAX, 16
Add AX, 1
SBB AX, 0 ; Just in case!
And AX, Not 1
Inc DX
Out DX, AX
Dec DX
Jmp SetGUSRegisters7
SetGUSRegisters6:
Mov CH, 2 ; Signify to turn off channel
Pop DX
SetGUSRegisters7:
MovZX BX, Byte Ptr [SI+36h] ; BX = sample number.
Cmp BL, 99
JA SetGUSRegisters20
ShL BX, 2 ; GUSDataTable+BX = position
Cmp DWord Ptr [CS:GUSDataTable+BX], 0FFFFFFFFh
JNE SetGUSRegisters10
SetGUSRegisters20:
Mov CH, 2
Jmp SetGUSRegisters9
SetGUSRegisters10:
Test CH, 5 ; Loop changed?!??!?
JZ SetGUSRegisters8
Mov AL, 3 ; Starting location low.
Out DX, AL
Mov EAX, [SI+40h]
Call GUSGetAddress
; Reqd: ...OOOOO OOOOOOOO OOOOOOOI III.....
Inc DX
Out DX, AX
Dec DX
Mov AL, 2 ; Starting location high
Out DX, AL
ShR EAX, 16
Inc DX
Out DX, AX
Dec DX
; Ending location...
Mov AL, 5 ; Ending location low
Out DX, AL
Mov EAX, [SI+44h]
Call GUSGetAddress
Inc DX
Out DX, AX
Dec DX
Mov AL, 4 ; Ending location high
Out DX, AL
SHR EAX, 16
Inc DX
Out DX, AX
Dec DX
SetGUSRegisters8:
Test CH, 1 ; Do Current position?
JZ SetGUSRegisters9
Mov AL, 0Bh ; Current location LOW
Out DX, AL
Mov EAX, [SI+4Ch]
Mov [SI+2Ch], EAX
; EAX = OOOOOOOO OOOOOOOO OOOOOOOO OOOOOOOO
; Req: xxxOOOOO OOOOOOOO OOOOOOOF FFFFFFFF
Call GUSGetAddress
Mov DI, AX
Inc DX
Out DX, AX
Dec DX
Mov AL, 0Ah ; Current location HIGH
Out DX, AL
SHR EAX, 16
Inc DX
Out DX, AX
Call GUSDelay
Out DX, AX
Dec DX
Mov AL, 0Bh
Out DX, AL
Mov AX, DI
Inc DX
Out DX, AX
Dec DX
SetGUSRegisters9:
Test CL, 64 ; New volume??
JZ SetGUSPanning
SetGUSRegisters23:
Xor BX, BX
Test CH, 8
JNZ SetGUSRegistersMuted
Mov BL, Byte Ptr [SI+20h] ; BL = volume, 0->128
SetGUSRegistersMuted:
Call SetGUSVolume
SetGUSPanning:
Test CH, 128 ; New panning?
JZ SetGUSRegisters5
Mov AL, 0Ch ; Set panning.
Out DX, AL
Test CS:Stereo, 1
JZ SetGUSRegisters3
Mov AL, [SI+37h]
Cmp AL, 100
JNE SetGUSRegisters4
SetGUSRegisters3:
Mov AL, 32 ; Surround goes to mono :(
SetGUSRegisters4: ; AL = 0->64
ShR AL, 1 ; AL = 0->32
Sub AL, 1
AdC AL, 0 ; AL = 0->31
ShR AL, 1
Add DL, 2
Out DX, AL
Sub DL, 2
SetGUSRegisters5:
; Now for control register.
; If CH | 2, then turn rego OFF
; If CH | 5, then turn rego ON
; If CL | 1, then check channel
Test CH, 2
JNZ SetGUSRegisters11
Test CH, 5
JNZ SetGUSRegisters12
Test CL, 1
JZ SetGUSRegisters13
Mov AL, 80h ; Read voice control
Out DX, AL
Add DL, 2
In AL, DX
Sub DL, 2
Test AL, 1
JZ SetGUSRegisters13
Xor BX, BX
Call SetGUSVolume
Jmp SetGUSRegisters14
SetGUSRegisters11:
; Turn off.
Xor AL, AL
Out DX, AL ; AL = 0 (Mode control)
Mov AL, 2
Add DL, 2
Mov AH, [SI+18h] ; 16 bit?
Add AH, AH
Or AL, AH
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Xor BX, BX
Call SetGUSVolume
SetGUSRegisters14:
Test CL, 1
JZ SetGUSRegisters13
Xor CX, CX ; Turn off channel
Test Byte Ptr [SI+3Ah], 80h
JNZ SetGUSRegisters13
Mov BX, [SI+38h]
And Byte Ptr [BX], Not 4 ; Signify channel off
Jmp SetGUSRegisters13
SetGUSRegisters12: ; Turn on
Xor AL, AL
Out DX, AL
Mov AL, [SI+0Ah]
Cmp CS:Convert16To8Bit, 0
JNZ SetGUSRegistersNo16Bit
Mov AH, [SI+18h] ; 16 bit?
Add AH, AH
Or AL, AH
SetGUSRegistersNo16Bit:
Test CL, 1
JNZ SetGUSRegisters15
Mov AL, 2
Xor CX, CX
SetGUSRegisters15:
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
SetGUSRegisters13:
And CX, 0111100010011111b ; Turns off:
; 1) Freq, pan & vol recalc
; 2) New note/note stop/loop cha
Mov [SI], CX
Add SI, SLAVECHANNELSIZE
; Call CheckMIDI
Pop CX
Pop AX
Inc AX
Dec CX
JNZ SetGUSRegisters1
Ret
EndP SetGUSRegisters

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,114 +1,114 @@
Proc SetGUSVolume ; BX = new volume
; To do:
; 1) Set ramp start
; 2) Set ramp end
; 3) Set current volume
; 4) Start ramp
; 5) Save new volume.
Push BX
Push CX
Mov AL, 0Dh
Out DX, AL
Mov AL, 3 ; Stop Ramp!
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Add BX, BX
Mov CX, [CS:GUSVolumeTable+BX] ; CX = new volume
Mov BX, [SI+2]
Add BX, BX
Mov BX, [CS:GUSVolumeTable+BX] ; BX = old volume
Cmp BX, CX
JNE SetGUSVolume2
Mov AL, 89h
Out DX, AL
Inc DX
In AX, DX
Dec DX
Mov BX, AX ; BX = old volume
SetGUSVolume2:
Push BX ; Old volume on stack
Xor AH, AH ; Ramp up
Cmp CX, BX
JAE SetGUSVolume1
XChg BX, CX
Mov AH, 40h ; Ramp down
SetGUSVolume1:
Mov AL, 6 ; Ramp rate
Out DX, AL
Mov AL, Byte Ptr CS:UsedChannels
ShR AL, 1
Add AL, 16
Add DL, 2
Out DX, AL
Sub DL, 2
Mov AL, 7 ; Ramp start
Out DX, AL
Mov AL, BH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Mov AL, 8 ; Ramp end
Out DX, AL
Mov AL, CH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Mov AL, 9
Out DX, AL
Pop BX ; BX = old volume
XChg BX, AX
Inc DX
Out DX, AX
Call GUSDelay
Out DX, AX
Dec DX
Mov AL, 0Dh ; Ramp control
Out DX, AL
Mov AL, BH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Pop CX
Pop BX
Mov [SI+2], BX
Ret
EndP SetGUSVolume
Proc SetGUSVolume ; BX = new volume
; To do:
; 1) Set ramp start
; 2) Set ramp end
; 3) Set current volume
; 4) Start ramp
; 5) Save new volume.
Push BX
Push CX
Mov AL, 0Dh
Out DX, AL
Mov AL, 3 ; Stop Ramp!
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Add BX, BX
Mov CX, [CS:GUSVolumeTable+BX] ; CX = new volume
Mov BX, [SI+2]
Add BX, BX
Mov BX, [CS:GUSVolumeTable+BX] ; BX = old volume
Cmp BX, CX
JNE SetGUSVolume2
Mov AL, 89h
Out DX, AL
Inc DX
In AX, DX
Dec DX
Mov BX, AX ; BX = old volume
SetGUSVolume2:
Push BX ; Old volume on stack
Xor AH, AH ; Ramp up
Cmp CX, BX
JAE SetGUSVolume1
XChg BX, CX
Mov AH, 40h ; Ramp down
SetGUSVolume1:
Mov AL, 6 ; Ramp rate
Out DX, AL
Mov AL, Byte Ptr CS:UsedChannels
ShR AL, 1
Add AL, 16
Add DL, 2
Out DX, AL
Sub DL, 2
Mov AL, 7 ; Ramp start
Out DX, AL
Mov AL, BH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Mov AL, 8 ; Ramp end
Out DX, AL
Mov AL, CH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Mov AL, 9
Out DX, AL
Pop BX ; BX = old volume
XChg BX, AX
Inc DX
Out DX, AX
Call GUSDelay
Out DX, AX
Dec DX
Mov AL, 0Dh ; Ramp control
Out DX, AL
Mov AL, BH
Add DL, 2
Out DX, AL
Call GUSDelay
Out DX, AL
Sub DL, 2
Pop CX
Pop BX
Mov [SI+2], BX
Ret
EndP SetGUSVolume

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,20 @@
IRQData Label Word
DW 20h, 1111111111111110b ; IRQ 0
DW 24h, 1111111111111101b ; IRQ 1
DW 28h, 1111110111111011b ; IRQ 2
DW 2Ch, 1111111111110111b ; IRQ 3
DW 30h, 1111111111101111b ; IRQ 4
DW 34h, 1111111111011111b ; IRQ 5
DW 38h, 1111111110111111b ; IRQ 6
DW 3Ch, 1111111101111111b ; IRQ 7
DW 1C0h, 1111111011111011b ; IRQ 8
DW 1C4h, 1111110111111011b ; IRQ 9
DW 1C8h, 1111101111111011b ; IRQ 10
DW 1CCh, 1111011111111011b ; IRQ 11
DW 1D0h, 1110111111111011b ; IRQ 12
DW 1D4h, 1101111111111011b ; IRQ 13
DW 1D8h, 1011111111111011b ; IRQ 14
DW 1DCh, 0111111111111011b ; IRQ 15
IRQData Label Word
DW 20h, 1111111111111110b ; IRQ 0
DW 24h, 1111111111111101b ; IRQ 1
DW 28h, 1111110111111011b ; IRQ 2
DW 2Ch, 1111111111110111b ; IRQ 3
DW 30h, 1111111111101111b ; IRQ 4
DW 34h, 1111111111011111b ; IRQ 5
DW 38h, 1111111110111111b ; IRQ 6
DW 3Ch, 1111111101111111b ; IRQ 7
DW 1C0h, 1111111011111011b ; IRQ 8
DW 1C4h, 1111110111111011b ; IRQ 9
DW 1C8h, 1111101111111011b ; IRQ 10
DW 1CCh, 1111011111111011b ; IRQ 11
DW 1D0h, 1110111111111011b ; IRQ 12
DW 1D4h, 1101111111111011b ; IRQ 13
DW 1D8h, 1011111111111011b ; IRQ 14
DW 1DCh, 0111111111111011b ; IRQ 15

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,388 +1,388 @@
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Align 4
include q.inc
FilterParameters DB 64 Dup (07Fh), 64 Dup (0)
Const2048 DD 16384.0
FreqMultiplier DD 3A9F7867h ; = 1/(2*PI*110.0*2^0.25)
FreqParameterMultiplier DD 0B92AAAAAh ; = -1/(24*256)
NUMBEROFFILTERBANDS = 4
IF OUTPUTFILTERENABLED
LastFilter DD NUMBEROFFILTERBANDS*2 Dup (0) ; 4 stereo values
FilterCoefficients DD NUMBEROFFILTERBANDS*2 Dup (0)
FilterVolumes DD NUMBEROFFILTERBANDS Dup (0)
ENDIF
FilterFreqValue DW 0
NewControlWord DW 7Fh
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc MixSamples ; Given DS:SI = info tables, CX = numchannels
Assume DS:Nothing
; 1. Clean buffer
; + update variables
; 2. Update parameters
; 3. Mix func
; 4. Return
Push CX
Mov CX, BytesToMix
Mov ES, CS:MixSegment
Mov DI, DMABUFFERLENGTH*2+80
Xor EAX, EAX
Mov DX, CX
Add CX, CX
Mov CS:MixTransferOffset, DI
Cmp CS:Stereo, 0
JE CS:MixSamples1
Mov DX, CX
MixSamples1:
Rep StosD
Mov CS:MixTransferRemaining, DX
Pop CX
MixSamples2:
Test Byte Ptr [SI], 1
JZ MixSamplesEnd2
Cmp Byte Ptr [SI+36h], 100
JE MixSamplesEnd2
Push CX
Mov CX, [SI]
Test CH, 2
JZ MixSamplesNoStop
And Byte Ptr [SI], Not 1
Cmp MixMode, 2
JB MixSamplesEnd
Mov DWord Ptr [SI+0Ch], 0
Jmp MixModeCommon
MixSamplesNoStop:
Test CL, 20h ; New freq?
JZ MixSamples5
Mov AX, [SI+10h]
Mov DX, [SI+12h]
Mov BX, MixSpeed
Cmp DX, BX
JAE MixSamplesHandleError
Div BX
ShL EAX, 16
Xor AX, AX
Div BX
Mov STEPVALUE, EAX
MixSamples4:
Test CH, 1
JZ MixSamples5
Xor EAX, EAX
Mov [SI+3Ch], AX ; For filter.
Mov [SI+6Eh], AX
Mov DWord Ptr [SI+1Ch], EAX ; Current Volume = 0
; for volume sliding.
Mov [SI+06h], DX
Mov [SI+5Eh], AX
Mov [SI+7Eh], AX
MixSamples5:
Test CX, 8540h ; New volume or panning?
JZ MixSamplesMix
Mov AX, 4*60
Test CH, 8 ; Muted?
JZ MixMMXNoMute
Xor EDX, EDX
Mov [SI+06h], DX
Mov [SI+0Ch], EDX
Mov [SI+5Eh], DX
Mov [SI+1Ch], EDX
Mov [SI+6Eh], DX
Mov [SI+3Ch], DX
Mov [SI+7Eh], DX
Xor BX, BX
Mov BL, [SI+3Ah]
Test BL, BL
JS MixModeCommon1
Mov DL, [CS:FilterParameters+BX]
Mov BL, [CS:FilterParameters+BX+64]
Mov [SI+5Bh], DL
Mov [SI+3Fh], BL
Jmp MixModeCommon1
MixMMXNoMute:
Xor BX, BX
Mov BL, [SI+3Ah]
Test BL, BL ; Disowned? Then use channel filters.
JNS MixGetChannelFilters
Mov BL, [SI+3Fh]
Jmp MixChannelFilters
MixGetChannelFilters:
; Filter = [FilterParameters+BX]
; Q = [FilterParameters+BX+64]
Mov AL, [CS:FilterParameters+BX] ; AX = Filter
Mov BL, [CS:FilterParameters+BX+64] ; BX = Q
; If the values are different, then force recalculate volume. (and hence mixmode)
Cmp [SI+5Bh], AL
JE MixChannelFiltersSame
Cmp [SI+3Fh], BL
JE MixChannelFiltersSame
Mov DWord Ptr [SI+0Ch], 0
MixChannelFiltersSame:
Mov [SI+5Bh], AL
Mov [SI+3Fh], BL
MixChannelFilters:
Cmp MixMode, 3
JNE MixMMXNoFilters
Mov AL, [SI+3Eh]
Mul Byte Ptr [SI+5Bh]
Mov CS:FilterFreqValue, AX
Cmp AX, 127*255
JNE MixChannelFiltersOK
Test BL, BL
JZ MixMMXNoFilters
MixChannelFiltersOK:
ShL BX, 2
FNInit
FLdCW [CS:NewControlWord]
FILD [CS:FilterFreqValue] ; 0->127*256
FMul [CS:FreqParameterMultiplier] ; -i/(24*256)
FLd ST
FRndInt
FSub ST(1), ST
FXCh
F2XM1
FLd1
FAdd
FScale ; = 2^(i/24*256)
FMul [CS:FreqMultiplier] ; = r
FLd ST ; r, r
FMul ST(1), ST ; r, r^2
FLd [CS:QualityFactorTable+BX] ; 2d, r, r^2
FMul ST(1), ST ; 2d, 2dr, r^2
FAdd
FLd1 ; 1, d+1, e
FXCh ; d+1, 1, e
FSubR ST(1), ST
FAdd ST, ST(2) ; 1+d+e, d, e
FDivR Const2048 ; 1/(1+d+e), d, e
FISt Word Ptr [SI+5Eh] ;
FLd ST(2) ; e, 1/(1+d+e), d, e
FAdd ST, ST
FAddP ST(2), ST ; 1/(1+d+e), d+2e, e
FMul ST(2), ST ; 1/(1+d+e), d+2e, e/(1+d+e)
FMul
FIStP Word Ptr [SI+6Eh]
FChs
FIStP Word Ptr [SI+7Eh]
FStP ST
Mov DWord Ptr [SI+0Ch], 0
MixMMXNoFilters:
Mov EBX, [SI+0Ch]
Cmp Stereo, 0
JNE MixMMXStereo
MixMMXMono:
Mov AX, [SI+4Ah]
Mul MixVolume
ShRD AX, DX, 9
Mov [SI+0Ch], AX
Mov [SI+0Eh], AX
Jmp MixModeVolumeCheck
MixMMXStereo:
Mov AL, [SI+37h] ; Final pan
Cmp AL, 100
JE MixMMXSurround
Mul Byte Ptr MixVolume ; 0->128
Mul Word Ptr [SI+4Ah] ; 0->32768
ShRD AX, DX, 15 ; Maxvol = 8192
Mov [SI+0Eh], AX ; Store into right volume
Mov AL, 64 ; Do left volume
Sub AL, [SI+37h] ; AL = 64-FinalPan
Mul Byte Ptr MixVolume
Mul Word Ptr [SI+4Ah]
ShRD AX, DX, 15
Mov [SI+0Ch], AX
Jmp MixModeVolumeCheck
MixMMXSurround:
Mov AX, [SI+4Ah]
Mul MixVolume
ShRD AX, DX, 10
Mov [SI+0Ch], AX
Neg AX
Mov [SI+0Eh], AX
MixModeVolumeCheck:
Test CH, 3+4
JNZ MixModeCommon
Cmp EBX, [SI+0Ch] ; Same as last volume?
JE MixSamplesMix
MixModeCommon: ; Requires AX = 30 etc. depending
; On mixing mode type.
; This will add 180 for 16-bit,
; And sort out loop types.
Mov AX, MixModeOffset
Cmp DWord Ptr [SI+0Ch], 0
JNE MixModeActualMix
Cmp MixMode, 2
JB MixMMXGeneralNoRamp
Cmp DWord Ptr [SI+1Ch], 0
JNE MixModeActualMix
MixMMXGeneralNoRamp:
Mov AX, 4*60
Jmp MixModeCommon1
MixModeActualMix:
Cmp MixMode, 3
JNE MixModeFilter
Cmp Word Ptr [SI+6Eh], 0
JNE MixModeFilter
Cmp Word Ptr [SI+7Eh], 0
JNE MixModeFilter
Sub AX, 60
MixModeFilter:
Test Byte Ptr [SI+18h], 2 ; 16 bit?
JZ MixModeCommon1
Add AX, 30
MixModeCommon1:
Cmp Byte Ptr [SI+0Ah], 8
JB MixModeCommon3 ; No loop
JE MixModeCommon2 ; Forwards loop
Add AX, 10
MixModeCommon2:
Add AX, 10
MixModeCommon3:
Add AX, Offset MixFunctionTables
Mov [SI+8], AX ; Offset...
MixSamplesMix:
Mov BX, [SI+8] ; BX = offset into
Mov EAX, [CS:BX+2]
Mov DWord Ptr PreMixFunction, EAX
Mov EAX, [CS:BX+6]
Mov DWord Ptr MixFunctionSeparateBackwards, EAX
Mov AX, BytesToMix
Mov MixBlockSize, AX
Mov MixBufferOffset, DMABUFFERLENGTH*2+80
Mov EAX, CURRENTPOSITION
Mov OLDPOSITION, EAX
Push Word Ptr [SI+8]
Call Word Ptr [CS:BX]
Pop BX
And Word Ptr [SI], 0111100010001101b
Cmp BX, Offset MixFunctionTables+60*2
JB MixSamplesEnd
Cmp BX, Offset MixFunctionTables+60*4
JAE MixSamplesEnd
MovDR AX, MM6
Mov [SI+0Ch], EAX
Mov [SI+1Ch], EAX
Cmp BX, Offset MixfunctionTables+60*3
JB MixSamplesEnd
Mov ES, CS:MixSegment
Mov DX, [ES:10h]
Mov BX, [ES:14h]
Mov [SI+3Ch], DX
Mov [SI+6h], BX
Jmp MixSamplesEnd
MixSamplesHandleError:
Mov Word Ptr [SI], 200h
Test Byte Ptr [SI+3Ah], 80h
JNZ MixSamplesEnd
Mov BX, [SI+38h]
And Byte Ptr [BX], Not 4 ; Turn off channel
MixSamplesEnd:
Pop CX
MixSamplesEnd2:
Add SI, 128
Dec CX
JNZ MixSamples2
IF OUTPUTFILTERENABLED
include equalize.inc
ENDIF
Ret
EndP MixSamples
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Align 4
include q.inc
FilterParameters DB 64 Dup (07Fh), 64 Dup (0)
Const2048 DD 16384.0
FreqMultiplier DD 3A9F7867h ; = 1/(2*PI*110.0*2^0.25)
FreqParameterMultiplier DD 0B92AAAAAh ; = -1/(24*256)
NUMBEROFFILTERBANDS = 4
IF OUTPUTFILTERENABLED
LastFilter DD NUMBEROFFILTERBANDS*2 Dup (0) ; 4 stereo values
FilterCoefficients DD NUMBEROFFILTERBANDS*2 Dup (0)
FilterVolumes DD NUMBEROFFILTERBANDS Dup (0)
ENDIF
FilterFreqValue DW 0
NewControlWord DW 7Fh
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Proc MixSamples ; Given DS:SI = info tables, CX = numchannels
Assume DS:Nothing
; 1. Clean buffer
; + update variables
; 2. Update parameters
; 3. Mix func
; 4. Return
Push CX
Mov CX, BytesToMix
Mov ES, CS:MixSegment
Mov DI, DMABUFFERLENGTH*2+80
Xor EAX, EAX
Mov DX, CX
Add CX, CX
Mov CS:MixTransferOffset, DI
Cmp CS:Stereo, 0
JE CS:MixSamples1
Mov DX, CX
MixSamples1:
Rep StosD
Mov CS:MixTransferRemaining, DX
Pop CX
MixSamples2:
Test Byte Ptr [SI], 1
JZ MixSamplesEnd2
Cmp Byte Ptr [SI+36h], 100
JE MixSamplesEnd2
Push CX
Mov CX, [SI]
Test CH, 2
JZ MixSamplesNoStop
And Byte Ptr [SI], Not 1
Cmp MixMode, 2
JB MixSamplesEnd
Mov DWord Ptr [SI+0Ch], 0
Jmp MixModeCommon
MixSamplesNoStop:
Test CL, 20h ; New freq?
JZ MixSamples5
Mov AX, [SI+10h]
Mov DX, [SI+12h]
Mov BX, MixSpeed
Cmp DX, BX
JAE MixSamplesHandleError
Div BX
ShL EAX, 16
Xor AX, AX
Div BX
Mov STEPVALUE, EAX
MixSamples4:
Test CH, 1
JZ MixSamples5
Xor EAX, EAX
Mov [SI+3Ch], AX ; For filter.
Mov [SI+6Eh], AX
Mov DWord Ptr [SI+1Ch], EAX ; Current Volume = 0
; for volume sliding.
Mov [SI+06h], DX
Mov [SI+5Eh], AX
Mov [SI+7Eh], AX
MixSamples5:
Test CX, 8540h ; New volume or panning?
JZ MixSamplesMix
Mov AX, 4*60
Test CH, 8 ; Muted?
JZ MixMMXNoMute
Xor EDX, EDX
Mov [SI+06h], DX
Mov [SI+0Ch], EDX
Mov [SI+5Eh], DX
Mov [SI+1Ch], EDX
Mov [SI+6Eh], DX
Mov [SI+3Ch], DX
Mov [SI+7Eh], DX
Xor BX, BX
Mov BL, [SI+3Ah]
Test BL, BL
JS MixModeCommon1
Mov DL, [CS:FilterParameters+BX]
Mov BL, [CS:FilterParameters+BX+64]
Mov [SI+5Bh], DL
Mov [SI+3Fh], BL
Jmp MixModeCommon1
MixMMXNoMute:
Xor BX, BX
Mov BL, [SI+3Ah]
Test BL, BL ; Disowned? Then use channel filters.
JNS MixGetChannelFilters
Mov BL, [SI+3Fh]
Jmp MixChannelFilters
MixGetChannelFilters:
; Filter = [FilterParameters+BX]
; Q = [FilterParameters+BX+64]
Mov AL, [CS:FilterParameters+BX] ; AX = Filter
Mov BL, [CS:FilterParameters+BX+64] ; BX = Q
; If the values are different, then force recalculate volume. (and hence mixmode)
Cmp [SI+5Bh], AL
JE MixChannelFiltersSame
Cmp [SI+3Fh], BL
JE MixChannelFiltersSame
Mov DWord Ptr [SI+0Ch], 0
MixChannelFiltersSame:
Mov [SI+5Bh], AL
Mov [SI+3Fh], BL
MixChannelFilters:
Cmp MixMode, 3
JNE MixMMXNoFilters
Mov AL, [SI+3Eh]
Mul Byte Ptr [SI+5Bh]
Mov CS:FilterFreqValue, AX
Cmp AX, 127*255
JNE MixChannelFiltersOK
Test BL, BL
JZ MixMMXNoFilters
MixChannelFiltersOK:
ShL BX, 2
FNInit
FLdCW [CS:NewControlWord]
FILD [CS:FilterFreqValue] ; 0->127*256
FMul [CS:FreqParameterMultiplier] ; -i/(24*256)
FLd ST
FRndInt
FSub ST(1), ST
FXCh
F2XM1
FLd1
FAdd
FScale ; = 2^(i/24*256)
FMul [CS:FreqMultiplier] ; = r
FLd ST ; r, r
FMul ST(1), ST ; r, r^2
FLd [CS:QualityFactorTable+BX] ; 2d, r, r^2
FMul ST(1), ST ; 2d, 2dr, r^2
FAdd
FLd1 ; 1, d+1, e
FXCh ; d+1, 1, e
FSubR ST(1), ST
FAdd ST, ST(2) ; 1+d+e, d, e
FDivR Const2048 ; 1/(1+d+e), d, e
FISt Word Ptr [SI+5Eh] ;
FLd ST(2) ; e, 1/(1+d+e), d, e
FAdd ST, ST
FAddP ST(2), ST ; 1/(1+d+e), d+2e, e
FMul ST(2), ST ; 1/(1+d+e), d+2e, e/(1+d+e)
FMul
FIStP Word Ptr [SI+6Eh]
FChs
FIStP Word Ptr [SI+7Eh]
FStP ST
Mov DWord Ptr [SI+0Ch], 0
MixMMXNoFilters:
Mov EBX, [SI+0Ch]
Cmp Stereo, 0
JNE MixMMXStereo
MixMMXMono:
Mov AX, [SI+4Ah]
Mul MixVolume
ShRD AX, DX, 9
Mov [SI+0Ch], AX
Mov [SI+0Eh], AX
Jmp MixModeVolumeCheck
MixMMXStereo:
Mov AL, [SI+37h] ; Final pan
Cmp AL, 100
JE MixMMXSurround
Mul Byte Ptr MixVolume ; 0->128
Mul Word Ptr [SI+4Ah] ; 0->32768
ShRD AX, DX, 15 ; Maxvol = 8192
Mov [SI+0Eh], AX ; Store into right volume
Mov AL, 64 ; Do left volume
Sub AL, [SI+37h] ; AL = 64-FinalPan
Mul Byte Ptr MixVolume
Mul Word Ptr [SI+4Ah]
ShRD AX, DX, 15
Mov [SI+0Ch], AX
Jmp MixModeVolumeCheck
MixMMXSurround:
Mov AX, [SI+4Ah]
Mul MixVolume
ShRD AX, DX, 10
Mov [SI+0Ch], AX
Neg AX
Mov [SI+0Eh], AX
MixModeVolumeCheck:
Test CH, 3+4
JNZ MixModeCommon
Cmp EBX, [SI+0Ch] ; Same as last volume?
JE MixSamplesMix
MixModeCommon: ; Requires AX = 30 etc. depending
; On mixing mode type.
; This will add 180 for 16-bit,
; And sort out loop types.
Mov AX, MixModeOffset
Cmp DWord Ptr [SI+0Ch], 0
JNE MixModeActualMix
Cmp MixMode, 2
JB MixMMXGeneralNoRamp
Cmp DWord Ptr [SI+1Ch], 0
JNE MixModeActualMix
MixMMXGeneralNoRamp:
Mov AX, 4*60
Jmp MixModeCommon1
MixModeActualMix:
Cmp MixMode, 3
JNE MixModeFilter
Cmp Word Ptr [SI+6Eh], 0
JNE MixModeFilter
Cmp Word Ptr [SI+7Eh], 0
JNE MixModeFilter
Sub AX, 60
MixModeFilter:
Test Byte Ptr [SI+18h], 2 ; 16 bit?
JZ MixModeCommon1
Add AX, 30
MixModeCommon1:
Cmp Byte Ptr [SI+0Ah], 8
JB MixModeCommon3 ; No loop
JE MixModeCommon2 ; Forwards loop
Add AX, 10
MixModeCommon2:
Add AX, 10
MixModeCommon3:
Add AX, Offset MixFunctionTables
Mov [SI+8], AX ; Offset...
MixSamplesMix:
Mov BX, [SI+8] ; BX = offset into
Mov EAX, [CS:BX+2]
Mov DWord Ptr PreMixFunction, EAX
Mov EAX, [CS:BX+6]
Mov DWord Ptr MixFunctionSeparateBackwards, EAX
Mov AX, BytesToMix
Mov MixBlockSize, AX
Mov MixBufferOffset, DMABUFFERLENGTH*2+80
Mov EAX, CURRENTPOSITION
Mov OLDPOSITION, EAX
Push Word Ptr [SI+8]
Call Word Ptr [CS:BX]
Pop BX
And Word Ptr [SI], 0111100010001101b
Cmp BX, Offset MixFunctionTables+60*2
JB MixSamplesEnd
Cmp BX, Offset MixFunctionTables+60*4
JAE MixSamplesEnd
MovDR AX, MM6
Mov [SI+0Ch], EAX
Mov [SI+1Ch], EAX
Cmp BX, Offset MixfunctionTables+60*3
JB MixSamplesEnd
Mov ES, CS:MixSegment
Mov DX, [ES:10h]
Mov BX, [ES:14h]
Mov [SI+3Ch], DX
Mov [SI+6h], BX
Jmp MixSamplesEnd
MixSamplesHandleError:
Mov Word Ptr [SI], 200h
Test Byte Ptr [SI+3Ah], 80h
JNZ MixSamplesEnd
Mov BX, [SI+38h]
And Byte Ptr [BX], Not 4 ; Turn off channel
MixSamplesEnd:
Pop CX
MixSamplesEnd2:
Add SI, 128
Dec CX
JNZ MixSamples2
IF OUTPUTFILTERENABLED
include equalize.inc
ENDIF
Ret
EndP MixSamples
Assume DS:Nothing
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

View File

@ -1,119 +1,119 @@
; To be embedded within the IRQ handler.
Push DX
Cmp CS:Stereo, 0
JNE TransferStereoBufferMMX
TransferMonoBufferMMX: ; DX = number of 32 bit numbers -> 16 bit.
Push DX
ShR DX, 3
JZ TransferMonoBufferMMX2
TransferMonoBufferMMX1:
MovD MM0, [SI]
MovD MM1, [SI+8]
MovD MM2, [SI+10h]
MovD MM3, [SI+18h]
MovD MM4, [SI+20h]
MovD MM5, [SI+28h]
MovD MM6, [SI+30h]
MovD MM7, [SI+38h]
PUnpckLDQ MM0, MM1 ; MM0 = S2|S1
PUnpckLDQ MM2, MM3 ; MM2 = S4|S3
PUnpckLDQ MM4, MM5 ; MM4 = S6|S5
PUnpckLDQ MM6, MM7 ; MM6 = S8|S7
PF2ID MM0, MM0
PF2ID MM2, MM2
PF2ID MM4, MM4
PF2ID MM6, MM6
PackSSDW MM0, MM2
PackSSDW MM4, MM6
MovQ [DI], MM0
MovQ [DI+8], MM4
Add SI, 40h
Add DI, 10h
Dec DX
JNZ TransferMonoBufferMMX1
TransferMonoBufferMMX2:
Pop CX
Mov DX, CX
And CX, 7
JZ TransferMonoBufferMMX4
TransferMonoBufferMMX3:
MovD MM0, [SI]
PF2ID MM0, MM0
MovD EAX, MM0
StosW
Add SI, 8
Loop TransferMonoBufferMMX3
TransferMonoBufferMMX4:
Jmp MMXMixTransferEnd
TransferStereoBufferMMX: ; DX is always an even number for stereo
Push DX
ShR DX, 3
JZ TransferStereoBufferMMX2
TransferStereoBufferMMX1: ; DX = number of 32 bit numbers -> 16 bit
MovQ MM0, [SI]
MovQ MM1, [SI+8]
MovQ MM2, [SI+10h]
MovQ MM3, [SI+18h]
PF2ID MM0, MM0
PF2ID MM1, MM1
PF2ID MM2, MM2
PF2ID MM3, MM3
PackSSDW MM0, MM1
PackSSDW MM2, MM3
MovQ [DI], MM0
MovQ [DI+8], MM2
Add SI, 20h
Add DI, 10h
Dec DX
JNZ TransferStereoBufferMMX1
TransferStereoBufferMMX2:
Pop CX
Mov DX, CX
And CX, 7
ShR CX, 1 ; Always an even number!
JZ TransferStereoBufferMMX4
TransferStereoBufferMMX3:
MovQ MM0, [SI]
PF2ID MM0, MM0
PackSSDW MM0, MM0
MovD [DI], MM0
Add SI, 8
Add DI, 4
Loop TransferStereoBufferMMX3
TransferStereoBufferMMX4:
MMXMixTransferEnd:
Pop DX
; To be embedded within the IRQ handler.
Push DX
Cmp CS:Stereo, 0
JNE TransferStereoBufferMMX
TransferMonoBufferMMX: ; DX = number of 32 bit numbers -> 16 bit.
Push DX
ShR DX, 3
JZ TransferMonoBufferMMX2
TransferMonoBufferMMX1:
MovD MM0, [SI]
MovD MM1, [SI+8]
MovD MM2, [SI+10h]
MovD MM3, [SI+18h]
MovD MM4, [SI+20h]
MovD MM5, [SI+28h]
MovD MM6, [SI+30h]
MovD MM7, [SI+38h]
PUnpckLDQ MM0, MM1 ; MM0 = S2|S1
PUnpckLDQ MM2, MM3 ; MM2 = S4|S3
PUnpckLDQ MM4, MM5 ; MM4 = S6|S5
PUnpckLDQ MM6, MM7 ; MM6 = S8|S7
PF2ID MM0, MM0
PF2ID MM2, MM2
PF2ID MM4, MM4
PF2ID MM6, MM6
PackSSDW MM0, MM2
PackSSDW MM4, MM6
MovQ [DI], MM0
MovQ [DI+8], MM4
Add SI, 40h
Add DI, 10h
Dec DX
JNZ TransferMonoBufferMMX1
TransferMonoBufferMMX2:
Pop CX
Mov DX, CX
And CX, 7
JZ TransferMonoBufferMMX4
TransferMonoBufferMMX3:
MovD MM0, [SI]
PF2ID MM0, MM0
MovD EAX, MM0
StosW
Add SI, 8
Loop TransferMonoBufferMMX3
TransferMonoBufferMMX4:
Jmp MMXMixTransferEnd
TransferStereoBufferMMX: ; DX is always an even number for stereo
Push DX
ShR DX, 3
JZ TransferStereoBufferMMX2
TransferStereoBufferMMX1: ; DX = number of 32 bit numbers -> 16 bit
MovQ MM0, [SI]
MovQ MM1, [SI+8]
MovQ MM2, [SI+10h]
MovQ MM3, [SI+18h]
PF2ID MM0, MM0
PF2ID MM1, MM1
PF2ID MM2, MM2
PF2ID MM3, MM3
PackSSDW MM0, MM1
PackSSDW MM2, MM3
MovQ [DI], MM0
MovQ [DI+8], MM2
Add SI, 20h
Add DI, 10h
Dec DX
JNZ TransferStereoBufferMMX1
TransferStereoBufferMMX2:
Pop CX
Mov DX, CX
And CX, 7
ShR CX, 1 ; Always an even number!
JZ TransferStereoBufferMMX4
TransferStereoBufferMMX3:
MovQ MM0, [SI]
PF2ID MM0, MM0
PackSSDW MM0, MM0
MovD [DI], MM0
Add SI, 8
Add DI, 4
Loop TransferStereoBufferMMX3
TransferStereoBufferMMX4:
MMXMixTransferEnd:
Pop DX

View File

@ -1,71 +1,71 @@
Proc LoadSample Far ; Fix up end of sample bytes
PushAD
Push DS
Push ES
Push FS
Mov FS, CS:SongDataArea
Mov BP, AX
Add BP, BP
Mov BP, [FS:64910+BP]
Xor CX, CX ; From the start of the sample..
Call GetSampleLocation ; Returns DS:ESI, ECX = length
JC LoadSampleEnd ; Zero flag ON if 16 bit..
Xor EAX, EAX
Mov BL, [FS:BP+12h]
Test BL, 10h ; Loop
JZ LoadSample2
Mov ESI, [FS:BP+34h] ; Start of loop
Test BL, 40h ; Pingpong?
JZ LoadSample1
Mov ESI, [FS:BP+38h]
Sub ESI, 2
JNC LoadSample1
Xor ESI, ESI
LoadSample1:
Test BL, 2
JZ LoadSample4
Add ESI, ESI
LoadSample4:
Int 3
Mov AL, [SI]
Inc ESI
Int 3
Mov AH, [SI]
LoadSample2:
Mov ESI, [FS:BP+30h]
Test BL, 2
JZ LoadSample3
Add ESI, ESI
LoadSample3:
Int 3
Mov [SI], AL
Inc ESI
Int 3
Mov [SI], AH
LoadSampleEnd:
Pop FS
Pop ES
Pop DS
PopAD
StC
Ret
EndP LoadSample
Proc LoadSample Far ; Fix up end of sample bytes
PushAD
Push DS
Push ES
Push FS
Mov FS, CS:SongDataArea
Mov BP, AX
Add BP, BP
Mov BP, [FS:64910+BP]
Xor CX, CX ; From the start of the sample..
Call GetSampleLocation ; Returns DS:ESI, ECX = length
JC LoadSampleEnd ; Zero flag ON if 16 bit..
Xor EAX, EAX
Mov BL, [FS:BP+12h]
Test BL, 10h ; Loop
JZ LoadSample2
Mov ESI, [FS:BP+34h] ; Start of loop
Test BL, 40h ; Pingpong?
JZ LoadSample1
Mov ESI, [FS:BP+38h]
Sub ESI, 2
JNC LoadSample1
Xor ESI, ESI
LoadSample1:
Test BL, 2
JZ LoadSample4
Add ESI, ESI
LoadSample4:
Int 3
Mov AL, [SI]
Inc ESI
Int 3
Mov AH, [SI]
LoadSample2:
Mov ESI, [FS:BP+30h]
Test BL, 2
JZ LoadSample3
Add ESI, ESI
LoadSample3:
Int 3
Mov [SI], AL
Inc ESI
Int 3
Mov [SI], AH
LoadSampleEnd:
Pop FS
Pop ES
Pop DS
PopAD
StC
Ret
EndP LoadSample

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,49 @@
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixForwardsLoop, PreMix12Left8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixPingPongLoop, PreMix12Left8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
; Right only
DW Offset MixNoLoop, PreMix12Right8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixForwardsLoop, PreMix12Right8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixPingPongLoop, PreMix12Right8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
; Central
DW Offset MixNoLoop, PreMix12Central8Bit, MFS8Bit, MBS8Bit, Mix12Central8Bit
DW Offset MixForwardsLoop, PreMix12Central8Bit, MFS8Bit, MBS8Bit, Mix12Central8Bit
DW Offset MixPingPongLoop, PreMix12Central8Bit, MFS8Bit, MBS8Bit, Mix12Central8Bit
; Stereo
DW Offset MixNoLoop, PreMix12Panned8Bit, MFS8Bit, MBS8Bit, Mix12Panned8Bit
DW Offset MixForwardsLoop, PreMix12Panned8Bit, MFS8Bit, MBS8Bit, Mix12Panned8Bit
DW Offset MixPingPongLoop, PreMix12Panned8Bit, MFS8Bit, MBS8Bit, Mix12Panned8Bit
; Surround
DW Offset MixNoLoop, PreMix12Surround8Bit, MFS8Bit, MBS8Bit, Mix12Surround8Bit
DW Offset MixForwardsLoop, PreMix12Surround8Bit, MFS8Bit, MBS8Bit, Mix12Surround8Bit
DW Offset MixPingPongLoop, PreMix12Surround8Bit, MFS8Bit, MBS8Bit, Mix12Surround8Bit
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixForwardsLoop, PreMix12Left16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixPingPongLoop, PreMix12Left16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
; Right only
DW Offset MixNoLoop, PreMix12Right16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixForwardsLoop, PreMix12Right16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixPingPongLoop, PreMix12Right16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
; Central
DW Offset MixNoLoop, PreMix12Central16Bit, MFS16Bit, MBS16Bit, Mix12Central16Bit
DW Offset MixForwardsLoop, PreMix12Central16Bit, MFS16Bit, MBS16Bit, Mix12Central16Bit
DW Offset MixPingPongLoop, PreMix12Central16Bit, MFS16Bit, MBS16Bit, Mix12Central16Bit
; Stereo
DW Offset MixNoLoop, PreMix12Panned16Bit, MFS16Bit, MBS16Bit, Mix12Panned16Bit
DW Offset MixForwardsLoop, PreMix12Panned16Bit, MFS16Bit, MBS16Bit, Mix12Panned16Bit
DW Offset MixPingPongLoop, PreMix12Panned16Bit, MFS16Bit, MBS16Bit, Mix12Panned16Bit
; Surround
DW Offset MixNoLoop, PreMix12Surround16Bit, MFS16Bit, MBS16Bit, Mix12Surround16Bit
DW Offset MixForwardsLoop, PreMix12Surround16Bit, MFS16Bit, MBS16Bit, Mix12Surround16Bit
DW Offset MixPingPongLoop, PreMix12Surround16Bit, MFS16Bit, MBS16Bit, Mix12Surround16Bit
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixForwardsLoop, PreMix12Left8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixPingPongLoop, PreMix12Left8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
; Right only
DW Offset MixNoLoop, PreMix12Right8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixForwardsLoop, PreMix12Right8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
DW Offset MixPingPongLoop, PreMix12Right8Bit, MFS8Bit, MBS8Bit, Mix12Single8Bit
; Central
DW Offset MixNoLoop, PreMix12Central8Bit, MFS8Bit, MBS8Bit, Mix12Central8Bit
DW Offset MixForwardsLoop, PreMix12Central8Bit, MFS8Bit, MBS8Bit, Mix12Central8Bit
DW Offset MixPingPongLoop, PreMix12Central8Bit, MFS8Bit, MBS8Bit, Mix12Central8Bit
; Stereo
DW Offset MixNoLoop, PreMix12Panned8Bit, MFS8Bit, MBS8Bit, Mix12Panned8Bit
DW Offset MixForwardsLoop, PreMix12Panned8Bit, MFS8Bit, MBS8Bit, Mix12Panned8Bit
DW Offset MixPingPongLoop, PreMix12Panned8Bit, MFS8Bit, MBS8Bit, Mix12Panned8Bit
; Surround
DW Offset MixNoLoop, PreMix12Surround8Bit, MFS8Bit, MBS8Bit, Mix12Surround8Bit
DW Offset MixForwardsLoop, PreMix12Surround8Bit, MFS8Bit, MBS8Bit, Mix12Surround8Bit
DW Offset MixPingPongLoop, PreMix12Surround8Bit, MFS8Bit, MBS8Bit, Mix12Surround8Bit
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixForwardsLoop, PreMix12Left16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixPingPongLoop, PreMix12Left16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
; Right only
DW Offset MixNoLoop, PreMix12Right16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixForwardsLoop, PreMix12Right16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
DW Offset MixPingPongLoop, PreMix12Right16Bit, MFS16Bit, MBS16Bit, Mix12Single16Bit
; Central
DW Offset MixNoLoop, PreMix12Central16Bit, MFS16Bit, MBS16Bit, Mix12Central16Bit
DW Offset MixForwardsLoop, PreMix12Central16Bit, MFS16Bit, MBS16Bit, Mix12Central16Bit
DW Offset MixPingPongLoop, PreMix12Central16Bit, MFS16Bit, MBS16Bit, Mix12Central16Bit
; Stereo
DW Offset MixNoLoop, PreMix12Panned16Bit, MFS16Bit, MBS16Bit, Mix12Panned16Bit
DW Offset MixForwardsLoop, PreMix12Panned16Bit, MFS16Bit, MBS16Bit, Mix12Panned16Bit
DW Offset MixPingPongLoop, PreMix12Panned16Bit, MFS16Bit, MBS16Bit, Mix12Panned16Bit
; Surround
DW Offset MixNoLoop, PreMix12Surround16Bit, MFS16Bit, MBS16Bit, Mix12Surround16Bit
DW Offset MixForwardsLoop, PreMix12Surround16Bit, MFS16Bit, MBS16Bit, Mix12Surround16Bit
DW Offset MixPingPongLoop, PreMix12Surround16Bit, MFS16Bit, MBS16Bit, Mix12Surround16Bit

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,49 @@
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixForwardsLoop, PreMix12Left8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixPingPongLoop, PreMix12Left8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
; Right only
DW Offset MixNoLoop, PreMix12Right8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixForwardsLoop, PreMix12Right8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixPingPongLoop, PreMix12Right8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
; Central
DW Offset MixNoLoop, PreMix12Central8BitF, MFS8Bit, MBS8Bit, Mix12Central8BitF
DW Offset MixForwardsLoop, PreMix12Central8BitF, MFS8Bit, MBS8Bit, Mix12Central8BitF
DW Offset MixPingPongLoop, PreMix12Central8BitF, MFS8Bit, MBS8Bit, Mix12Central8BitF
; Stereo
DW Offset MixNoLoop, PreMix12Panned8BitF, MFS8Bit, MBS8Bit, Mix12Panned8BitF
DW Offset MixForwardsLoop, PreMix12Panned8BitF, MFS8Bit, MBS8Bit, Mix12Panned8BitF
DW Offset MixPingPongLoop, PreMix12Panned8BitF, MFS8Bit, MBS8Bit, Mix12Panned8BitF
; Surround
DW Offset MixNoLoop, PreMix12Surround8BitF, MFS8Bit, MBS8Bit, Mix12Surround8BitF
DW Offset MixForwardsLoop, PreMix12Surround8BitF, MFS8Bit, MBS8Bit, Mix12Surround8BitF
DW Offset MixPingPongLoop, PreMix12Surround8BitF, MFS8Bit, MBS8Bit, Mix12Surround8BitF
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixForwardsLoop, PreMix12Left16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixPingPongLoop, PreMix12Left16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
; Right only
DW Offset MixNoLoop, PreMix12Right16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixForwardsLoop, PreMix12Right16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixPingPongLoop, PreMix12Right16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
; Central
DW Offset MixNoLoop, PreMix12Central16BitF, MFS16Bit, MBS16Bit, Mix12Central16BitF
DW Offset MixForwardsLoop, PreMix12Central16BitF, MFS16Bit, MBS16Bit, Mix12Central16BitF
DW Offset MixPingPongLoop, PreMix12Central16BitF, MFS16Bit, MBS16Bit, Mix12Central16BitF
; Stereo
DW Offset MixNoLoop, PreMix12Panned16BitF, MFS16Bit, MBS16Bit, Mix12Panned16BitF
DW Offset MixForwardsLoop, PreMix12Panned16BitF, MFS16Bit, MBS16Bit, Mix12Panned16BitF
DW Offset MixPingPongLoop, PreMix12Panned16BitF, MFS16Bit, MBS16Bit, Mix12Panned16BitF
; Surround
DW Offset MixNoLoop, PreMix12Surround16BitF, MFS16Bit, MBS16Bit, Mix12Surround16BitF
DW Offset MixForwardsLoop, PreMix12Surround16BitF, MFS16Bit, MBS16Bit, Mix12Surround16BitF
DW Offset MixPingPongLoop, PreMix12Surround16BitF, MFS16Bit, MBS16Bit, Mix12Surround16BitF
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixForwardsLoop, PreMix12Left8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixPingPongLoop, PreMix12Left8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
; Right only
DW Offset MixNoLoop, PreMix12Right8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixForwardsLoop, PreMix12Right8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
DW Offset MixPingPongLoop, PreMix12Right8BitF, MFS8Bit, MBS8Bit, Mix12Single8BitF
; Central
DW Offset MixNoLoop, PreMix12Central8BitF, MFS8Bit, MBS8Bit, Mix12Central8BitF
DW Offset MixForwardsLoop, PreMix12Central8BitF, MFS8Bit, MBS8Bit, Mix12Central8BitF
DW Offset MixPingPongLoop, PreMix12Central8BitF, MFS8Bit, MBS8Bit, Mix12Central8BitF
; Stereo
DW Offset MixNoLoop, PreMix12Panned8BitF, MFS8Bit, MBS8Bit, Mix12Panned8BitF
DW Offset MixForwardsLoop, PreMix12Panned8BitF, MFS8Bit, MBS8Bit, Mix12Panned8BitF
DW Offset MixPingPongLoop, PreMix12Panned8BitF, MFS8Bit, MBS8Bit, Mix12Panned8BitF
; Surround
DW Offset MixNoLoop, PreMix12Surround8BitF, MFS8Bit, MBS8Bit, Mix12Surround8BitF
DW Offset MixForwardsLoop, PreMix12Surround8BitF, MFS8Bit, MBS8Bit, Mix12Surround8BitF
DW Offset MixPingPongLoop, PreMix12Surround8BitF, MFS8Bit, MBS8Bit, Mix12Surround8BitF
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixForwardsLoop, PreMix12Left16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixPingPongLoop, PreMix12Left16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
; Right only
DW Offset MixNoLoop, PreMix12Right16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixForwardsLoop, PreMix12Right16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
DW Offset MixPingPongLoop, PreMix12Right16BitF, MFS16Bit, MBS16Bit, Mix12Single16BitF
; Central
DW Offset MixNoLoop, PreMix12Central16BitF, MFS16Bit, MBS16Bit, Mix12Central16BitF
DW Offset MixForwardsLoop, PreMix12Central16BitF, MFS16Bit, MBS16Bit, Mix12Central16BitF
DW Offset MixPingPongLoop, PreMix12Central16BitF, MFS16Bit, MBS16Bit, Mix12Central16BitF
; Stereo
DW Offset MixNoLoop, PreMix12Panned16BitF, MFS16Bit, MBS16Bit, Mix12Panned16BitF
DW Offset MixForwardsLoop, PreMix12Panned16BitF, MFS16Bit, MBS16Bit, Mix12Panned16BitF
DW Offset MixPingPongLoop, PreMix12Panned16BitF, MFS16Bit, MBS16Bit, Mix12Panned16BitF
; Surround
DW Offset MixNoLoop, PreMix12Surround16BitF, MFS16Bit, MBS16Bit, Mix12Surround16BitF
DW Offset MixForwardsLoop, PreMix12Surround16BitF, MFS16Bit, MBS16Bit, Mix12Surround16BitF
DW Offset MixPingPongLoop, PreMix12Surround16BitF, MFS16Bit, MBS16Bit, Mix12Surround16BitF

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,49 @@
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixForwardsLoop, PreMix12Left8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixPingPongLoop, PreMix12Left8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
; Right only
DW Offset MixNoLoop, PreMix12Right8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixForwardsLoop, PreMix12Right8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixPingPongLoop, PreMix12Right8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
; Central
DW Offset MixNoLoop, PreMix12Central8BitI, MFS8Bit, MBS8Bit, Mix12Central8BitI
DW Offset MixForwardsLoop, PreMix12Central8BitI, MFS8Bit, MBS8Bit, Mix12Central8BitI
DW Offset MixPingPongLoop, PreMix12Central8BitI, MFS8Bit, MBS8Bit, Mix12Central8BitI
; Stereo
DW Offset MixNoLoop, PreMix12Panned8BitI, MFS8Bit, MBS8Bit, Mix12Panned8BitI
DW Offset MixForwardsLoop, PreMix12Panned8BitI, MFS8Bit, MBS8Bit, Mix12Panned8BitI
DW Offset MixPingPongLoop, PreMix12Panned8BitI, MFS8Bit, MBS8Bit, Mix12Panned8BitI
; Surround
DW Offset MixNoLoop, PreMix12Surround8BitI, MFS8Bit, MBS8Bit, Mix12Surround8BitI
DW Offset MixForwardsLoop, PreMix12Surround8BitI, MFS8Bit, MBS8Bit, Mix12Surround8BitI
DW Offset MixPingPongLoop, PreMix12Surround8BitI, MFS8Bit, MBS8Bit, Mix12Surround8BitI
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixForwardsLoop, PreMix12Left16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixPingPongLoop, PreMix12Left16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
; Right only
DW Offset MixNoLoop, PreMix12Right16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixForwardsLoop, PreMix12Right16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixPingPongLoop, PreMix12Right16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
; Central
DW Offset MixNoLoop, PreMix12Central16BitI, MFS16Bit, MBS16Bit, Mix12Central16BitI
DW Offset MixForwardsLoop, PreMix12Central16BitI, MFS16Bit, MBS16Bit, Mix12Central16BitI
DW Offset MixPingPongLoop, PreMix12Central16BitI, MFS16Bit, MBS16Bit, Mix12Central16BitI
; Stereo
DW Offset MixNoLoop, PreMix12Panned16BitI, MFS16Bit, MBS16Bit, Mix12Panned16BitI
DW Offset MixForwardsLoop, PreMix12Panned16BitI, MFS16Bit, MBS16Bit, Mix12Panned16BitI
DW Offset MixPingPongLoop, PreMix12Panned16BitI, MFS16Bit, MBS16Bit, Mix12Panned16BitI
; Surround
DW Offset MixNoLoop, PreMix12Surround16BitI, MFS16Bit, MBS16Bit, Mix12Surround16BitI
DW Offset MixForwardsLoop, PreMix12Surround16BitI, MFS16Bit, MBS16Bit, Mix12Surround16BitI
DW Offset MixPingPongLoop, PreMix12Surround16BitI, MFS16Bit, MBS16Bit, Mix12Surround16BitI
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixForwardsLoop, PreMix12Left8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixPingPongLoop, PreMix12Left8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
; Right only
DW Offset MixNoLoop, PreMix12Right8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixForwardsLoop, PreMix12Right8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
DW Offset MixPingPongLoop, PreMix12Right8BitI, MFS8Bit, MBS8Bit, Mix12Single8BitI
; Central
DW Offset MixNoLoop, PreMix12Central8BitI, MFS8Bit, MBS8Bit, Mix12Central8BitI
DW Offset MixForwardsLoop, PreMix12Central8BitI, MFS8Bit, MBS8Bit, Mix12Central8BitI
DW Offset MixPingPongLoop, PreMix12Central8BitI, MFS8Bit, MBS8Bit, Mix12Central8BitI
; Stereo
DW Offset MixNoLoop, PreMix12Panned8BitI, MFS8Bit, MBS8Bit, Mix12Panned8BitI
DW Offset MixForwardsLoop, PreMix12Panned8BitI, MFS8Bit, MBS8Bit, Mix12Panned8BitI
DW Offset MixPingPongLoop, PreMix12Panned8BitI, MFS8Bit, MBS8Bit, Mix12Panned8BitI
; Surround
DW Offset MixNoLoop, PreMix12Surround8BitI, MFS8Bit, MBS8Bit, Mix12Surround8BitI
DW Offset MixForwardsLoop, PreMix12Surround8BitI, MFS8Bit, MBS8Bit, Mix12Surround8BitI
DW Offset MixPingPongLoop, PreMix12Surround8BitI, MFS8Bit, MBS8Bit, Mix12Surround8BitI
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix12Left16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixForwardsLoop, PreMix12Left16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixPingPongLoop, PreMix12Left16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
; Right only
DW Offset MixNoLoop, PreMix12Right16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixForwardsLoop, PreMix12Right16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
DW Offset MixPingPongLoop, PreMix12Right16BitI, MFS16Bit, MBS16Bit, Mix12Single16BitI
; Central
DW Offset MixNoLoop, PreMix12Central16BitI, MFS16Bit, MBS16Bit, Mix12Central16BitI
DW Offset MixForwardsLoop, PreMix12Central16BitI, MFS16Bit, MBS16Bit, Mix12Central16BitI
DW Offset MixPingPongLoop, PreMix12Central16BitI, MFS16Bit, MBS16Bit, Mix12Central16BitI
; Stereo
DW Offset MixNoLoop, PreMix12Panned16BitI, MFS16Bit, MBS16Bit, Mix12Panned16BitI
DW Offset MixForwardsLoop, PreMix12Panned16BitI, MFS16Bit, MBS16Bit, Mix12Panned16BitI
DW Offset MixPingPongLoop, PreMix12Panned16BitI, MFS16Bit, MBS16Bit, Mix12Panned16BitI
; Surround
DW Offset MixNoLoop, PreMix12Surround16BitI, MFS16Bit, MBS16Bit, Mix12Surround16BitI
DW Offset MixForwardsLoop, PreMix12Surround16BitI, MFS16Bit, MBS16Bit, Mix12Surround16BitI
DW Offset MixPingPongLoop, PreMix12Surround16BitI, MFS16Bit, MBS16Bit, Mix12Surround16BitI

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
tasm /m /ut310 m16
tlink /3 m16
execom m16 itmaes16.drv
copy itmaes16.drv ..
tasm /m /ut310 m16
tlink /3 m16
execom m16 itmaes16.drv
copy itmaes16.drv ..

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
tasm /m /ut310 m32
tlink /3 m32
execom m32 itmaes32.drv
copy itmaes32.drv ..
tasm /m /ut310 m32
tlink /3 m32
execom m32 itmaes32.drv
copy itmaes32.drv ..

View File

@ -1,49 +1,49 @@
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixForwardsLoop, PreMix32Left8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixPingPongLoop, PreMix32Left8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
; Right only
DW Offset MixNoLoop, PreMix32Right8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixForwardsLoop, PreMix32Right8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixPingPongLoop, PreMix32Right8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
; Central
DW Offset MixNoLoop, PreMix32Central8Bit, MFS8Bit, MBS8Bit, Mix32Central8Bit
DW Offset MixForwardsLoop, PreMix32Central8Bit, MFS8Bit, MBS8Bit, Mix32Central8Bit
DW Offset MixPingPongLoop, PreMix32Central8Bit, MFS8Bit, MBS8Bit, Mix32Central8Bit
; Stereo
DW Offset MixNoLoop, PreMix32Panned8Bit, MFS8Bit, MBS8Bit, Mix32Panned8Bit
DW Offset MixForwardsLoop, PreMix32Panned8Bit, MFS8Bit, MBS8Bit, Mix32Panned8Bit
DW Offset MixPingPongLoop, PreMix32Panned8Bit, MFS8Bit, MBS8Bit, Mix32Panned8Bit
; Surround
DW Offset MixNoLoop, PreMix32Surround8Bit, MFS8Bit, MBS8Bit, Mix32Surround8Bit
DW Offset MixForwardsLoop, PreMix32Surround8Bit, MFS8Bit, MBS8Bit, Mix32Surround8Bit
DW Offset MixPingPongLoop, PreMix32Surround8Bit, MFS8Bit, MBS8Bit, Mix32Surround8Bit
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixForwardsLoop, PreMix32Left16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixPingPongLoop, PreMix32Left16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
; Right only
DW Offset MixNoLoop, PreMix32Right16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixForwardsLoop, PreMix32Right16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixPingPongLoop, PreMix32Right16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
; Central
DW Offset MixNoLoop, PreMix32Central16Bit, MFS16Bit, MBS16Bit, Mix32Central16Bit
DW Offset MixForwardsLoop, PreMix32Central16Bit, MFS16Bit, MBS16Bit, Mix32Central16Bit
DW Offset MixPingPongLoop, PreMix32Central16Bit, MFS16Bit, MBS16Bit, Mix32Central16Bit
; Stereo
DW Offset MixNoLoop, PreMix32Panned16Bit, MFS16Bit, MBS16Bit, Mix32Panned16Bit
DW Offset MixForwardsLoop, PreMix32Panned16Bit, MFS16Bit, MBS16Bit, Mix32Panned16Bit
DW Offset MixPingPongLoop, PreMix32Panned16Bit, MFS16Bit, MBS16Bit, Mix32Panned16Bit
; Surround
DW Offset MixNoLoop, PreMix32Surround16Bit, MFS16Bit, MBS16Bit, Mix32Surround16Bit
DW Offset MixForwardsLoop, PreMix32Surround16Bit, MFS16Bit, MBS16Bit, Mix32Surround16Bit
DW Offset MixPingPongLoop, PreMix32Surround16Bit, MFS16Bit, MBS16Bit, Mix32Surround16Bit
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixForwardsLoop, PreMix32Left8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixPingPongLoop, PreMix32Left8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
; Right only
DW Offset MixNoLoop, PreMix32Right8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixForwardsLoop, PreMix32Right8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
DW Offset MixPingPongLoop, PreMix32Right8Bit, MFS8Bit, MBS8Bit, Mix32Single8Bit
; Central
DW Offset MixNoLoop, PreMix32Central8Bit, MFS8Bit, MBS8Bit, Mix32Central8Bit
DW Offset MixForwardsLoop, PreMix32Central8Bit, MFS8Bit, MBS8Bit, Mix32Central8Bit
DW Offset MixPingPongLoop, PreMix32Central8Bit, MFS8Bit, MBS8Bit, Mix32Central8Bit
; Stereo
DW Offset MixNoLoop, PreMix32Panned8Bit, MFS8Bit, MBS8Bit, Mix32Panned8Bit
DW Offset MixForwardsLoop, PreMix32Panned8Bit, MFS8Bit, MBS8Bit, Mix32Panned8Bit
DW Offset MixPingPongLoop, PreMix32Panned8Bit, MFS8Bit, MBS8Bit, Mix32Panned8Bit
; Surround
DW Offset MixNoLoop, PreMix32Surround8Bit, MFS8Bit, MBS8Bit, Mix32Surround8Bit
DW Offset MixForwardsLoop, PreMix32Surround8Bit, MFS8Bit, MBS8Bit, Mix32Surround8Bit
DW Offset MixPingPongLoop, PreMix32Surround8Bit, MFS8Bit, MBS8Bit, Mix32Surround8Bit
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixForwardsLoop, PreMix32Left16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixPingPongLoop, PreMix32Left16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
; Right only
DW Offset MixNoLoop, PreMix32Right16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixForwardsLoop, PreMix32Right16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
DW Offset MixPingPongLoop, PreMix32Right16Bit, MFS16Bit, MBS16Bit, Mix32Single16Bit
; Central
DW Offset MixNoLoop, PreMix32Central16Bit, MFS16Bit, MBS16Bit, Mix32Central16Bit
DW Offset MixForwardsLoop, PreMix32Central16Bit, MFS16Bit, MBS16Bit, Mix32Central16Bit
DW Offset MixPingPongLoop, PreMix32Central16Bit, MFS16Bit, MBS16Bit, Mix32Central16Bit
; Stereo
DW Offset MixNoLoop, PreMix32Panned16Bit, MFS16Bit, MBS16Bit, Mix32Panned16Bit
DW Offset MixForwardsLoop, PreMix32Panned16Bit, MFS16Bit, MBS16Bit, Mix32Panned16Bit
DW Offset MixPingPongLoop, PreMix32Panned16Bit, MFS16Bit, MBS16Bit, Mix32Panned16Bit
; Surround
DW Offset MixNoLoop, PreMix32Surround16Bit, MFS16Bit, MBS16Bit, Mix32Surround16Bit
DW Offset MixForwardsLoop, PreMix32Surround16Bit, MFS16Bit, MBS16Bit, Mix32Surround16Bit
DW Offset MixPingPongLoop, PreMix32Surround16Bit, MFS16Bit, MBS16Bit, Mix32Surround16Bit

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
;
; Floating point mixing routines
; DS:0 = a, DS:4 = b, DS:8 = c
; DS:10h = os1, DS:18h = OS2
;
;
; Floating point mixing routines
; DS:0 = a, DS:4 = b, DS:8 = c
; DS:10h = os1, DS:18h = OS2
;

View File

@ -1,49 +1,49 @@
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixForwardsLoop, PreMix32Left8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixPingPongLoop, PreMix32Left8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
; Right only
DW Offset MixNoLoop, PreMix32Right8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixForwardsLoop, PreMix32Right8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixPingPongLoop, PreMix32Right8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
; Central
DW Offset MixNoLoop, PreMix32Central8BitI, MFS8Bit, MBS8Bit, Mix32Central8BitI
DW Offset MixForwardsLoop, PreMix32Central8BitI, MFS8Bit, MBS8Bit, Mix32Central8BitI
DW Offset MixPingPongLoop, PreMix32Central8BitI, MFS8Bit, MBS8Bit, Mix32Central8BitI
; Stereo
DW Offset MixNoLoop, PreMix32Panned8BitI, MFS8Bit, MBS8Bit, Mix32Panned8BitI
DW Offset MixForwardsLoop, PreMix32Panned8BitI, MFS8Bit, MBS8Bit, Mix32Panned8BitI
DW Offset MixPingPongLoop, PreMix32Panned8BitI, MFS8Bit, MBS8Bit, Mix32Panned8BitI
; Surround
DW Offset MixNoLoop, PreMix32Surround8BitI, MFS8Bit, MBS8Bit, Mix32Surround8BitI
DW Offset MixForwardsLoop, PreMix32Surround8BitI, MFS8Bit, MBS8Bit, Mix32Surround8BitI
DW Offset MixPingPongLoop, PreMix32Surround8BitI, MFS8Bit, MBS8Bit, Mix32Surround8BitI
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixForwardsLoop, PreMix32Left16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixPingPongLoop, PreMix32Left16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
; Right only
DW Offset MixNoLoop, PreMix32Right16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixForwardsLoop, PreMix32Right16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixPingPongLoop, PreMix32Right16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
; Central
DW Offset MixNoLoop, PreMix32Central16BitI, MFS16Bit, MBS16Bit, Mix32Central16BitI
DW Offset MixForwardsLoop, PreMix32Central16BitI, MFS16Bit, MBS16Bit, Mix32Central16BitI
DW Offset MixPingPongLoop, PreMix32Central16BitI, MFS16Bit, MBS16Bit, Mix32Central16BitI
; Stereo
DW Offset MixNoLoop, PreMix32Panned16BitI, MFS16Bit, MBS16Bit, Mix32Panned16BitI
DW Offset MixForwardsLoop, PreMix32Panned16BitI, MFS16Bit, MBS16Bit, Mix32Panned16BitI
DW Offset MixPingPongLoop, PreMix32Panned16BitI, MFS16Bit, MBS16Bit, Mix32Panned16BitI
; Surround
DW Offset MixNoLoop, PreMix32Surround16BitI, MFS16Bit, MBS16Bit, Mix32Surround16BitI
DW Offset MixForwardsLoop, PreMix32Surround16BitI, MFS16Bit, MBS16Bit, Mix32Surround16BitI
DW Offset MixPingPongLoop, PreMix32Surround16BitI, MFS16Bit, MBS16Bit, Mix32Surround16BitI
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixForwardsLoop, PreMix32Left8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixPingPongLoop, PreMix32Left8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
; Right only
DW Offset MixNoLoop, PreMix32Right8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixForwardsLoop, PreMix32Right8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
DW Offset MixPingPongLoop, PreMix32Right8BitI, MFS8Bit, MBS8Bit, Mix32Single8BitI
; Central
DW Offset MixNoLoop, PreMix32Central8BitI, MFS8Bit, MBS8Bit, Mix32Central8BitI
DW Offset MixForwardsLoop, PreMix32Central8BitI, MFS8Bit, MBS8Bit, Mix32Central8BitI
DW Offset MixPingPongLoop, PreMix32Central8BitI, MFS8Bit, MBS8Bit, Mix32Central8BitI
; Stereo
DW Offset MixNoLoop, PreMix32Panned8BitI, MFS8Bit, MBS8Bit, Mix32Panned8BitI
DW Offset MixForwardsLoop, PreMix32Panned8BitI, MFS8Bit, MBS8Bit, Mix32Panned8BitI
DW Offset MixPingPongLoop, PreMix32Panned8BitI, MFS8Bit, MBS8Bit, Mix32Panned8BitI
; Surround
DW Offset MixNoLoop, PreMix32Surround8BitI, MFS8Bit, MBS8Bit, Mix32Surround8BitI
DW Offset MixForwardsLoop, PreMix32Surround8BitI, MFS8Bit, MBS8Bit, Mix32Surround8BitI
DW Offset MixPingPongLoop, PreMix32Surround8BitI, MFS8Bit, MBS8Bit, Mix32Surround8BitI
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMix32Left16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixForwardsLoop, PreMix32Left16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixPingPongLoop, PreMix32Left16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
; Right only
DW Offset MixNoLoop, PreMix32Right16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixForwardsLoop, PreMix32Right16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
DW Offset MixPingPongLoop, PreMix32Right16BitI, MFS16Bit, MBS16Bit, Mix32Single16BitI
; Central
DW Offset MixNoLoop, PreMix32Central16BitI, MFS16Bit, MBS16Bit, Mix32Central16BitI
DW Offset MixForwardsLoop, PreMix32Central16BitI, MFS16Bit, MBS16Bit, Mix32Central16BitI
DW Offset MixPingPongLoop, PreMix32Central16BitI, MFS16Bit, MBS16Bit, Mix32Central16BitI
; Stereo
DW Offset MixNoLoop, PreMix32Panned16BitI, MFS16Bit, MBS16Bit, Mix32Panned16BitI
DW Offset MixForwardsLoop, PreMix32Panned16BitI, MFS16Bit, MBS16Bit, Mix32Panned16BitI
DW Offset MixPingPongLoop, PreMix32Panned16BitI, MFS16Bit, MBS16Bit, Mix32Panned16BitI
; Surround
DW Offset MixNoLoop, PreMix32Surround16BitI, MFS16Bit, MBS16Bit, Mix32Surround16BitI
DW Offset MixForwardsLoop, PreMix32Surround16BitI, MFS16Bit, MBS16Bit, Mix32Surround16BitI
DW Offset MixPingPongLoop, PreMix32Surround16BitI, MFS16Bit, MBS16Bit, Mix32Surround16BitI

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,11 @@
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMPanned, MFS8Bit, MBS8Bit, M32Bit8MPanned
DW Offset MixForwardsLoop, PreM32BitMPanned, MFS8Bit, MBS8Bit, M32Bit8MPanned
DW Offset MixPingPongLoop, PreM32BitMPanned, MFS8Bit, MBS8Bit, M32Bit8MPanned
; 16 bit
DW Offset MixNoLoop, PreM32BitMPanned, MFS16Bit, MBS16Bit, M32Bit16MPanned
DW Offset MixForwardsLoop, PreM32BitMPanned, MFS16Bit, MBS16Bit, M32Bit16MPanned
DW Offset MixPingPongLoop, PreM32BitMPanned, MFS16Bit, MBS16Bit, M32Bit16MPanned
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMPanned, MFS8Bit, MBS8Bit, M32Bit8MPanned
DW Offset MixForwardsLoop, PreM32BitMPanned, MFS8Bit, MBS8Bit, M32Bit8MPanned
DW Offset MixPingPongLoop, PreM32BitMPanned, MFS8Bit, MBS8Bit, M32Bit8MPanned
; 16 bit
DW Offset MixNoLoop, PreM32BitMPanned, MFS16Bit, MBS16Bit, M32Bit16MPanned
DW Offset MixForwardsLoop, PreM32BitMPanned, MFS16Bit, MBS16Bit, M32Bit16MPanned
DW Offset MixPingPongLoop, PreM32BitMPanned, MFS16Bit, MBS16Bit, M32Bit16MPanned

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMFPanned, MFS8Bit, MBS8Bit, M32Bit8MFPanned
DW Offset MixForwardsLoop, PreM32BitMFPanned, MFS8Bit, MBS8Bit, M32Bit8MFPanned
DW Offset MixPingPongLoop, PreM32BitMFPanned, MFS8Bit, MBS8Bit, M32Bit8MFPanned
; 16 bit tables
DW Offset MixNoLoop, PreM32BitMFPanned, MFS16Bit, MBS16Bit, M32Bit16MFPanned
DW Offset MixForwardsLoop, PreM32BitMFPanned, MFS16Bit, MBS16Bit, M32Bit16MFPanned
DW Offset MixPingPongLoop, PreM32BitMFPanned, MFS16Bit, MBS16Bit, M32Bit16MFPanned
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMFPanned, MFS8Bit, MBS8Bit, M32Bit8MFPanned
DW Offset MixForwardsLoop, PreM32BitMFPanned, MFS8Bit, MBS8Bit, M32Bit8MFPanned
DW Offset MixPingPongLoop, PreM32BitMFPanned, MFS8Bit, MBS8Bit, M32Bit8MFPanned
; 16 bit tables
DW Offset MixNoLoop, PreM32BitMFPanned, MFS16Bit, MBS16Bit, M32Bit16MFPanned
DW Offset MixForwardsLoop, PreM32BitMFPanned, MFS16Bit, MBS16Bit, M32Bit16MFPanned
DW Offset MixPingPongLoop, PreM32BitMFPanned, MFS16Bit, MBS16Bit, M32Bit16MFPanned

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,11 @@
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMIPanned, MFS8Bit, MBS8Bit, M32Bit8MIPanned
DW Offset MixForwardsLoop, PreM32BitMIPanned, MFS8Bit, MBS8Bit, M32Bit8MIPanned
DW Offset MixPingPongLoop, PreM32BitMIPanned, MFS8Bit, MBS8Bit, M32Bit8MIPanned
; 16 bit tables
DW Offset MixNoLoop, PreM32BitMIPanned, MFS16Bit, MBS16Bit, M32Bit16MIPanned
DW Offset MixForwardsLoop, PreM32BitMIPanned, MFS16Bit, MBS16Bit, M32Bit16MIPanned
DW Offset MixPingPongLoop, PreM32BitMIPanned, MFS16Bit, MBS16Bit, M32Bit16MIPanned
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMIPanned, MFS8Bit, MBS8Bit, M32Bit8MIPanned
DW Offset MixForwardsLoop, PreM32BitMIPanned, MFS8Bit, MBS8Bit, M32Bit8MIPanned
DW Offset MixPingPongLoop, PreM32BitMIPanned, MFS8Bit, MBS8Bit, M32Bit8MIPanned
; 16 bit tables
DW Offset MixNoLoop, PreM32BitMIPanned, MFS16Bit, MBS16Bit, M32Bit16MIPanned
DW Offset MixForwardsLoop, PreM32BitMIPanned, MFS16Bit, MBS16Bit, M32Bit16MIPanned
DW Offset MixPingPongLoop, PreM32BitMIPanned, MFS16Bit, MBS16Bit, M32Bit16MIPanned

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMVPanned, MFS8Bit, MBS8Bit, M32Bit8MVPanned
DW Offset MixForwardsLoop, PreM32BitMVPanned, MFS8Bit, MBS8Bit, M32Bit8MVPanned
DW Offset MixPingPongLoop, PreM32BitMVPanned, MFS8Bit, MBS8Bit, M32Bit8MVPanned
; 16 bit tables
DW Offset MixNoLoop, PreM32BitMVPanned, MFS16Bit, MBS16Bit, M32Bit16MVPanned
DW Offset MixForwardsLoop, PreM32BitMVPanned, MFS16Bit, MBS16Bit, M32Bit16MVPanned
DW Offset MixPingPongLoop, PreM32BitMVPanned, MFS16Bit, MBS16Bit, M32Bit16MVPanned
; 8 bit tables
DW Offset MixNoLoop, PreM32BitMVPanned, MFS8Bit, MBS8Bit, M32Bit8MVPanned
DW Offset MixForwardsLoop, PreM32BitMVPanned, MFS8Bit, MBS8Bit, M32Bit8MVPanned
DW Offset MixPingPongLoop, PreM32BitMVPanned, MFS8Bit, MBS8Bit, M32Bit8MVPanned
; 16 bit tables
DW Offset MixNoLoop, PreM32BitMVPanned, MFS16Bit, MBS16Bit, M32Bit16MVPanned
DW Offset MixForwardsLoop, PreM32BitMVPanned, MFS16Bit, MBS16Bit, M32Bit16MVPanned
DW Offset MixPingPongLoop, PreM32BitMVPanned, MFS16Bit, MBS16Bit, M32Bit16MVPanned

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,49 @@
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMixUltraLeft8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixForwardsLoop, PreMixUltraLeft8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixPingPongLoop, PreMixUltraLeft8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
; Right only
DW Offset MixNoLoop, PreMixUltraRight8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixForwardsLoop, PreMixUltraRight8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixPingPongLoop, PreMixUltraRight8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
; Central
DW Offset MixNoLoop, PreMixUltraCentral8BitI, MFS8Bit, MBS8Bit, MixUltraCentral8BitI
DW Offset MixForwardsLoop, PreMixUltraCentral8BitI, MFS8Bit, MBS8Bit, MixUltraCentral8BitI
DW Offset MixPingPongLoop, PreMixUltraCentral8BitI, MFS8Bit, MBS8Bit, MixUltraCentral8BitI
; Stereo
DW Offset MixNoLoop, PreMixUltraPanned8BitI, MFS8Bit, MBS8Bit, MixUltraPanned8BitI
DW Offset MixForwardsLoop, PreMixUltraPanned8BitI, MFS8Bit, MBS8Bit, MixUltraPanned8BitI
DW Offset MixPingPongLoop, PreMixUltraPanned8BitI, MFS8Bit, MBS8Bit, MixUltraPanned8BitI
; Surround
DW Offset MixNoLoop, PreMixUltraSurround8BitI, MFS8Bit, MBS8Bit, MixUltraSurround8BitI
DW Offset MixForwardsLoop, PreMixUltraSurround8BitI, MFS8Bit, MBS8Bit, MixUltraSurround8BitI
DW Offset MixPingPongLoop, PreMixUltraSurround8BitI, MFS8Bit, MBS8Bit, MixUltraSurround8BitI
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMixUltraLeft16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixForwardsLoop, PreMixUltraLeft16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixPingPongLoop, PreMixUltraLeft16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
; Right only
DW Offset MixNoLoop, PreMixUltraRight16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixForwardsLoop, PreMixUltraRight16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixPingPongLoop, PreMixUltraRight16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
; Central
DW Offset MixNoLoop, PreMixUltraCentral16BitI, MFS16Bit, MBS16Bit, MixUltraCentral16BitI
DW Offset MixForwardsLoop, PreMixUltraCentral16BitI, MFS16Bit, MBS16Bit, MixUltraCentral16BitI
DW Offset MixPingPongLoop, PreMixUltraCentral16BitI, MFS16Bit, MBS16Bit, MixUltraCentral16BitI
; Stereo
DW Offset MixNoLoop, PreMixUltraPanned16BitI, MFS16Bit, MBS16Bit, MixUltraPanned16BitI
DW Offset MixForwardsLoop, PreMixUltraPanned16BitI, MFS16Bit, MBS16Bit, MixUltraPanned16BitI
DW Offset MixPingPongLoop, PreMixUltraPanned16BitI, MFS16Bit, MBS16Bit, MixUltraPanned16BitI
; Surround
DW Offset MixNoLoop, PreMixUltraSurround16BitI, MFS16Bit, MBS16Bit, MixUltraSurround16BitI
DW Offset MixForwardsLoop, PreMixUltraSurround16BitI, MFS16Bit, MBS16Bit, MixUltraSurround16BitI
DW Offset MixPingPongLoop, PreMixUltraSurround16BitI, MFS16Bit, MBS16Bit, MixUltraSurround16BitI
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMixUltraLeft8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixForwardsLoop, PreMixUltraLeft8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixPingPongLoop, PreMixUltraLeft8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
; Right only
DW Offset MixNoLoop, PreMixUltraRight8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixForwardsLoop, PreMixUltraRight8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
DW Offset MixPingPongLoop, PreMixUltraRight8BitI, MFS8Bit, MBS8Bit, MixUltraSingle8BitI
; Central
DW Offset MixNoLoop, PreMixUltraCentral8BitI, MFS8Bit, MBS8Bit, MixUltraCentral8BitI
DW Offset MixForwardsLoop, PreMixUltraCentral8BitI, MFS8Bit, MBS8Bit, MixUltraCentral8BitI
DW Offset MixPingPongLoop, PreMixUltraCentral8BitI, MFS8Bit, MBS8Bit, MixUltraCentral8BitI
; Stereo
DW Offset MixNoLoop, PreMixUltraPanned8BitI, MFS8Bit, MBS8Bit, MixUltraPanned8BitI
DW Offset MixForwardsLoop, PreMixUltraPanned8BitI, MFS8Bit, MBS8Bit, MixUltraPanned8BitI
DW Offset MixPingPongLoop, PreMixUltraPanned8BitI, MFS8Bit, MBS8Bit, MixUltraPanned8BitI
; Surround
DW Offset MixNoLoop, PreMixUltraSurround8BitI, MFS8Bit, MBS8Bit, MixUltraSurround8BitI
DW Offset MixForwardsLoop, PreMixUltraSurround8BitI, MFS8Bit, MBS8Bit, MixUltraSurround8BitI
DW Offset MixPingPongLoop, PreMixUltraSurround8BitI, MFS8Bit, MBS8Bit, MixUltraSurround8BitI
; 16 bit tables
DW Offset UpdateNoLoop, 0, 0, 0, 0 ; Update only
DW Offset UpdateForwardsLoop, 0, 0, 0, 0
DW Offset UpdatePingPongLoop, 0, 0, 0, 0
; Left only
DW Offset MixNoLoop, PreMixUltraLeft16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixForwardsLoop, PreMixUltraLeft16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixPingPongLoop, PreMixUltraLeft16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
; Right only
DW Offset MixNoLoop, PreMixUltraRight16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixForwardsLoop, PreMixUltraRight16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
DW Offset MixPingPongLoop, PreMixUltraRight16BitI, MFS16Bit, MBS16Bit, MixUltraSingle16BitI
; Central
DW Offset MixNoLoop, PreMixUltraCentral16BitI, MFS16Bit, MBS16Bit, MixUltraCentral16BitI
DW Offset MixForwardsLoop, PreMixUltraCentral16BitI, MFS16Bit, MBS16Bit, MixUltraCentral16BitI
DW Offset MixPingPongLoop, PreMixUltraCentral16BitI, MFS16Bit, MBS16Bit, MixUltraCentral16BitI
; Stereo
DW Offset MixNoLoop, PreMixUltraPanned16BitI, MFS16Bit, MBS16Bit, MixUltraPanned16BitI
DW Offset MixForwardsLoop, PreMixUltraPanned16BitI, MFS16Bit, MBS16Bit, MixUltraPanned16BitI
DW Offset MixPingPongLoop, PreMixUltraPanned16BitI, MFS16Bit, MBS16Bit, MixUltraPanned16BitI
; Surround
DW Offset MixNoLoop, PreMixUltraSurround16BitI, MFS16Bit, MBS16Bit, MixUltraSurround16BitI
DW Offset MixForwardsLoop, PreMixUltraSurround16BitI, MFS16Bit, MBS16Bit, MixUltraSurround16BitI
DW Offset MixPingPongLoop, PreMixUltraSurround16BitI, MFS16Bit, MBS16Bit, MixUltraSurround16BitI

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
tasm /m /ut310 ad1816
tlink /3 ad1816
execom ad1816 itad1816.drv
copy itad1816.drv ..
tasm /m /ut310 ad1816
tlink /3 ad1816
execom ad1816 itad1816.drv
copy itad1816.drv ..

View File

@ -1,4 +1,4 @@
tasm /m /ut310 awe32drv
tlink /3 awe32drv
execom awe32drv itawe32.drv
copy itawe32.drv ..
tasm /m /ut310 awe32drv
tlink /3 awe32drv
execom awe32drv itawe32.drv
copy itawe32.drv ..

View File

@ -1,4 +1,4 @@
tasm /m /ut310 awe32b
tlink /3 awe32b
execom awe32b itawe32b.drv
copy itawe32b.drv ..
tasm /m /ut310 awe32b
tlink /3 awe32b
execom awe32b itawe32b.drv
copy itawe32b.drv ..

View File

@ -1,6 +1,6 @@
@rem Base1 Driver
tasm /m /ut310 base1
tlink /3 base1
execom base1 itbase1.drv
copy itbase1.drv ..
@rem Base1 Driver
tasm /m /ut310 base1
tlink /3 base1
execom base1 itbase1.drv
copy itbase1.drv ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 es1868
tlink /3 es1868
execom es1868 ites1868.drv
copy ites1868.drv ..
tasm /m /ut310 es1868
tlink /3 es1868
execom es1868 ites1868.drv
copy ites1868.drv ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 es1688
tlink /3 es1688
execom es1688 ites1688.drv
copy ites1688.drv ..
tasm /m /ut310 es1688
tlink /3 es1688
execom es1688 ites1688.drv
copy ites1688.drv ..

View File

@ -1,5 +1,5 @@
tasm32 /m /ut310 es1688mx
tlink /3 es1688mx
execom es1688mx ites1688.mmx
copy ites1688.mmx ..
tasm32 /m /ut310 es1688mx
tlink /3 es1688mx
execom es1688mx ites1688.mmx
copy ites1688.mmx ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 es1788
tlink /3 es1788
execom es1788 ites1788.drv
copy ites1788.drv ..
tasm /m /ut310 es1788
tlink /3 es1788
execom es1788 ites1788.drv
copy ites1788.drv ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 es1869
tlink /3 es1869
execom es1869 ites1869.drv
copy ites1869.drv ..
tasm /m /ut310 es1869
tlink /3 es1869
execom es1869 ites1869.drv
copy ites1869.drv ..

View File

@ -1,5 +1,5 @@
tasm32 /m /ut310 es1869mx
tlink /3 es1869mx
execom es1869mx ites1869.mmx
copy ites1869.mmx ..
tasm32 /m /ut310 es1869mx
tlink /3 es1869mx
execom es1869mx ites1869.mmx
copy ites1869.mmx ..

View File

@ -1,5 +1,5 @@
tasm32 /m /ut310 es1868mx
tlink /3 es1868mx
execom es1868mx ites1868.mmx
copy ites1868.mmx ..
tasm32 /m /ut310 es1868mx
tlink /3 es1868mx
execom es1868mx ites1868.mmx
copy ites1868.mmx ..

View File

@ -1,4 +1,4 @@
tasm /m /ut310 ews64
tlink /3 ews64
execom ews64 itews64.drv
copy itews64.drv ..
tasm /m /ut310 ews64
tlink /3 ews64
execom ews64 itews64.drv
copy itews64.drv ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 ewscodec
tlink /3 ewscodec
execom ewscodec itewscod.drv
copy itewscod.drv ..
tasm /m /ut310 ewscodec
tlink /3 ewscodec
execom ewscodec itewscod.drv
copy itewscod.drv ..

View File

@ -1,5 +1,5 @@
tasm32 /m /ut310 ewscodmx
tlink /3 ewscodmx
execom ewscodmx itewscod.mmx
copy itewscod.mmx ..
tasm32 /m /ut310 ewscodmx
tlink /3 ewscodmx
execom ewscodmx itewscod.mmx
copy itewscod.mmx ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 gold16
tlink /3 gold16
execom m16 itgold16.drv
copy itgold16.drv ..
tasm /m /ut310 gold16
tlink /3 gold16
execom m16 itgold16.drv
copy itgold16.drv ..

View File

@ -1,4 +1,4 @@
tasm /m /ut310 guspnpm
tlink /3 guspnpm
execom guspnpm itguspnp.drv
copy itguspnp.drv ..
tasm /m /ut310 guspnpm
tlink /3 guspnpm
execom guspnpm itguspnp.drv
copy itguspnp.drv ..

View File

@ -1,4 +1,4 @@
tasm32 /m /ut310 guspnpmx
tlink /3 guspnpmx
execom guspnpmx itguspnp.mmx
copy itguspnp.mmx ..
tasm32 /m /ut310 guspnpmx
tlink /3 guspnpmx
execom guspnpmx itguspnp.mmx
copy itguspnp.mmx ..

View File

@ -1,4 +1,4 @@
tasm /m /uT310 /l gushiqdr
tlink /3 gushiqdr
execom gushiqdr itgus.drv
copy itgus.drv ..
tasm /m /uT310 /l gushiqdr
tlink /3 gushiqdr
execom gushiqdr itgus.drv
copy itgus.drv ..

View File

@ -1,4 +1,4 @@
tasm /m /uT310 gushiq2
tlink /3 gushiq2
execom gushiq2 itgus2.drv
copy itgus2.drv ..
tasm /m /uT310 gushiq2
tlink /3 gushiq2
execom gushiq2 itgus2.drv
copy itgus2.drv ..

View File

@ -1,4 +1,4 @@
tasm /m /uT310 gusdrv2
tlink /3 gusdrv2
execom gusdrv2 itguslo.drv
copy itguslo.drv ..
tasm /m /uT310 gusdrv2
tlink /3 gusdrv2
execom gusdrv2 itguslo.drv
copy itguslo.drv ..

View File

@ -1,5 +1,5 @@
tasm /m /ut310 gusmax
tlink /3 gusmax
execom gusmax itgusmax.drv
copy itgusmax.drv ..
tasm /m /ut310 gusmax
tlink /3 gusmax
execom gusmax itgusmax.drv
copy itgusmax.drv ..

View File

@ -1,5 +1,5 @@
tasm32 /m /ut310 gusmaxmx
tlink /3 gusmaxmx
execom gusmaxmx itgusmax.mmx
copy itgusmax.mmx ..
tasm32 /m /ut310 gusmaxmx
tlink /3 gusmaxmx
execom gusmaxmx itgusmax.mmx
copy itgusmax.mmx ..

Some files were not shown because too many files have changed in this diff Show More