mirror of
https://github.com/id-Software/wolf3d.git
synced 2026-03-19 16:39:29 +01:00
The Wolfenstein 3D source as originally released.
This commit is contained in:
237
WOLFSRC/ID_SD.H
Normal file
237
WOLFSRC/ID_SD.H
Normal file
@@ -0,0 +1,237 @@
|
||||
//
|
||||
// ID Engine
|
||||
// ID_SD.h - Sound Manager Header
|
||||
// Version for Wolfenstein
|
||||
// By Jason Blochowiak
|
||||
//
|
||||
|
||||
#ifndef __ID_SD__
|
||||
#define __ID_SD__
|
||||
|
||||
void alOut(byte n,byte b);
|
||||
|
||||
#ifdef __DEBUG__
|
||||
#define __DEBUG_SoundMgr__
|
||||
#endif
|
||||
|
||||
#define TickBase 70 // 70Hz per tick - used as a base for timer 0
|
||||
|
||||
typedef enum {
|
||||
sdm_Off,
|
||||
sdm_PC,sdm_AdLib,
|
||||
} SDMode;
|
||||
typedef enum {
|
||||
smm_Off,smm_AdLib
|
||||
} SMMode;
|
||||
typedef enum {
|
||||
sds_Off,sds_PC,sds_SoundSource,sds_SoundBlaster
|
||||
} SDSMode;
|
||||
typedef struct
|
||||
{
|
||||
longword length;
|
||||
word priority;
|
||||
} SoundCommon;
|
||||
|
||||
// PC Sound stuff
|
||||
#define pcTimer 0x42
|
||||
#define pcTAccess 0x43
|
||||
#define pcSpeaker 0x61
|
||||
|
||||
#define pcSpkBits 3
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SoundCommon common;
|
||||
byte data[1];
|
||||
} PCSound;
|
||||
|
||||
// Registers for the Sound Blaster card - needs to be offset by n0 (0x10,0x20,0x30,0x40,0x50,0x60)
|
||||
#define sbReset 0x206 // W
|
||||
#define sbFMStatus 0x208 // R
|
||||
#define sbFMAddr 0x208 // W
|
||||
#define sbFMData 0x209 // W
|
||||
#define sbReadData 0x20a // R
|
||||
#define sbWriteCmd 0x20c // W
|
||||
#define sbWriteData 0x20c // W
|
||||
#define sbWriteStat 0x20c // R
|
||||
#define sbDataAvail 0x20e // R
|
||||
|
||||
// Registers for the Sound Blaster Pro card - needs to be offset by n0 (0x20 or 0x40)
|
||||
#define sbpLFMStatus 0x200 // R
|
||||
#define sbpLFMAddr 0x200 // W
|
||||
#define sbpLFMData 0x201 // W
|
||||
#define sbpRFMStatus 0x202 // R
|
||||
#define sbpRFMAddr 0x202 // W
|
||||
#define sbpRFMData 0x203 // W
|
||||
#define sbpMixerAddr 0x204 // W
|
||||
#define sbpMixerData 0x205 // RW
|
||||
#define sbpCDData 0x210 // R
|
||||
#define sbpCDCommand 0x210 // W
|
||||
#define sbpCDStatus 0x211 // R
|
||||
#define sbpCDReset 0x212 // W
|
||||
|
||||
// SBPro Mixer addresses
|
||||
#define sbpmReset 0x00
|
||||
#define sbpmVoiceVol 0x04
|
||||
#define sbpmMicMix 0x0a
|
||||
#define sbpmFilterADC 0x0c
|
||||
#define sbpmControl 0x0e
|
||||
#define sbpmMasterVol 0x22
|
||||
#define sbpmFMVol 0x26
|
||||
#define sbpmCDVol 0x28
|
||||
#define sbpmLineVol 0x2e
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SoundCommon common;
|
||||
word hertz;
|
||||
byte bits,
|
||||
reference,
|
||||
data[1];
|
||||
} SampledSound;
|
||||
|
||||
// Registers for the AdLib card
|
||||
#define alFMStatus 0x388 // R
|
||||
#define alFMAddr 0x388 // W
|
||||
#define alFMData 0x389 // W
|
||||
|
||||
// Register addresses
|
||||
// Operator stuff
|
||||
#define alChar 0x20
|
||||
#define alScale 0x40
|
||||
#define alAttack 0x60
|
||||
#define alSus 0x80
|
||||
#define alWave 0xe0
|
||||
// Channel stuff
|
||||
#define alFreqL 0xa0
|
||||
#define alFreqH 0xb0
|
||||
#define alFeedCon 0xc0
|
||||
// Global stuff
|
||||
#define alEffects 0xbd
|
||||
|
||||
typedef struct
|
||||
{
|
||||
byte mChar,cChar,
|
||||
mScale,cScale,
|
||||
mAttack,cAttack,
|
||||
mSus,cSus,
|
||||
mWave,cWave,
|
||||
nConn,
|
||||
|
||||
// These are only for Muse - these bytes are really unused
|
||||
voice,
|
||||
mode,
|
||||
unused[3];
|
||||
} Instrument;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SoundCommon common;
|
||||
Instrument inst;
|
||||
byte block,
|
||||
data[1];
|
||||
} AdLibSound;
|
||||
|
||||
//
|
||||
// Sequencing stuff
|
||||
//
|
||||
#define sqMaxTracks 10
|
||||
#define sqMaxMoods 1 // DEBUG
|
||||
|
||||
#define sev_Null 0 // Does nothing
|
||||
#define sev_NoteOff 1 // Turns a note off
|
||||
#define sev_NoteOn 2 // Turns a note on
|
||||
#define sev_NotePitch 3 // Sets the pitch of a currently playing note
|
||||
#define sev_NewInst 4 // Installs a new instrument
|
||||
#define sev_NewPerc 5 // Installs a new percussive instrument
|
||||
#define sev_PercOn 6 // Turns a percussive note on
|
||||
#define sev_PercOff 7 // Turns a percussive note off
|
||||
#define sev_SeqEnd -1 // Terminates a sequence
|
||||
|
||||
// Flags for MusicGroup.flags
|
||||
#define sf_Melodic 0
|
||||
#define sf_Percussive 1
|
||||
|
||||
#if 1
|
||||
typedef struct
|
||||
{
|
||||
word length,
|
||||
values[1];
|
||||
} MusicGroup;
|
||||
#else
|
||||
typedef struct
|
||||
{
|
||||
word flags,
|
||||
count,
|
||||
offsets[1];
|
||||
} MusicGroup;
|
||||
#endif
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* This part needs to be set up by the user */
|
||||
word mood,far *moods[sqMaxMoods];
|
||||
|
||||
/* The rest is set up by the code */
|
||||
Instrument inst;
|
||||
boolean percussive;
|
||||
word far *seq;
|
||||
longword nextevent;
|
||||
} ActiveTrack;
|
||||
|
||||
#define sqmode_Normal 0
|
||||
#define sqmode_FadeIn 1
|
||||
#define sqmode_FadeOut 2
|
||||
|
||||
#define sqMaxFade 64 // DEBUG
|
||||
|
||||
|
||||
// Global variables
|
||||
extern boolean AdLibPresent,
|
||||
SoundSourcePresent,
|
||||
SoundBlasterPresent,
|
||||
NeedsMusic, // For Caching Mgr
|
||||
SoundPositioned;
|
||||
extern SDMode SoundMode;
|
||||
extern SDSMode DigiMode;
|
||||
extern SMMode MusicMode;
|
||||
extern boolean DigiPlaying;
|
||||
extern int DigiMap[];
|
||||
extern longword TimeCount; // Global time in ticks
|
||||
|
||||
// Function prototypes
|
||||
extern void SD_Startup(void),
|
||||
SD_Shutdown(void),
|
||||
SD_Default(boolean gotit,SDMode sd,SMMode sm),
|
||||
|
||||
SD_PositionSound(int leftvol,int rightvol);
|
||||
extern boolean SD_PlaySound(soundnames sound);
|
||||
extern void SD_SetPosition(int leftvol,int rightvol),
|
||||
SD_StopSound(void),
|
||||
SD_WaitSoundDone(void),
|
||||
|
||||
SD_StartMusic(MusicGroup far *music),
|
||||
SD_MusicOn(void),
|
||||
SD_MusicOff(void),
|
||||
SD_FadeOutMusic(void),
|
||||
|
||||
SD_SetUserHook(void (*hook)(void));
|
||||
extern boolean SD_MusicPlaying(void),
|
||||
SD_SetSoundMode(SDMode mode),
|
||||
SD_SetMusicMode(SMMode mode);
|
||||
extern word SD_SoundPlaying(void);
|
||||
|
||||
extern void SD_SetDigiDevice(SDSMode),
|
||||
SD_PlayDigitized(word which,int leftpos,int rightpos),
|
||||
SD_StopDigitized(void),
|
||||
SD_Poll(void);
|
||||
|
||||
#ifdef _MUSE_ // MUSE Goes directly to the lower level routines
|
||||
extern void SDL_PCPlaySound(PCSound far *sound),
|
||||
SDL_PCStopSound(void),
|
||||
SDL_ALPlaySound(AdLibSound far *sound),
|
||||
SDL_ALStopSound(void);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user