diff options
Diffstat (limited to 'include/gba')
| -rw-r--r-- | include/gba/io_reg.h | 10 | ||||
| -rw-r--r-- | include/gba/m4a_internal.h | 92 | 
2 files changed, 53 insertions, 49 deletions
| diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 071a89bc5..1daa99e1d 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -553,6 +553,7 @@  #define WININ_WIN0_BG_ALL   (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3)  #define WININ_WIN0_OBJ      (1 << 4)  #define WININ_WIN0_CLR      (1 << 5) +#define WININ_WIN0_ALL      (WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR)  #define WININ_WIN1_BG0      (1 << 8)  #define WININ_WIN1_BG1      (1 << 9)  #define WININ_WIN1_BG2      (1 << 10) @@ -560,6 +561,7 @@  #define WININ_WIN1_BG_ALL   (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3)  #define WININ_WIN1_OBJ      (1 << 12)  #define WININ_WIN1_CLR      (1 << 13) +#define WININ_WIN1_ALL      (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR)  #define WINOUT_WIN01_BG0    (1 << 0)  #define WINOUT_WIN01_BG1    (1 << 1) @@ -568,6 +570,7 @@  #define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3)  #define WINOUT_WIN01_OBJ    (1 << 4)  #define WINOUT_WIN01_CLR    (1 << 5) +#define WINOUT_WIN01_ALL    (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR)  #define WINOUT_WINOBJ_BG0   (1 << 8)  #define WINOUT_WINOBJ_BG1   (1 << 9)  #define WINOUT_WINOBJ_BG2   (1 << 10) @@ -575,6 +578,7 @@  #define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3)  #define WINOUT_WINOBJ_OBJ   (1 << 12)  #define WINOUT_WINOBJ_CLR   (1 << 13) +#define WINOUT_WINOBJ_ALL   (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR)  #define WIN_RANGE(a, b) (((a) << 8) | (b))  #define WIN_RANGE2(a, b) ((b) | ((a) << 8)) @@ -585,9 +589,10 @@  #define BLDCNT_TGT1_BG1      (1 << 1)  #define BLDCNT_TGT1_BG2      (1 << 2)  #define BLDCNT_TGT1_BG3      (1 << 3) +#define BLDCNT_TGT1_BG_ALL   (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3)  #define BLDCNT_TGT1_OBJ      (1 << 4)  #define BLDCNT_TGT1_BD       (1 << 5) -#define BLDCNT_TGT1_ALL      (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD) +#define BLDCNT_TGT1_ALL      (BLDCNT_TGT1_BG_ALL | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD)  // Bits 6-7 select the special effect  #define BLDCNT_EFFECT_NONE      (0 << 6)   // no special effect  #define BLDCNT_EFFECT_BLEND     (1 << 6)   // 1st+2nd targets mixed (controlled by BLDALPHA) @@ -598,9 +603,10 @@  #define BLDCNT_TGT2_BG1      (1 << 9)  #define BLDCNT_TGT2_BG2      (1 << 10)  #define BLDCNT_TGT2_BG3      (1 << 11) +#define BLDCNT_TGT2_BG_ALL   (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3)  #define BLDCNT_TGT2_OBJ      (1 << 12)  #define BLDCNT_TGT2_BD       (1 << 13) -#define BLDCNT_TGT2_ALL      (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) +#define BLDCNT_TGT2_ALL      (BLDCNT_TGT2_BG_ALL | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)  // BLDALPHA  #define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index e2836c6f6..bdff1b865 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -140,55 +140,13 @@ struct SoundChannel      struct WaveData *wav;      u32 cp;      struct MusicPlayerTrack *track; -    u32 pp; -    u32 np; -    u32 d4; +    void *pp; +    void *np; +    void *d4;      u16 xpi;      u16 xpc;  }; -#define MAX_DIRECTSOUND_CHANNELS 12 - -#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer - -struct SoundInfo -{ -    // This field is normally equal to ID_NUMBER but it is set to other -    // values during sensitive operations for locking purposes. -    // This field should be volatile but isn't. This could potentially cause -    // race conditions. -    u32 ident; - -    vu8 pcmDmaCounter; - -    // Direct Sound -    u8 reverb; -    u8 maxChans; -    u8 masterVolume; -    u8 freq; - -    u8 mode; -    u8 c15; -    u8 pcmDmaPeriod; // number of V-blanks per PCM DMA -    u8 maxLines; -    u8 gap[3]; -    s32 pcmSamplesPerVBlank; -    s32 pcmFreq; -    s32 divFreq; -    struct CgbChannel *cgbChans; -    u32 func; -    u32 intp; -    void (*CgbSound)(void); -    void (*CgbOscOff)(u8); -    u32 (*MidiKeyToCgbFreq)(u8, u8, u8); -    u32 MPlayJumpTable; -    u32 plynote; -    u32 ExtVolPit; -    u8 gap2[16]; -    struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; -    s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; -}; -  struct SongHeader  {      u8 trackCount; @@ -312,7 +270,7 @@ struct MusicPlayerInfo      struct MusicPlayerTrack *tracks;      struct ToneData *tone;      u32 ident; -    u32 func; +    void (*func)();      u32 intp;  }; @@ -334,7 +292,47 @@ struct Song  extern const struct MusicPlayer gMPlayTable[];  extern const struct Song gSongTable[]; +#define MAX_DIRECTSOUND_CHANNELS 12 + +#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer + +struct SoundInfo +{ +    // This field is normally equal to ID_NUMBER but it is set to other +    // values during sensitive operations for locking purposes. +    // This field should be volatile but isn't. This could potentially cause +    // race conditions. +    u32 ident; + +    vu8 pcmDmaCounter; + +    // Direct Sound +    u8 reverb; +    u8 maxChans; +    u8 masterVolume; +    u8 freq; +    u8 mode; +    u8 c15; +    u8 pcmDmaPeriod; // number of V-blanks per PCM DMA +    u8 maxLines; +    u8 gap[3]; +    s32 pcmSamplesPerVBlank; +    s32 pcmFreq; +    s32 divFreq; +    struct CgbChannel *cgbChans; +    void (*func)(); +    u32 intp; +    void (*CgbSound)(); +    void (*CgbOscOff)(u8); +    u32 (*MidiKeyToCgbFreq)(u8, u8, u8); +    void (**MPlayJumpTable)(); +    void (*plynote)(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +    void (*ExtVolPit)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +    u32 gap2[4]; +    struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; +    s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +};  extern u8 gMPlayMemAccArea[]; @@ -448,7 +446,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);  void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);  void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);  void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *);  // extended sound command handler functions  void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); | 
