1 /* Catacomb Armageddon Source Code
\r
2 * Copyright (C) 1993-2014 Flat Rock Software
\r
4 * This program is free software; you can redistribute it and/or modify
\r
5 * it under the terms of the GNU General Public License as published by
\r
6 * the Free Software Foundation; either version 2 of the License, or
\r
7 * (at your option) any later version.
\r
9 * This program is distributed in the hope that it will be useful,
\r
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
12 * GNU General Public License for more details.
\r
14 * You should have received a copy of the GNU General Public License along
\r
15 * with this program; if not, write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
21 // ID_SD.h - Sound Manager Header
\r
23 // By Jason Blochowiak
\r
27 #include "ID_Types.h"
\r
34 #define __DEBUG_SoundMgr__
\r
37 #define TickBase 70 // 70Hz per tick - used as a base for timer 0
\r
54 #define pcTimer 0x42
\r
55 #define pcTAccess 0x43
\r
56 #define pcSpeaker 0x61
\r
66 // Registers for the Sound Blaster card - needs to be offset by n0
\r
67 #define sbReset 0x206
\r
68 #define sbReadData 0x20a
\r
69 #define sbWriteCmd 0x20c
\r
70 #define sbWriteData 0x20c
\r
71 #define sbWriteStat 0x20c
\r
72 #define sbDataAvail 0x20e
\r
83 // Registers for the AdLib card
\r
86 #define alScale 0x40
\r
87 #define alAttack 0x60
\r
91 #define alFreqL 0xa0
\r
92 #define alFreqH 0xb0
\r
93 #define alFeedCon 0xc0
\r
95 #define alEffects 0xbd
\r
106 // These are only for Muse - these bytes are really unused
\r
114 SoundCommon common;
\r
121 // Sequencing stuff
\r
123 #define sqMaxTracks 10
\r
124 #define sqMaxMoods 1 // DEBUG
\r
126 #define sev_Null 0 // Does nothing
\r
127 #define sev_NoteOff 1 // Turns a note off
\r
128 #define sev_NoteOn 2 // Turns a note on
\r
129 #define sev_NotePitch 3 // Sets the pitch of a currently playing note
\r
130 #define sev_NewInst 4 // Installs a new instrument
\r
131 #define sev_NewPerc 5 // Installs a new percussive instrument
\r
132 #define sev_PercOn 6 // Turns a percussive note on
\r
133 #define sev_PercOff 7 // Turns a percussive note off
\r
134 #define sev_SeqEnd -1 // Terminates a sequence
\r
136 // Flags for MusicGroup.flags
\r
137 #define sf_Melodic 0
\r
138 #define sf_Percussive 1
\r
157 /* This part needs to be set up by the user */
\r
158 word mood,far *moods[sqMaxMoods];
\r
160 /* The rest is set up by the code */
\r
162 boolean percussive;
\r
164 longword nextevent;
\r
167 #define sqmode_Normal 0
\r
168 #define sqmode_FadeIn 1
\r
169 #define sqmode_FadeOut 2
\r
171 #define sqMaxFade 64 // DEBUG
\r
174 // Global variables
\r
175 extern boolean AdLibPresent,
\r
176 NeedsMusic; // For Caching Mgr
\r
177 extern SDMode SoundMode;
\r
178 extern SMMode MusicMode;
\r
179 extern longword TimeCount; // Global time in ticks
\r
180 extern SDMode oldsoundmode;
\r
182 // Function prototypes
\r
183 extern void SD_Startup(void),
\r
185 SD_Default(boolean gotit,SDMode sd,SMMode sm),
\r
186 SD_PlaySound(soundnames sound),
\r
187 SD_StopSound(void),
\r
188 SD_WaitSoundDone(void),
\r
189 SD_StartMusic(MusicGroup far *music),
\r
192 SD_FadeOutMusic(void),
\r
193 SD_SetUserHook(void (*hook)(void));
\r
194 extern boolean SD_MusicPlaying(void),
\r
195 SD_SetSoundMode(SDMode mode),
\r
196 SD_SetMusicMode(SMMode mode);
\r
197 extern word SD_SoundPlaying(void);
\r
199 #ifdef _MUSE_ // MUSE Goes directly to the lower level routines
\r
200 extern void SDL_PCPlaySound(PCSound far *sound),
\r
201 SDL_PCStopSound(void),
\r
202 SDL_ALPlaySound(AdLibSound far *sound),
\r
203 SDL_ALStopSound(void);
\r