From d96f6da677bc319f7868e832f09948c94ee6a148 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 3 Apr 2023 12:29:48 +0200 Subject: Add noise channel with note support --- src/gba/gba.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/gba') diff --git a/src/gba/gba.h b/src/gba/gba.h index cdb3b31..b02d745 100644 --- a/src/gba/gba.h +++ b/src/gba/gba.h @@ -558,7 +558,7 @@ sound_volume(SoundChannel channels, u8 volume) { #define SOUND_SWEEP_DIR(N) ((N) << 0x3) #define SOUND_SWEEP_TIME(N) ((N) << 0x4) -// DMG frequency bits (Square/Wave). +// DMG frequency bits (Square/Wave/NOISE). #define SOUND_FREQ_TIMED (1 << 0xE) #define SOUND_FREQ_RESET (1 << 0xF) @@ -585,6 +585,18 @@ typedef u8 WaveBank[32]; #define SOUND_WAVE_RAM ((WaveBank*)(MEM_IO + 0x90)) +// DMG noise control bits. +#define SOUND_NOISE_LENGTH(N) (((N) & 0x3F) << 0) +#define SOUND_NOISE_ENV_TIME(N) (((N) & 0x07) << 0x8) +#define SOUND_NOISE_ENV_DIR(N) (((N) & 0x01) << 0xB) +#define SOUND_NOISE_ENV_VOL(N) (((N) & 0x0F) << 0xC) + +// DMG noise freq bits. +#define SOUND_NOISE_DIV_FREQ(N) (((N) & 0x07) << 0) +#define SOUND_NOISE_COUNTER_STAGE(N) (((N) & 0x01) << 0x3) +#define SOUND_NOISE_PRESTEP_FREQ(N) (((N) & 0x0F) << 0x4) +#define SOUND_NOISE_TIMED_MODE(N) (((N) & 0x01) << 0xe) + typedef enum { NOTE_C_2 , NOTE_C_SHARP_2 , NOTE_D_2 , NOTE_D_SHARP_2 , NOTE_E_2 , NOTE_F_2 , NOTE_F_SHARP_2 , NOTE_G_2 , -- cgit v1.2.1