OSDN Git Service

got 8086 port of wolf3d to work and sod to work
[proj16/16.git] / 16 / WOLFSRC / ID_SD.H
1 //\r
2 //      ID Engine\r
3 //      ID_SD.h - Sound Manager Header\r
4 //      Version for Wolfenstein\r
5 //      By Jason Blochowiak\r
6 //\r
7 \r
8 #ifndef __ID_SD__\r
9 #define __ID_SD__\r
10 \r
11 void    alOut(byte n,byte b);\r
12 \r
13 #ifdef  __DEBUG__\r
14 #define __DEBUG_SoundMgr__\r
15 #endif\r
16 \r
17 #define TickBase        70              // 70Hz per tick - used as a base for timer 0\r
18 \r
19 typedef enum    {\r
20                                         sdm_Off,\r
21                                         sdm_PC,sdm_AdLib,\r
22                                 }       SDMode;\r
23 typedef enum    {\r
24                                         smm_Off,smm_AdLib\r
25                                 }       SMMode;\r
26 typedef enum    {\r
27                                         sds_Off,sds_PC,sds_SoundSource,sds_SoundBlaster\r
28                                 }       SDSMode;\r
29 typedef struct\r
30                 {\r
31                         longword        length;\r
32                         word            priority;\r
33                 } SoundCommon;\r
34 \r
35 //      PC Sound stuff\r
36 #define pcTimer         0x42\r
37 #define pcTAccess       0x43\r
38 #define pcSpeaker       0x61\r
39 \r
40 #define pcSpkBits       3\r
41 \r
42 typedef struct\r
43                 {\r
44                         SoundCommon     common;\r
45                         byte            data[1];\r
46                 } PCSound;\r
47 \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
58 \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
72 \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
83 \r
84 typedef struct\r
85                 {\r
86                         SoundCommon     common;\r
87                         word            hertz;\r
88                         byte            bits,\r
89                                                 reference,\r
90                                                 data[1];\r
91                 } SampledSound;\r
92 \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
97 \r
98 //      Register addresses\r
99 // Operator stuff\r
100 #define alChar          0x20\r
101 #define alScale         0x40\r
102 #define alAttack        0x60\r
103 #define alSus           0x80\r
104 #define alWave          0xe0\r
105 // Channel stuff\r
106 #define alFreqL         0xa0\r
107 #define alFreqH         0xb0\r
108 #define alFeedCon       0xc0\r
109 // Global stuff\r
110 #define alEffects       0xbd\r
111 \r
112 typedef struct\r
113                 {\r
114                         byte    mChar,cChar,\r
115                                         mScale,cScale,\r
116                                         mAttack,cAttack,\r
117                                         mSus,cSus,\r
118                                         mWave,cWave,\r
119                                         nConn,\r
120 \r
121                                         // These are only for Muse - these bytes are really unused\r
122                                         voice,\r
123                                         mode,\r
124                                         unused[3];\r
125                 } Instrument;\r
126 \r
127 typedef struct\r
128                 {\r
129                         SoundCommon     common;\r
130                         Instrument      inst;\r
131                         byte            block,\r
132                                                 data[1];\r
133                 } AdLibSound;\r
134 \r
135 //\r
136 //      Sequencing stuff\r
137 //\r
138 #define sqMaxTracks     10\r
139 #define sqMaxMoods      1       // DEBUG\r
140 \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
150 \r
151 //      Flags for MusicGroup.flags\r
152 #define sf_Melodic              0\r
153 #define sf_Percussive   1\r
154 \r
155 #if 1\r
156 typedef struct\r
157                 {\r
158                         word    length,\r
159                                         values[1];\r
160                 } MusicGroup;\r
161 #else\r
162 typedef struct\r
163                 {\r
164                         word    flags,\r
165                                         count,\r
166                                         offsets[1];\r
167                 } MusicGroup;\r
168 #endif\r
169 \r
170 typedef struct\r
171                 {\r
172                         /* This part needs to be set up by the user */\r
173                         word        mood,far *moods[sqMaxMoods];\r
174 \r
175                         /* The rest is set up by the code */\r
176                         Instrument      inst;\r
177                         boolean         percussive;\r
178                         word            far *seq;\r
179                         longword        nextevent;\r
180                 } ActiveTrack;\r
181 \r
182 #define sqmode_Normal           0\r
183 #define sqmode_FadeIn           1\r
184 #define sqmode_FadeOut          2\r
185 \r
186 #define sqMaxFade               64      // DEBUG\r
187 \r
188 \r
189 // Global variables\r
190 extern  boolean         AdLibPresent,\r
191                                         SoundSourcePresent,\r
192                                         SoundBlasterPresent,\r
193                                         NeedsMusic,                                     // For Caching Mgr\r
194                                         SoundPositioned;\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
201 \r
202 // Function prototypes\r
203 extern  void    SD_Startup(void),\r
204                                 SD_Shutdown(void),\r
205                                 SD_Default(boolean gotit,SDMode sd,SMMode sm),\r
206 \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
212 \r
213                                 SD_StartMusic(MusicGroup far *music),\r
214                                 SD_MusicOn(void),\r
215                                 SD_MusicOff(void),\r
216                                 SD_FadeOutMusic(void),\r
217 \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
223 \r
224 extern  void    SD_SetDigiDevice(SDSMode),\r
225                                 SD_PlayDigitized(word which,int leftpos,int rightpos),\r
226                                 SD_StopDigitized(void),\r
227                                 SD_Poll(void);\r
228 \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
234 #endif\r
235 \r
236 #endif\r
237 \r