Esempio n. 1
0
int MDFNGBSOUND_StateAction(StateMem *sm, int load, int data_only)
{
 gb_apu_state_t gb_state;
 int ret = 1;

 //if(!load) // always save state, in case there is none to load
 {
  gb_apu.save_state(&gb_state);
 }

 SFORMAT StateRegs[] =
 {
  SFVARN(gb_state, "apu_state"),
  SFEND
 };

 if(!MDFNSS_StateAction(sm, load, data_only, StateRegs, "APU"))
  ret = 0;
 else if(load)
 {
  // TODO: set hardware mode to mode_dmg, mode_cgb, or mode_agb
  // (latter if you're running classic GB game on Game Boy Advance)
  gb_apu.reset();
  gb_apu.load_state(gb_state);
 }
 return(ret);
}
Esempio n. 2
0
uint8_t read_apu(uint16_t addr) {
#if !defined(PSP) && !defined(EMSCRIPTEN)
   return apu.read_register(cycles, addr);
#else 
   return 0x0;
#endif
}
Esempio n. 3
0
void init_apu() {
#if !defined(PSP) && !defined(EMSCRIPTEN)
    if ( SDL_Init( SDL_INIT_AUDIO ) < 0 )
    {
        atexit( SDL_Quit );
    }

  
    stereo_buf.clock_rate(CLOCK_RATE); 
    stereo_buf.set_sample_rate(SAMPLE_RATE);
    apu.treble_eq(-15.0);
    stereo_buf.bass_freq(100);
    apu.set_output( stereo_buf.center(), stereo_buf.left(), stereo_buf.right() );
    sound.start(SAMPLE_RATE, 2); 
#endif    
}
Esempio n. 4
0
uint32 MDFNGBSOUND_Read(int ts, uint32 addr)
{
	uint32 ret;

	ret = gb_apu.read_register(ts*GB_APU_OVERCLOCK, addr);

	return(ret);
}
Esempio n. 5
0
void end_frame() {
#if !defined(PSP) && !defined(EMSCRIPTEN)
	    apu.end_frame(MAX_CYCLES);
        stereo_buf.end_frame(MAX_CYCLES);
			
		if (stereo_buf.samples_avail() >= BUF_SIZE) {	
		    
            size_t count = stereo_buf.read_samples(sample_buffer, BUF_SIZE );
            sound.write(sample_buffer, count );
        }
#endif
}                           
Esempio n. 6
0
static bool RedoBuffer(uint32 rate)
{
	if(gb_buf)
	{
	 delete gb_buf;
	 gb_buf = NULL;
	}

	gb_apu.set_output(NULL, NULL, NULL);

	if(rate)
	{
	 gb_buf = new Stereo_Buffer();
	 
         gb_buf->set_sample_rate(rate, 40);
         gb_buf->clock_rate((long)(4194304 * GB_APU_OVERCLOCK * 1));

         gb_apu.set_output(gb_buf->center(), gb_buf->left(), gb_buf->right());
        }

	return(TRUE);
}
Esempio n. 7
0
int32 MDFNGBSOUND_Flush(int ts, int16 *SoundBuf, const int32 MaxSoundFrames)
{
	int32 SoundFrames = 0;

	gb_apu.end_frame(ts * GB_APU_OVERCLOCK);

	if(SoundBuf && gb_buf)
	{
	 gb_buf->end_frame(ts * GB_APU_OVERCLOCK);
	 SoundFrames = gb_buf->read_samples(SoundBuf, MaxSoundFrames * 2) / 2;
	}
	else if(gb_buf)
	 exit(1);

	return(SoundFrames);
}
Esempio n. 8
0
void write_apu(uint16_t addr, uint8_t val) {
#if !defined(PSP) && !defined(EMSCRIPTEN)
    apu.write_register(cycles, addr, val);
#endif
}
Esempio n. 9
0
void MDFNGBSOUND_Write(int ts, uint32 addr, uint8 val)
{
	//if(addr == 0xFF26)
 	// printf("%04x %02x\n", addr, val);
	gb_apu.write_register(ts * GB_APU_OVERCLOCK, addr, val);
}
Esempio n. 10
0
void MDFNGBSOUND_Reset(void)
{
	// TODO: set hardware mode to mode_dmg, mode_cgb, or mode_agb
	// (latter if you're running classic GB game on Game Boy Advance)
	gb_apu.reset();
}
Esempio n. 11
0
void MDFNGBSOUND_Init(void)
{
        gb_apu.volume(0.5);

	RedoBuffer(0);
}