--- /dev/null
+#ifndef _DOSLIB_SND_H_\r
+#define _DOSLIB_SND_H_\r
+/* C Header File: ADLIB *****************************************************\r
+\r
+Author: Kevin A. Lee\r
+\r
+Last Amended: 27th April, 1993\r
+\r
+Description: Low-level interface to the Adlib (or compatible)\r
+ FM sound card. All information gleaned from\r
+ Jeffrey S. Lee's "Programming the Adlib/Sound\r
+ Blaster FM Music Chips". See Lee's document for\r
+ further information.\r
+\r
+Compiled succesfully under Turbo C, Borland C++,\r
+and Microsoft Quick C (all latest versions).\r
+\r
+****************************************************************************/\r
+#include "src\lib\lib_com.h"\r
+\r
+#define NUMVOICE 11\r
+#define FACTOR 1193180\r
+#define OCTAVE 4
+\r
+#define MIN_REGISTER 0x01\r
+#define MAX_REGISTER 0xF5\r
+#define ADLIB_FM_ADDRESS 0x388 /* adlib address/status register */\r
+#define ADLIB_FM_DATA 0x389 /* adlib data register */\r
+\r
+/*\r
+static int percussiveMode = 0,currentBDContents = 0;\r
+//static int opTable[18] = {0,1,2,3,4,5,8,9,10,11,12,13,16,17,18,19,20,21};\r
+static int voiceModulator[11] = {0,1,2,6,7,8,12,16,14,17,13};\r
+static int voiceCarrier[9] = {3,4,5,9,10,11,15,16,17};\r
+*/\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
+/*\r
+* Enumerated F-Numbers (in octave 4) for the chromatic scale.\r
+*/\r
+/*enum oct{\r
+ B4 = 493.88,\r
+ B4b = 466.16,\r
+ A4 = 440,\r
+ A4b = 415.3,\r
+ G4 = 392,\r
+ G4b = 369.99,\r
+ F4 = 349.23,\r
+ E4 = 329.63,\r
+ E4b = 311.13,\r
+ D4 = 293.66,\r
+ D4b = 277.18,\r
+ C4 = 261.63,\r
+ A0 = 27.50\r
+};*/\r
+enum SCALE{\r
+ B4 = 0x1EE,\r
+ B4b = 0x1D2,\r
+ A4 = 440,\r
+ A4b = 0x19F,\r
+ G4 = 0x188,\r
+ G4b = 0x172,\r
+ F4 = 0x15D,\r
+ E4 = 0x14A,\r
+ E4b = 0x137,\r
+ D4 = 0x126,\r
+ D4b = 0x115,\r
+ C4 = 0x106,\r
+ A0 = 0x7F2\r
+};
+\r
+/* function prototyping */\r
+void WriteFM(int reg, int value);\r
+int ReadFM(void);\r
+int AdlibExists(void);\r
+void FMReset(/*int percusiveMode*/); /* Resets the card, quiets all voices, sets the percussive mode state */\r
+void FMKeyOff(int voice);\r
+void FMKeyOn(int voice, int freq, int octave);\r
+void FMVoiceVolume(int voice, int vol);\r
+void FMSetVoice(int voiceNum, FMInstrument *ins);\r
+/* Remember: percussion instruments must be assigned only to the correct voice number. */\r
+//void FMSetPercusiveMode(int state);\r
+//int LoadSBI(char filename[], FMInstrument *ins);\r
+void fmtest(void);
+int soundtest();\r
+#endif/*_DOSLIB_SND_H_*/
\ No newline at end of file