home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Audio 4.94 - Over 11,000 Files
/
audio-11000.iso
/
msdos
/
modplay
/
vtsrc12b
/
lib
/
sounddev.inc
< prev
next >
Wrap
Text File
|
1993-03-27
|
10KB
|
469 lines
IDEAL
MODEL TPascal
LOCALS @@
P286
StackSize EQU 500
EXTRN DevStack : BYTE
EXTRN DevSS : WORD
EXTRN DevSP : WORD
EXTRN DoGetBuffer : FAR
EXTRN CSOldInt8 : FAR
EXTRN Sounding : DWORD
EXTRN SoundLeft : WORD
EXTRN SystemClockIncr : WORD
EXTRN SystemClockCount : WORD
EXTRN PeriodicCount : WORD
EXTRN PeriodicStart : WORD
EXTRN PeriodicProc : DWORD
EXTRN DeviceIdling : BYTE
EXTRN NumChannels : BYTE
EXTRN ChannelIncr : BYTE
EXTRN DoEqualice : BYTE
;*******************************************
MACRO Chunk1
CLI
PUSH AX
PUSH DS
MOV AX,SEG Sounding
MOV DS,AX
MOV [DevSS],SS
MOV [DevSP],SP
MOV SS,AX
MOV SP,OFFSET DevStack + StackSize
PUSH DX
PUSH CX
PUSH BX
PUSH ES
ENDM Chunk1
;*******************************************
; DeviceRut1
;*******************************************
MACRO Chunk21
MOV AX,[SoundLeft]
AND AX,AX
JNZ @@yeah
PUSH DI
PUSH SI
CALL DoGetBuffer
POP SI
POP DI
AND AX,AX
JNZ @@yeah
INC AH
MOV [DeviceIdling],AH
ENDM Chunk21
;-------------------------------------------
; DeviceRutFail
;-------------------------------------------
MACRO Chunk221
JMP SystemIntEntry
@@yeah: DEC AX
MOV [SoundLeft],AX
ENDM Chunk221
;-------------------------------------------
; DeviceRut1
;-------------------------------------------
MACRO Chunk222
XOR BH,BH
MOV [DeviceIdling],BH
LES BX,[Sounding]
ENDM Chunk222
;-------------------------------------------
MACRO Chunk22
Chunk221
Chunk222
ENDM Chunk22
;-------------------------------------------
MACRO Chunk2
Chunk21
Chunk22
ENDM Chunk2
;*******************************************
MACRO ChunkMix
MOV CX,[ES:BX]
ADD CX,[ES:BX+6]
ADD CX,[ES:BX+8]
ADD CX,[ES:BX+14]
ADD CX,[ES:BX+16]
ADD CX,[ES:BX+22]
ADD CX,[ES:BX+24]
ADD CX,[ES:BX+30]
MOV AX,[ES:BX+2]
ADD AX,[ES:BX+4]
ADD AX,[ES:BX+10]
ADD AX,[ES:BX+12]
ADD AX,[ES:BX+18]
ADD AX,[ES:BX+20]
ADD AX,[ES:BX+26]
ADD AX,[ES:BX+28]
ENDM ChunkMix
;-------------------------------------------
MACRO MonoChunk31
ChunkMix
ADD AX,CX
JNO @@nooverf
JS SHORT @@posit
MOV AX,-32768
JMP SHORT @@nooverf
@@posit: MOV AX,32767
@@nooverf:
MOV DL,[DoEqualice]
AND DL,DL
JNZ @@equal
JMP @@noequal
@@equal:
PUSH BX
PUSH AX
CWD
MOV BX,0FFFFh
@@Data11:
MOV CX,0FFFFh
@@Data12:
SAR CX,1
RCR BX,1
SAR CX,1
RCR BX,1
SUB AX,BX
SBB DX,CX
SAR CX,1
RCR BX,1
SUB AX,BX
SBB DX,CX
MOV [WORD PTR CS:@@Data11-2],AX
MOV [WORD PTR CS:@@Data12-2],DX
MOV BX,AX
MOV CX,DX
POP AX
PUSH BX
PUSH CX
CWD
MOV BX,0FFFFh
@@Data21:
MOV CX,0FFFFh
@@Data22:
SAR CX,1
RCR BX,1
ADD AX,BX
ADC DX,CX
SAR CX,1
RCR BX,1
ADD AX,BX
ADC DX,CX
SAR CX,1
RCR BX,1
SAR CX,1
RCR BX,1
ADD AX,BX
ADC DX,CX
MOV [WORD PTR CS:@@Data21-2],AX
MOV [WORD PTR CS:@@Data22-2],DX
POP CX
POP BX
SUB AX,BX
SBB DX,CX
SUB AX,BX
SBB DX,CX
SAR DX,1
RCR AX,1
CMP DX,0
JG @@up
JNE @@neg
CMP AX,32768
JC @@nada
@@up: MOV AX,32767
JMP @@nada
@@neg: CMP DX,-1
JNZ @@dw
CMP AX,32768
JNC @@nada
@@dw: MOV AX,-32768
@@nada:
POP BX
@@noequal:
XOR AH,80h
MOV CL,AH
ENDM MonoChunk31
;-------------------------------------------
MACRO SterChunk31
ChunkMix
ADD CX,CX
JNO @@nooverf1
JS SHORT @@posit1
MOV CX,-32768
JMP SHORT @@nooverf1
@@posit1: MOV CX,32767
@@nooverf1:
ADD AX,AX
JNO @@nooverf2
JS SHORT @@posit2
MOV AX,-32768
JMP SHORT @@nooverf2
@@posit2: MOV AX,32767
@@nooverf2:
MOV CL,AH
XOR CX,8080h
ENDM SterChunk31
;-------------------------------------------
MACRO StMixChunk31
ChunkMix
MOV DX,AX
ADD AX,CX
JNO @@nooverf0
RCR AX,1
JMP SHORT @@ovc0
@@nooverf0: SAR AX,1
@@ovc0:
ADD CX,AX
JNO @@nooverf1
JS SHORT @@posit1
MOV CX,-32768
JMP SHORT @@nooverf1
@@posit1: MOV CX,32767
@@nooverf1:
ADD DX,AX
JNO @@nooverf2
JS SHORT @@posit2
MOV DX,-32768
JMP SHORT @@nooverf2
@@posit2: MOV DX,32767
@@nooverf2:
MOV CL,DH
XOR CX,8080h
ENDM StMixChunk31
;-------------------------------------------
MACRO StMix2Chunk31
ChunkMix
SAR CX,1
SAR AX,1
MOV DX,AX
ADD AX,CX
MOV [WORD PTR CS:@@datastm2-2],AX
SAR AX,1
ADD AX,1234
@@datastm2:
JNO @@nooverf1
JS SHORT @@posit1
MOV AX,-32768
JMP SHORT @@nooverf1
@@posit1: MOV AX,32767
@@nooverf1:
ADD DX,AX
JNO @@nooverf2
JS SHORT @@posit2
MOV DX,-32768
JMP SHORT @@nooverf2
@@posit2: MOV DX,32767
@@nooverf2:
ADD CX,AX
JNO @@nooverf3
JS SHORT @@posit3
MOV CX,-32768
JMP SHORT @@nooverf3
@@posit3: MOV CX,32767
@@nooverf3:
MOV CL,DH
XOR CX,8080h
ENDM StMix2Chunk31
;===========================================
MACRO MonoChunk32
MOV CL,[ES:BX]
XOR CL,80h
ENDM MonoChunk32
;-------------------------------------------
MACRO SterChunk32
MOV CL,[ES:BX]
XOR CL,80h
MOV CH,CL
ENDM SterChunk32
;*******************************************
MACRO Chunk41 Size
ADD BX,16*2
MOV [WORD PTR Sounding],BX
ENDM Chunk31
;-------------------------------------------
MACRO Chunk42
INC BX
MOV [WORD PTR Sounding],BX
ENDM Chunk42
;*******************************************
; DeviceRut2
;*******************************************
MACRO Chunk51
JMP SystemIntEntry
ENDM Chunk51
;-------------------------------------------
MACRO Chunk5
SystemIntEntry:
POP ES
POP BX
POP CX
POP DX
MOV SS,[DevSS]
MOV SP,[DevSP]
DEC [PeriodicCount]
JNZ @@NoSystemClock
MOV AX,[PeriodicStart]
MOV [PeriodicCount],AX
MOV AX,[SystemClockIncr]
ADD [SystemClockCount],AX
JNC @@nosys
PUSHF
CALL FAR CSOldInt8
JMP @@sisys
@@nosys: MOV AL,20h
OUT 20h,AL
@@sisys: PUSHA
PUSH ES
STI
CALL [PeriodicProc]
POP ES
POPA
JMP @@Fin
@@NoSystemClock:
MOV AL,20h
OUT 20h,AL
@@Fin:
POP DS
POP AX
IRET
ENDM Chunk5