3 // ID_SD.h - Sound Manager Header
\r
4 // Version for Wolfenstein
\r
5 // By Jason Blochowiak
\r
11 void alOut(byte n,byte b);
\r
14 #define __DEBUG_SoundMgr__
\r
17 #define TickBase 70 // 70Hz per tick - used as a base for timer 0
\r
27 sds_Off,sds_PC,sds_SoundSource,sds_SoundBlaster
\r
36 #define pcTimer 0x42
\r
37 #define pcTAccess 0x43
\r
38 #define pcSpeaker 0x61
\r
48 // Registers for the Sound Blaster card - needs to be offset by n0 (0x10,0x20,0x30,0x40,0x50,0x60)
\r
49 #define sbReset 0x206 // W
\r
50 #define sbFMStatus 0x208 // R
\r
51 #define sbFMAddr 0x208 // W
\r
52 #define sbFMData 0x209 // W
\r
53 #define sbReadData 0x20a // R
\r
54 #define sbWriteCmd 0x20c // W
\r
55 #define sbWriteData 0x20c // W
\r
56 #define sbWriteStat 0x20c // R
\r
57 #define sbDataAvail 0x20e // R
\r
59 // Registers for the Sound Blaster Pro card - needs to be offset by n0 (0x20 or 0x40)
\r
60 #define sbpLFMStatus 0x200 // R
\r
61 #define sbpLFMAddr 0x200 // W
\r
62 #define sbpLFMData 0x201 // W
\r
63 #define sbpRFMStatus 0x202 // R
\r
64 #define sbpRFMAddr 0x202 // W
\r
65 #define sbpRFMData 0x203 // W
\r
66 #define sbpMixerAddr 0x204 // W
\r
67 #define sbpMixerData 0x205 // RW
\r
68 #define sbpCDData 0x210 // R
\r
69 #define sbpCDCommand 0x210 // W
\r
70 #define sbpCDStatus 0x211 // R
\r
71 #define sbpCDReset 0x212 // W
\r
73 // SBPro Mixer addresses
\r
74 #define sbpmReset 0x00
\r
75 #define sbpmVoiceVol 0x04
\r
76 #define sbpmMicMix 0x0a
\r
77 #define sbpmFilterADC 0x0c
\r
78 #define sbpmControl 0x0e
\r
79 #define sbpmMasterVol 0x22
\r
80 #define sbpmFMVol 0x26
\r
81 #define sbpmCDVol 0x28
\r
82 #define sbpmLineVol 0x2e
\r
93 // Registers for the AdLib card
\r
94 #define alFMStatus 0x388 // R
\r
95 #define alFMAddr 0x388 // W
\r
96 #define alFMData 0x389 // W
\r
98 // Register addresses
\r
100 #define alChar 0x20
\r
101 #define alScale 0x40
\r
102 #define alAttack 0x60
\r
104 #define alWave 0xe0
\r
106 #define alFreqL 0xa0
\r
107 #define alFreqH 0xb0
\r
108 #define alFeedCon 0xc0
\r
110 #define alEffects 0xbd
\r
121 // These are only for Muse - these bytes are really unused
\r
129 SoundCommon common;
\r
136 // Sequencing stuff
\r
138 #define sqMaxTracks 10
\r
139 #define sqMaxMoods 1 // DEBUG
\r
141 #define sev_Null 0 // Does nothing
\r
142 #define sev_NoteOff 1 // Turns a note off
\r
143 #define sev_NoteOn 2 // Turns a note on
\r
144 #define sev_NotePitch 3 // Sets the pitch of a currently playing note
\r
145 #define sev_NewInst 4 // Installs a new instrument
\r
146 #define sev_NewPerc 5 // Installs a new percussive instrument
\r
147 #define sev_PercOn 6 // Turns a percussive note on
\r
148 #define sev_PercOff 7 // Turns a percussive note off
\r
149 #define sev_SeqEnd -1 // Terminates a sequence
\r
151 // Flags for MusicGroup.flags
\r
152 #define sf_Melodic 0
\r
153 #define sf_Percussive 1
\r
172 /* This part needs to be set up by the user */
\r
173 word mood,far *moods[sqMaxMoods];
\r
175 /* The rest is set up by the code */
\r
177 boolean percussive;
\r
179 longword nextevent;
\r
182 #define sqmode_Normal 0
\r
183 #define sqmode_FadeIn 1
\r
184 #define sqmode_FadeOut 2
\r
186 #define sqMaxFade 64 // DEBUG
\r
189 // Global variables
\r
190 extern boolean AdLibPresent,
\r
191 SoundSourcePresent,
\r
192 SoundBlasterPresent,
\r
193 NeedsMusic, // For Caching Mgr
\r
195 extern SDMode SoundMode;
\r
196 extern SDSMode DigiMode;
\r
197 extern SMMode MusicMode;
\r
198 extern boolean DigiPlaying;
\r
199 extern int DigiMap[];
\r
200 extern longword TimeCount; // Global time in ticks
\r
202 // Function prototypes
\r
203 extern void SD_Startup(void),
\r
205 SD_Default(boolean gotit,SDMode sd,SMMode sm),
\r
207 SD_PositionSound(int leftvol,int rightvol);
\r
208 extern boolean SD_PlaySound(soundnames sound);
\r
209 extern void SD_SetPosition(int leftvol,int rightvol),
\r
210 SD_StopSound(void),
\r
211 SD_WaitSoundDone(void),
\r
213 SD_StartMusic(MusicGroup far *music),
\r
216 SD_FadeOutMusic(void),
\r
218 SD_SetUserHook(void (*hook)(void));
\r
219 extern boolean SD_MusicPlaying(void),
\r
220 SD_SetSoundMode(SDMode mode),
\r
221 SD_SetMusicMode(SMMode mode);
\r
222 extern word SD_SoundPlaying(void);
\r
224 extern void SD_SetDigiDevice(SDSMode),
\r
225 SD_PlayDigitized(word which,int leftpos,int rightpos),
\r
226 SD_StopDigitized(void),
\r
229 #ifdef _MUSE_ // MUSE Goes directly to the lower level routines
\r
230 extern void SDL_PCPlaySound(PCSound far *sound),
\r
231 SDL_PCStopSound(void),
\r
232 SDL_ALPlaySound(AdLibSound far *sound),
\r
233 SDL_ALStopSound(void);
\r