mirror of
https://github.com/thug1src/thug.git
synced 2024-12-02 21:07:12 +00:00
168 lines
6.5 KiB
C
168 lines
6.5 KiB
C
#ifndef __MODULES_PCM_PCM_H
|
|
#define __MODULES_PCM_PCM_H
|
|
|
|
#define NUM_STREAMS 3
|
|
|
|
#define PCM_RPC_ARG_NUM_INTS 16
|
|
|
|
#define DEFAULT_PITCH 0x1000
|
|
|
|
// VAG header structure
|
|
typedef struct
|
|
{
|
|
char ID[4];
|
|
int version;
|
|
char reserved1[4];
|
|
int dataSize;
|
|
int sampleFreq;
|
|
char reserved2[12];
|
|
char name[16];
|
|
} VagHeader;
|
|
|
|
#define SIZE_OF_VAGHEADER ( sizeof( VagHeader ) )
|
|
|
|
// sound stuff:
|
|
#define SB_BUF_SIZE ( 1024 * 32 ) // hex 2000
|
|
#define SB_BUF_HALF ( SB_BUF_SIZE / 2 ) // hex 1000
|
|
#define SB_BUF_SIZE_WITH_PADDING ( SB_BUF_SIZE + 0x40 )
|
|
|
|
// spu ram layout:
|
|
// first valid address for use in SPU RAM
|
|
#define SPU_RAM_SIZE 0x1fffff
|
|
#define SB_FIRST_USEABLE_ADDR 0x5010
|
|
|
|
//#define STRAY_VOICE_BLOCKER_SIZE 128
|
|
//#define STRAY_VOICE_BLOCKER_SPU_ADDR SB_TOP
|
|
//#define STREAM_SPU_ADDR ( STRAY_VOICE_BLOCKER_SPU_ADDR + STRAY_VOICE_BLOCKER_SIZE )
|
|
#define STREAM_SPU_ADDR SB_FIRST_USEABLE_ADDR
|
|
|
|
// slip in room for 3 streaming VAGS ( 2 for stereo music and one extra stream ):
|
|
//#define SINGLE_STREAM_BUFFER_SIZE 2048
|
|
#define TOTAL_SPU_REQUIRED_FOR_STREAMS ( SB_BUF_SIZE_WITH_PADDING * 4 )
|
|
#define MUSIC_L_SPU_BUF_LOC ( STREAM_SPU_ADDR + 0x40 )
|
|
#define MUSIC_R_SPU_BUF_LOC ( MUSIC_L_SPU_BUF_LOC + SB_BUF_SIZE_WITH_PADDING )
|
|
#define STREAM_SPU_BUF_LOC( i ) ( MUSIC_R_SPU_BUF_LOC + ( ( 1 + ( i ) ) * SB_BUF_SIZE_WITH_PADDING ) )
|
|
|
|
#define END_OF_STREAMS ( STREAM_SPU_ADDR + TOTAL_SPU_REQUIRED_FOR_STREAMS + 0x40 )
|
|
|
|
//#define RAM_NEEDED_FOR_EFFECTS 0 // FUCK the effects...
|
|
#define RAM_NEEDED_FOR_EFFECTS 0xade0 // enough for HALL reverb
|
|
//#define RAM_NEEDED_FOR_EFFECTS 0xF6C0 // enough for space echo
|
|
|
|
#define REVERB_ONLY_ON_CORE_0 1
|
|
|
|
#if !REVERB_ONLY_ON_CORE_0
|
|
|
|
#define CORE_1_EFFECTS_START_ADDRESS END_OF_STREAMS
|
|
#define CORE_1_EFFECTS_END_ADDRESS 0x02ffff // has to be on a 0xffff boundary!!
|
|
#if ( ( CORE_1_EFFECTS_END_ADDRESS - CORE_1_EFFECTS_START_ADDRESS ) < RAM_NEEDED_FOR_EFFECTS )
|
|
#error "not enough space for core 0 effects!"
|
|
#endif
|
|
|
|
#define BASE_WAVE_DATA_ADDR CORE_0_EFFECTS_END_ADDRESS
|
|
|
|
#else
|
|
#define BASE_WAVE_DATA_ADDR END_OF_STREAMS
|
|
#endif
|
|
|
|
#define CORE_0_EFFECTS_START_ADDRESS ( SPU_RAM_SIZE - RAM_NEEDED_FOR_EFFECTS )
|
|
#define CORE_0_EFFECTS_END_ADDRESS ( SPU_RAM_SIZE )
|
|
#define END_WAVE_DATA_ADDR ( CORE_0_EFFECTS_START_ADDRESS - 0x40 )
|
|
|
|
// used by temporary sounds and permanently loaded sounds...
|
|
#define MAX_SPU_RAM_AVAILABLE ( END_WAVE_DATA_ADDR - BASE_WAVE_DATA_ADDR )
|
|
|
|
//#define MUSIC_R_SPU_BUF_LOC SB_TOP
|
|
//#define MUSIC_L_SPU_BUF_LOC ( MUSIC_R_SPU_BUF_LOC + SB_BUF_SIZE )
|
|
//#define STREAM_SPU_BUF_LOC ( MUSIC_L_SPU_BUF_LOC + SB_BUF_SIZE )
|
|
|
|
// iop buffer taking streams off of the CD:
|
|
#define MUSIC_IOP_BUFFER_SIZE ( 1024 * 192 ) // must be a multiple of 4k!
|
|
#define MUSIC_HALF_IOP_BUFFER_SIZE ( MUSIC_IOP_BUFFER_SIZE / 2 ) // must be a multiple of 2k!
|
|
#define STREAM_IOP_BUFFER_SIZE ( 1024 * /*128*/64 ) // must be a multiple of 4k!
|
|
#define STREAM_HALF_IOP_BUFFER_SIZE ( STREAM_IOP_BUFFER_SIZE / 2 ) // must be a multiple of 2k!
|
|
|
|
// must match values in pcm_com.c!!!
|
|
#define TOTAL_IOP_BUFFER_SIZE_NEEDED ( ( MUSIC_IOP_BUFFER_SIZE * 2 ) + ( STREAM_IOP_BUFFER_SIZE * NUM_STREAMS ) )
|
|
#define ALLIGN_REQUIREMENT 64
|
|
#define SECTOR_SIZE ( 2048 )
|
|
#define NUM_SECTORS_PER_STREAM_BUFFER ( STREAM_IOP_BUFFER_SIZE / SECTOR_SIZE )
|
|
#define NUM_SECTORS_PER_STREAM_HALF_BUFFER ( NUM_SECTORS_PER_STREAM_BUFFER / 2 )
|
|
#define NUM_SECTORS_PER_MUSIC_BUFFER ( MUSIC_IOP_BUFFER_SIZE / SECTOR_SIZE )
|
|
#define NUM_SECTORS_PER_MUSIC_HALF_BUFFER ( NUM_SECTORS_PER_MUSIC_BUFFER / 2 )
|
|
|
|
#define MUSIC_L_IOP_OFFSET 0
|
|
#define MUSIC_R_IOP_OFFSET ( MUSIC_HALF_IOP_BUFFER_SIZE ) // interwoven with the L IOP buffer... and shit
|
|
#define STREAM_IOP_OFFSET( ch ) ( ( 2 * MUSIC_IOP_BUFFER_SIZE ) + ( STREAM_IOP_BUFFER_SIZE * ( ch ) ) )
|
|
|
|
#define MUSIC_L_VOICE 22
|
|
#define MUSIC_R_VOICE 23
|
|
#define MUSIC_CORE 1
|
|
|
|
#define STREAM_VOICE( i ) ( 23 - ( i ) )
|
|
#define STREAM_CORE 0
|
|
|
|
// RPC command:
|
|
#define EzADPCM_COMMAND_MASK 0xfff0
|
|
#define EzADPCM_CH_MASK 0x000f
|
|
|
|
#define EzADPCM_INIT 0x0000
|
|
#define EzADPCM_QUIT 0x0010
|
|
#define EzADPCM_PLAYMUSIC 0x0020
|
|
#define EzADPCM_STOPMUSIC 0x0030
|
|
#define EzADPCM_PLAYSTREAM 0x0040
|
|
#define EzADPCM_STOPSTREAM 0x0070
|
|
#define EzADPCM_STOPSTREAMS 0x00a0
|
|
#define EzADPCM_SETMUSICVOL 0x00b0
|
|
#define EzADPCM_SETSTREAMVOL 0x00c0
|
|
#define EzADPCM_SETSTREAMVOLANDPITCH 0x00d0
|
|
#define EzADPCM_GETSTATUS 0x00e0
|
|
#define EzADPCM_GETMUSICSTATUS 0x00f0
|
|
#define EzADPCM_PAUSEMUSIC 0x0100
|
|
#define EzADPCM_PAUSESTREAM 0x0110
|
|
#define EzADPCM_PAUSESTREAMS 0x0120
|
|
#define EzADPCM_SETSTREAMGLOBVOL 0x0130
|
|
#define EzADPCM_SDINIT 0x7ff0
|
|
|
|
// for GETSTREAMSTATUS or GETMUSICSTATUS:
|
|
#define PCM_STATUS 0x0001f000
|
|
#define PCM_STATUS_IDLE 0x00000000
|
|
#define PCM_STATUS_PRELOAD 0x00001000
|
|
#define PCM_STATUS_READY_TO_STOP 0x00002000
|
|
#define PCM_STATUS_NEED_UPDATE 0x00003000
|
|
#define PCM_STATUS_RUNNING 0x00005000
|
|
#define PCM_STATUS_TERMINATE 0x00006000
|
|
|
|
// flags for GETSTATUS
|
|
#define PCMSTATUS_NEED_MUSIC_BUFFER_0 ( 1 << 0 )
|
|
#define PCMSTATUS_NEED_MUSIC_BUFFER_1 ( 1 << 1 )
|
|
#define PCMSTATUS_NEED_STREAM0_BUFFER_0 ( 1 << 2 ) // don't change the order of these!!! IMPORTANT!
|
|
#define PCMSTATUS_NEED_STREAM1_BUFFER_0 ( 1 << 3 )
|
|
#define PCMSTATUS_NEED_STREAM2_BUFFER_0 ( 1 << 4 )
|
|
#define PCMSTATUS_NEED_STREAM0_BUFFER_1 ( 1 << 5 )
|
|
#define PCMSTATUS_NEED_STREAM1_BUFFER_1 ( 1 << 6 )
|
|
#define PCMSTATUS_NEED_STREAM2_BUFFER_1 ( 1 << 7 )
|
|
#define PCMSTATUS_MUSIC_PLAYING ( 1 << 8 )
|
|
#define PCMSTATUS_STREAM0_PLAYING ( 1 << 9 )
|
|
#define PCMSTATUS_STREAM1_PLAYING ( 1 << 10 )
|
|
#define PCMSTATUS_STREAM2_PLAYING ( 1 << 11 )
|
|
#define PCMSTATUS_LOAD_MUSIC ( 1 << 12 )
|
|
#define PCMSTATUS_LOAD_STREAM0 ( 1 << 13 )
|
|
#define PCMSTATUS_LOAD_STREAM1 ( 1 << 14 )
|
|
#define PCMSTATUS_LOAD_STREAM2 ( 1 << 15 )
|
|
#define PCMSTATUS_INITIALIZED ( 1 << 16 )
|
|
|
|
// macros:
|
|
#define PCMSTATUS_NEED_STREAM_BUFFER_0( xxx ) ( PCMSTATUS_NEED_STREAM0_BUFFER_0 << ( xxx ) )
|
|
#define PCMSTATUS_NEED_STREAM_BUFFER_1( xxx ) ( PCMSTATUS_NEED_STREAM0_BUFFER_1 << ( xxx ) )
|
|
#define PCMSTATUS_STREAM_PLAYING( xxx ) ( PCMSTATUS_STREAM0_PLAYING << ( xxx ) )
|
|
#define PCMSTATUS_LOAD_STREAM( xxx ) ( PCMSTATUS_LOAD_STREAM0 << ( xxx ) )
|
|
// Module ID number
|
|
#define EzADPCM_DEV 0x00012345
|
|
|
|
/* ----------------------------------------------------------------
|
|
* End on File
|
|
* ---------------------------------------------------------------- */
|
|
#endif // __MODULES_PCM_PCM_H
|
|
/* DON'T ADD STUFF AFTER THIS */
|