87 lines
2.6 KiB
C
Executable File
87 lines
2.6 KiB
C
Executable File
#ifndef __GB_SOUND_H__
|
|
#define __GB_SOUND_H__
|
|
|
|
#include "gb-impl.h"
|
|
|
|
const static BYTE squareWave[4][8] ={
|
|
{ 0, 0,0, 0, 0, 0, 0, 1 },
|
|
{ 1,0, 0, 0, 0, 0, 0, 1 },
|
|
{ 1,0,0,0, 0, 1, 1, 1 },
|
|
{ 0,1,1,1,1,1, 1, 0 }
|
|
};
|
|
|
|
const static BYTE noise[] = {
|
|
0xfb,0xe7,0xae,0x1b,0xa6,0x2b,0x05,0xe3,
|
|
0xb6,0x4a,0x42,0x72,0xd1,0x19,0xaa,0x03,
|
|
};
|
|
|
|
#define NR50 cpu->memory[0xFF24]
|
|
#define NR51 cpu->memory[0xFF25]
|
|
#define NR52 cpu->memory[0xFF26]
|
|
|
|
#define NR10 cpu->memory[0xFF10]
|
|
#define NR11 cpu->memory[0xFF11]
|
|
#define NR12 cpu->memory[0xFF12]
|
|
#define NR13 cpu->memory[0xFF13]
|
|
#define NR14 cpu->memory[0xFF14]
|
|
|
|
#define NR21 cpu->memory[0xFF16]
|
|
#define NR22 cpu->memory[0xFF17]
|
|
#define NR23 cpu->memory[0xFF18]
|
|
#define NR24 cpu->memory[0xFF19]
|
|
|
|
#define NR32 cpu->memory[0xFF1C]
|
|
#define NR33 cpu->memory[0xFF1D]
|
|
#define NR34 cpu->memory[0xFF1E]
|
|
|
|
#define NR41 cpu->memory[0xFF20]
|
|
#define NR42 cpu->memory[0xFF21]
|
|
#define NR43 cpu->memory[0xFF22]
|
|
#define NR44 cpu->memory[0xFF23]
|
|
|
|
#define AUDIO_OFF ((NR52 & 0x80) == 0)
|
|
#define VOLUME_LEFT ((NR50 & 0x70 )>> 4 )
|
|
#define VOLUME_RIGHT (NR50 & 0x7 )
|
|
|
|
|
|
#define CHANNEL_1_ON (NR52 & 0x1)
|
|
#define CHANNEL_1_PERIOD_CLOCK (((NR14 & 0x7) << 8) | NR13)
|
|
#define CHANNEL_1_WAVE ((NR11 & 0xC0) >> 6)
|
|
#define CHANNEL_1_LENGTH_ENABLED (NR14 & 0x40)
|
|
#define CHANNEL_1_ENVELOP_DIR (NR12 & 0x8)
|
|
#define CHANNEL_1_SWEEP_PACE ((NR11 & 0x70) >> 4)
|
|
#define CHANNEL_1_SWEEP_DIR ((NR11 & 0x08) >> 3)
|
|
#define CHANNEL_1_SWEEP_STEP (NR11 & 0x07)
|
|
|
|
#define CHANNEL_1_LEFT_ACTIVE (NR51 & 0x10 )
|
|
#define CHANNEL_1_RIGHT_ACTIVE (NR51 & 0x1 )
|
|
|
|
#define CHANNEL_2_ON (NR52 & 0x2)
|
|
#define CHANNEL_2_PERIOD_CLOCK (((NR24 & 0x7) << 8) | NR23)
|
|
#define CHANNEL_2_WAVE ((NR21 & 0xC0) >> 6)
|
|
#define CHANNEL_2_LENGTH_ENABLED (NR24 & 0x40)
|
|
#define CHANNEL_2_SWEEP_PACE (NR22 & 0x7)
|
|
#define CHANNEL_2_ENVELOP_DIR (NR22 & 0x8)
|
|
#define CHANNEL_2_LEFT_ACTIVE (NR51 & 0x20 )
|
|
#define CHANNEL_2_RIGHT_ACTIVE (NR51 & 0x2 )
|
|
|
|
#define CHANNEL_3_ON (NR52 & 0x4)
|
|
#define CHANNEL_3_OUTPUT_LEVEL ((NR32 >> 5) & 0x3)
|
|
#define CHANNEL_3_LENGTH_ENABLED (NR34 & 0x40)
|
|
#define CHANNEL_3_WAVE (cpu->memory + 0xFF30)
|
|
#define CHANNEL_3_PERIOD_CLOCK (((NR34 & 0x7) << 8) | NR33)
|
|
|
|
#define CHANNEL_3_LEFT_ACTIVE (NR51 & 0x40 )
|
|
#define CHANNEL_3_RIGHT_ACTIVE (NR51 & 0x4 )
|
|
|
|
#define CHANNEL_4_ON (NR52 & 0x4)
|
|
#define CHANNEL_4_LFSR (NR43 & 0x8)
|
|
#define CHANNEL_4_FREQ_MULTIPLIER ((NR43 & 0x7) << (NR43 >> 4))
|
|
#define CHANNEL_4_LENGTH_ENABLED (NR44 & 0x40)
|
|
#define CHANNEL_4_SWEEP_PACE (NR42 & 0x7)
|
|
#define CHANNEL_4_ENVELOP_DIR (NR42 & 0x8)
|
|
#define CHANNEL_4_LEFT_ACTIVE (NR51 & 0x80 )
|
|
#define CHANNEL_4_RIGHT_ACTIVE (NR51 & 0x8 )
|
|
|
|
#endif
|