-#define ADLIB_FM_DATA 0x389 /* adlib data register */
-
-void opl2out(word reg, word data);
-void opl3out(word reg, word data);
-void opl3exp(word data);
-void FMReset(void/*int percusiveMode*/);
-
-#endif /*__16_SND_H_*/
+#define ADLIB_FM_DATA 0x389 /* adlib data register */\r
+\r
+/*\r
+* FM Instrument definition for .SBI files - SoundBlaster instrument\r
+* - these are the important parts - we will skip the header, but since\r
+* I am not sure where it starts and ends so I have had to guess.\r
+* However it SEEMS! to work. Each array has two values, one for\r
+* each operator.\r
+*/\r
+typedef struct{\r
+ byte SoundCharacteristic[2]; /* modulator frequency multiple... */\r
+ byte Level[2]; /* modulator frequency level... */\r
+ byte AttackDecay[2]; /* modulator attack/decay... */\r
+ byte SustainRelease[2]; /* modulator sustain/release... */\r
+ byte WaveSelect[2]; /* output waveform distortion */\r
+ byte Feedback; /* feedback algorithm and strength */\r
+} FMInstrument;\r
+\r
+void opl2out(word reg, word data);\r
+void opl3out(word reg, word data);\r
+void opl3exp(word data);\r
+\r
+void FMReset(void/*int percusiveMode*/);\r
+void FMKeyOff(int voice);\r
+void FMKeyOn(int voice, int freq, int octave);\r
+void FMSetVoice(int voiceNum, FMInstrument *ins);\r
+\r
+void SD_Initimf(global_game_variables_t *gvar);\r
+void SD_imf_reset_music(global_game_variables_t *gvar);\r
+void SD_StartupTimer(global_game_variables_t *gvar),\r
+ SD_ShutdownTimer();\r
+void SD_imf_free_music(global_game_variables_t *gvar);\r
+int SD_imf_load_music(const char *path, global_game_variables_t *gvar);\r
+void interrupt SD_irq0(void);\r
+void SD_imf_tick(global_game_variables_t *gvar);\r
+void SD_adlib_shut_up();\r
+\r
+#endif /*__16_SND_H_*/\r