LIBS/MODS/MODPLAY.INC
2021-09-08 21:26:43 +02:00

186 lines
2.9 KiB
Plaintext

/* ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ· */
/* º SOUND WIZARDS MODULE PLAYER V1.3 BY LORD EXCESS º */
/* ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĽ */
#include <stdlib.h>
#define Detection 0
#define SoundBlaster 1
#define SoundBlaster_Pro 2
#define Gravis_UltraSound 3
unsigned int Soundcard, Channels;
void *Mod_Driver;
unsigned char Peak[8];
extern void far Detect_Hardware(void);
extern void far Driver_SB(void);
extern void far Driver_SBP(void);
extern void far Driver_GUS(void);
void Mod_Close(void)
{
asm {
mov bx,1
call DWORD PTR [Mod_Driver]
}
}
void Mod_Init(unsigned int Driver, unsigned int Port, unsigned char IRQ, unsigned char DMA)
{
asm {
mov ax,[Driver]
or ax,ax
jz l_1
cmp ax,Gravis_UltraSound
ja l_Error
mov cl,BYTE PTR [IRQ]
mov ch,BYTE PTR [DMA]
mov dx,[Port]
jmp l_2
}
l_1:
Detect_Hardware();
asm {
or ax,ax
jz l_Error
cmp ax,Gravis_UltraSound
ja l_Error
}
l_2:
asm {
mov [Soundcard],ax
mov WORD PTR [Mod_Driver],0
cmp ax,SoundBlaster
jnz l_3
mov WORD PTR [Mod_Driver+2],SEG Driver_SB
jmp l_Test
}
l_3:
asm {
cmp ax,SoundBlaster_Pro
jnz l_4
mov WORD PTR [Mod_Driver+2],SEG Driver_SBP
jmp l_Test
}
l_4:
asm {
mov WORD PTR [Mod_Driver+2],SEG Driver_GUS
}
l_Test:
asm {
xor bx,bx
call DWORD PTR [Mod_Driver]
or ax,ax
jz l_Error
}
if (atexit(Mod_Close)) {
Mod_Close();
l_Error:
asm {
mov [Soundcard],0
}
}
}
void Mod_Load(char *File_Name)
{
if (Soundcard) asm {
mov bx,2
mov dx,WORD PTR [File_Name]
call DWORD PTR [Mod_Driver]
mov [Channels],ax
}
else Channels=0;
}
void Mod_Play(unsigned int Looping)
{
if (Soundcard) asm {
mov bx,3
mov ax,[Looping]
call DWORD PTR [Mod_Driver]
}
}
void Mod_Stop(void)
{
if (Soundcard) asm {
mov bx,4
call DWORD PTR [Mod_Driver]
}
}
void Mod_Volume(unsigned char Volume)
{
if (Soundcard) asm {
mov bx,5
mov al,[Volume]
call DWORD PTR [Mod_Driver]
}
}
unsigned int Mod_Status(void)
{
if (Soundcard) {
asm {
mov bx,6
call DWORD PTR [Mod_Driver]
}
return(_AX);
}
else return(0);
}
unsigned int Mod_Position(void)
{
if (Soundcard) {
asm {
mov bx,7
xor al,al
call DWORD PTR [Mod_Driver]
}
return(_AX);
}
else return(0);
}
void Mod_Rewind(void)
{
if (Soundcard) asm {
mov bx,7
mov al,-1
call DWORD PTR [Mod_Driver]
}
}
void Mod_Forward(void)
{
if (Soundcard) asm {
mov bx,7
mov al,1
call DWORD PTR [Mod_Driver]
}
}
void Mod_Peak(void)
{
asm {
push es
mov ax,ds
mov es,ax
mov di,OFFSET Peak
}
if (Soundcard) asm {
mov bx,8
call DWORD PTR [Mod_Driver]
}
else asm {
cld
mov cx,4
xor ax,ax
rep stosw
}
asm pop es;
}