2021-03-23 07:51:33 +01:00
|
|
|
//
|
|
|
|
// ID Engine
|
|
|
|
// ID_SD.h - Sound Manager Header
|
|
|
|
// Version for Wolfenstein
|
|
|
|
// By Jason Blochowiak
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef __ID_SD__
|
|
|
|
#define __ID_SD__
|
|
|
|
|
|
|
|
#define alOut(n,b) YM3812Write(0, n, b)
|
|
|
|
|
|
|
|
#define TickBase 70 // 70Hz per tick - used as a base for timer 0
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
sdm_Off,
|
|
|
|
sdm_PC,sdm_AdLib,
|
|
|
|
} SDMode;
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
smm_Off,smm_AdLib
|
|
|
|
} SMMode;
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
sds_Off,sds_PC,sds_SoundBlaster
|
|
|
|
} SDSMode;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
longword length;
|
|
|
|
word priority;
|
|
|
|
} SoundCommon;
|
|
|
|
|
|
|
|
#define ORIG_SOUNDCOMMON_SIZE 6
|
|
|
|
|
|
|
|
// PC Sound stuff
|
|
|
|
#define pcTimer 0x42
|
|
|
|
#define pcTAccess 0x43
|
|
|
|
#define pcSpeaker 0x61
|
|
|
|
|
|
|
|
#define pcSpkBits 3
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
SoundCommon common;
|
|
|
|
byte data[1];
|
|
|
|
} PCSound;
|
|
|
|
|
|
|
|
// Register addresses
|
|
|
|
// Operator stuff
|
|
|
|
#define alChar 0x20
|
|
|
|
#define alScale 0x40
|
|
|
|
#define alAttack 0x60
|
|
|
|
#define alSus 0x80
|
|
|
|
#define alWave 0xe0
|
|
|
|
// Channel stuff
|
|
|
|
#define alFreqL 0xa0
|
|
|
|
#define alFreqH 0xb0
|
|
|
|
#define alFeedCon 0xc0
|
|
|
|
// Global stuff
|
|
|
|
#define alEffects 0xbd
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
byte mChar,cChar,
|
|
|
|
mScale,cScale,
|
|
|
|
mAttack,cAttack,
|
|
|
|
mSus,cSus,
|
|
|
|
mWave,cWave,
|
|
|
|
nConn,
|
|
|
|
|
|
|
|
// These are only for Muse - these bytes are really unused
|
|
|
|
voice,
|
|
|
|
mode;
|
|
|
|
byte unused[3];
|
|
|
|
} Instrument;
|
|
|
|
|
|
|
|
#define ORIG_INSTRUMENT_SIZE 16
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
SoundCommon common;
|
|
|
|
Instrument inst;
|
|
|
|
byte block;
|
|
|
|
byte data[1];
|
|
|
|
} AdLibSound;
|
|
|
|
|
|
|
|
#define ORIG_ADLIBSOUND_SIZE (ORIG_SOUNDCOMMON_SIZE + ORIG_INSTRUMENT_SIZE + 2)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Sequencing stuff
|
|
|
|
//
|
|
|
|
#define sqMaxTracks 10
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
word length;
|
|
|
|
word values[1];
|
|
|
|
} MusicGroup;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
int valid;
|
|
|
|
fixed globalsoundx, globalsoundy;
|
|
|
|
} globalsoundpos;
|
|
|
|
|
|
|
|
extern globalsoundpos channelSoundPos[];
|
|
|
|
|
|
|
|
// Global variables
|
|
|
|
extern boolean AdLibPresent,
|
|
|
|
SoundBlasterPresent,
|
|
|
|
SoundPositioned;
|
|
|
|
extern SDMode SoundMode;
|
|
|
|
extern SDSMode DigiMode;
|
|
|
|
extern SMMode MusicMode;
|
|
|
|
extern int DigiMap[];
|
|
|
|
extern int DigiChannel[];
|
|
|
|
|
2021-07-29 22:23:49 +02:00
|
|
|
#ifdef _KOLIBRI
|
|
|
|
extern void uSDL_Delay(unsigned time);
|
|
|
|
#else
|
|
|
|
#define uSDL_Delay SDL_Delay
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define GetTimeCount() (( uSDL_GetTicks()*7)/100)
|
2021-03-23 07:51:33 +01:00
|
|
|
|
|
|
|
inline void Delay(int wolfticks)
|
|
|
|
{
|
2021-07-29 22:23:49 +02:00
|
|
|
if(wolfticks>0) uSDL_Delay(wolfticks * 100/ 7);
|
2021-03-23 07:51:33 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Function prototypes
|
|
|
|
extern void SD_Startup(void),
|
|
|
|
SD_Shutdown(void);
|
|
|
|
|
|
|
|
extern int SD_GetChannelForDigi(int which);
|
|
|
|
extern void SD_PositionSound(int leftvol,int rightvol);
|
|
|
|
extern boolean SD_PlaySound(soundnames sound);
|
|
|
|
extern void SD_SetPosition(int channel, int leftvol,int rightvol);
|
|
|
|
extern void SD_StopSound(void),
|
|
|
|
SD_WaitSoundDone(void);
|
|
|
|
|
|
|
|
extern void SD_StartMusic(int chunk);
|
|
|
|
extern void SD_ContinueMusic(int chunk, int startoffs);
|
|
|
|
extern void SD_MusicOn(void),
|
|
|
|
SD_FadeOutMusic(void);
|
|
|
|
extern int SD_MusicOff(void);
|
|
|
|
|
|
|
|
extern boolean SD_MusicPlaying(void);
|
|
|
|
extern boolean SD_SetSoundMode(SDMode mode);
|
|
|
|
extern boolean SD_SetMusicMode(SMMode mode);
|
|
|
|
extern word SD_SoundPlaying(void);
|
|
|
|
|
|
|
|
extern void SD_SetDigiDevice(SDSMode);
|
|
|
|
extern void SD_PrepareSound(int which);
|
|
|
|
extern int SD_PlayDigitized(word which,int leftpos,int rightpos);
|
|
|
|
extern void SD_StopDigitized(void);
|
|
|
|
|
|
|
|
#endif
|