INT32 AY8910Init(INT32 chip, INT32 clock, INT32 sample_rate, read8_handler portAread, read8_handler portBread, write8_handler portAwrite, write8_handler portBwrite) { struct AY8910 *PSG = &AYPSG[chip]; #if defined FBA_DEBUG #ifdef __GNUC__ DebugSnd_AY8910Initted = 1; #endif #endif AYStreamUpdate = dummy_callback; if (chip != num) { return 1; } memset(PSG, 0, sizeof(struct AY8910)); PSG->SampleRate = sample_rate; PSG->PortAread = portAread; PSG->PortBread = portBread; PSG->PortAwrite = portAwrite; PSG->PortBwrite = portBwrite; AY8910_set_clock(chip, clock); build_mixer_table(chip); // default routes AY8910Volumes[(chip * 3) + BURN_SND_AY8910_ROUTE_1] = 1.00; AY8910Volumes[(chip * 3) + BURN_SND_AY8910_ROUTE_2] = 1.00; AY8910Volumes[(chip * 3) + BURN_SND_AY8910_ROUTE_3] = 1.00; AY8910RouteDirs[(chip * 3) + BURN_SND_AY8910_ROUTE_1] = BURN_SND_ROUTE_BOTH; AY8910RouteDirs[(chip * 3) + BURN_SND_AY8910_ROUTE_2] = BURN_SND_ROUTE_BOTH; AY8910RouteDirs[(chip * 3) + BURN_SND_AY8910_ROUTE_3] = BURN_SND_ROUTE_BOTH; AY8910Reset(chip); num++; return 0; }
static int AY8910_init(const char *chip_name,int chip, int clock,int volume,int sample_rate, mem_read_handler portAread,mem_read_handler portBread, mem_write_handler portAwrite,mem_write_handler portBwrite) { int i; struct AY8910 *PSG = &AYPSG[chip]; char buf[3][40]; const char *name[3]; int vol[3]; // causes crashes with YM2610 games - overflow? // if (options.use_filter) // sample_rate = clock/8; memset(PSG,0,sizeof(struct AY8910)); PSG->SampleRate = sample_rate; PSG->PortAread = portAread; PSG->PortBread = portBread; PSG->PortAwrite = portAwrite; PSG->PortBwrite = portBwrite; for (i = 0;i < 3;i++) { vol[i] = volume; name[i] = buf[i]; sprintf(buf[i],"%s #%d Ch %c",chip_name,chip,'A'+i); } PSG->Channel = stream_init_multi(3,name,vol,sample_rate,chip,AY8910Update); if (PSG->Channel == -1) return 1; AY8910_set_clock(chip,clock); return 0; }
static int AY8910_init(int gcclock, int sample_rate, mem_read_handler portAread, mem_read_handler portBread, mem_write_handler portAwrite, mem_write_handler portBwrite) { struct AY8910 *PSG = &AYPSG; memset(PSG, 0, sizeof(struct AY8910)); PSG->SampleRate = sample_rate; PSG->PortAread = portAread; PSG->PortBread = portBread; PSG->PortAwrite = portAwrite; PSG->PortBwrite = portBwrite; PSG->Channel = stream_init_multi(3, 0, AY8910Update); if (PSG->Channel == -1) return 1; AY8910_set_clock(gcclock); AY8910_reset(); return 0; }