#ifndef _LIBGCCVB_AUDIO_H #define _LIBGCCVB_AUDIO_H #include "types.h" typedef struct SOUNDREG { // this table is for the most part untested, but looks to be accurate // | D7 || D6 || D5 || D4 || D3 || D2 || D1 || D0 | u8 SxINT; // [----Enable----][--XXXXXXXXXX--][-Interval/??--][--------------------------------Interval Data---------------------------------] u8 spacer1[3]; u8 SxLRV; // [---------------------------L Level----------------------------][---------------------------R Level----------------------------] u8 spacer2[3]; u8 SxFQL; // [------------------------------------------------------Frequency Low Byte------------------------------------------------------] u8 spacer3[3]; u8 SxFQH; // [--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--------------Frequency High Byte-------------] u8 spacer4[3]; u8 SxEV0; // [---------------------Initial Envelope Value-------------------][------U/D-----][-----------------Envelope Step----------------] u8 spacer5[3]; //Ch. 1-4 [--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][------R/S-----][----On/Off----] //Ch. 5 [--XXXXXXXXXX--][------E/D-----][----?/Short---][--Mod./Sweep--][--XXXXXXXXXX--][--XXXXXXXXXX--][------R/S-----][----On/Off----] u8 SxEV1; //Ch. 6 [--XXXXXXXXXX--][----------------------E/D---------------------][--XXXXXXXXXX--][--XXXXXXXXXX--][------R/S-----][----On/Off----] u8 spacer6[3]; // Ch. 1-5 only (I believe address is only 3 bits, but may be 4, needs testing) u8 SxRAM; // [--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--XXXXXXXXXX--][--------------Waveform RAM Address------------] u8 spacer7[3]; // Ch. 5 only u8 S5SWP; // [------CLK-----][-------------Sweep/Modulation Time------------][------U/D-----][----------------Number of Shifts--------------] u8 spacer8[35]; } SOUNDREG; extern u8* const WAVEDATA1; extern u8* const WAVEDATA2; extern u8* const WAVEDATA3; extern u8* const WAVEDATA4; extern u8* const WAVEDATA5; extern u8* const MODDATA; extern SOUNDREG* const SND_REGS; #define SSTOP *(u8*)0x01000580 /***** Sound Register Mnemonics *****/ #define WAVE1 0x00 // Voluntary wave channel #1 #define WAVE2 0x01 // Voluntary wave channel #2 #define WAVE3 0x02 // Voluntary wave channel #3 #define WAVE4 0x03 // Voluntary wave channel #4 #define SWEEP 0x04 // Sweep/modulation channel #define NOISE 0x05 // Pseudorandom noise channel #endif