static void *ym3812_start(int sndindex, int clock, const void *config) { static const struct YM3812interface dummy = { 0 }; int rate = Machine->sample_rate; struct ym3812_info *info; info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); info->intf = config ? config : &dummy; rate = clock/72; /* stream system initialize */ info->chip = YM3812Init(sndindex,clock,rate); if (!info->chip) return NULL; info->stream = stream_create(0,1,rate,info,ym3812_stream_update); /* YM3812 setup */ YM3812SetTimerHandler (info->chip, TimerHandler_3812, info); YM3812SetIRQHandler (info->chip, IRQHandler_3812, info); YM3812SetUpdateHandler(info->chip, _stream_update_3812, info); info->timer[0] = timer_alloc_ptr(timer_callback_3812_0, info); info->timer[1] = timer_alloc_ptr(timer_callback_3812_1, info); return info; }
static void *ym2203_start(int sndindex, int clock, const void *config) { static const struct YM2203interface generic_2203 = { 0 }; const struct YM2203interface *intf = config ? config : &generic_2203; struct ym2203_info *info; info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); info->intf = intf; info->psg = ay8910_start_ym(SOUND_YM2203, sndindex, clock, 3, intf->portAread, intf->portBread, intf->portAwrite, intf->portBwrite); if (!info->psg) return NULL; /* Timer Handler set */ info->timer[0] = timer_alloc_ptr(timer_callback_2203_0, info); info->timer[1] = timer_alloc_ptr(timer_callback_2203_1, info); /* stream system initialize */ info->stream = stream_create(0,1,Machine->sample_rate,info,ym2203_stream_update); /* Initialize FM emurator */ info->chip = YM2203Init(info,sndindex,clock,Machine->sample_rate,TimerHandler,IRQHandler,&psgintf); state_save_register_func_postload_ptr(ym2203_postload, info); if (info->chip) return info; /* error */ /* stream close */ return NULL; }
static void *ym2612_start(int sndindex, int clock, const void *config) { static const struct YM2612interface dummy = { 0 }; int rate = Machine->sample_rate; struct ym2612_info *info; info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); info->intf = config ? config : &dummy; /* FM init */ /* Timer Handler set */ info->timer[0] =timer_alloc_ptr(timer_callback_2612_0, info); info->timer[1] =timer_alloc_ptr(timer_callback_2612_1, info); /* stream system initialize */ info->stream = stream_create(0,2,rate,info,ym2612_stream_update); /**** initialize YM2612 ****/ info->chip = YM2612Init(info,sndindex,clock,rate,TimerHandler,IRQHandler); state_save_register_func_postload_ptr(ym2612_postload, info); if (info->chip) return info; /* error */ return NULL; }
static void *ym2610_start(int sndindex, int clock, const void *config) { static const struct YM2610interface generic_2610 = { 0 }; const struct YM2610interface *intf = config ? config : &generic_2610; int rate = Machine->sample_rate; void *pcmbufa,*pcmbufb; int pcmsizea,pcmsizeb; struct ym2610_info *info; sound_type = SOUND_YM2610; info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); info->intf = intf; info->psg = ay8910_start_ym(SOUND_YM2610, sndindex, clock, 1, NULL, NULL, NULL, NULL); if (!info->psg) return NULL; /* Timer Handler set */ info->timer[0] =timer_alloc_ptr(timer_callback_0, info); info->timer[1] =timer_alloc_ptr(timer_callback_1, info); /* stream system initialize */ info->stream = stream_create(0,2,rate,info,ym2610_stream_update); /* setup adpcm buffers */ pcmbufa = (void *)(memory_region(info->intf->pcmroma)); pcmsizea = memory_region_length(info->intf->pcmroma); pcmbufb = (void *)(memory_region(info->intf->pcmromb)); pcmsizeb = memory_region_length(info->intf->pcmromb); /**** initialize YM2610 ****/ info->chip = YM2610Init(info,sndindex,clock,rate, pcmbufa,pcmsizea,pcmbufb,pcmsizeb, TimerHandler,IRQHandler,&psgintf); state_save_register_func_postload_ptr(ym2610_postload, info); if (info->chip) return info; /* error */ return NULL; }
static void *y8950_start(int sndindex, int clock, const void *config) { static const struct Y8950interface dummy = { 0 }; int rate = Machine->sample_rate; struct y8950_info *info; info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); info->intf = config ? config : &dummy; info->index = sndindex; rate = clock/72; /* stream system initialize */ info->chip = Y8950Init(sndindex,clock,rate); if (!info->chip) return NULL; /* ADPCM ROM data */ Y8950SetDeltaTMemory(info->chip, (void *)(memory_region(info->intf->rom_region)), memory_region_length(info->intf->rom_region) ); info->stream = stream_create(0,1,rate,info,y8950_stream_update); /* port and keyboard handler */ Y8950SetPortHandler(info->chip, Y8950PortHandler_w, Y8950PortHandler_r, info); Y8950SetKeyboardHandler(info->chip, Y8950KeyboardHandler_w, Y8950KeyboardHandler_r, info); /* Y8950 setup */ Y8950SetTimerHandler (info->chip, TimerHandler_8950, info); Y8950SetIRQHandler (info->chip, IRQHandler_8950, info); Y8950SetUpdateHandler(info->chip, _stream_update_8950, info); info->timer[0] = timer_alloc_ptr(timer_callback_8950_0, info); info->timer[1] = timer_alloc_ptr(timer_callback_8950_1, info); return info; }
static void *msm5205_start(int sndindex, int clock, const void *config) { struct MSM5205Voice *voice; voice = auto_malloc(sizeof(*voice)); memset(voice, 0, sizeof(*voice)); sndintrf_register_token(voice); /* save a global pointer to our interface */ voice->intf = config; voice->index = sndindex; voice->clock = clock; /* compute the difference tables */ ComputeTables (voice); /* stream system initialize */ voice->stream = stream_create(0,1,Machine->sample_rate,voice,MSM5205_update); voice->timer = timer_alloc_ptr(MSM5205_vclk_callback, voice); /* initialize */ msm5205_reset(voice); /* register for save states */ state_save_register_item("msm5205", sndindex, voice->clock); state_save_register_item("msm5205", sndindex, voice->data); state_save_register_item("msm5205", sndindex, voice->vclk); state_save_register_item("msm5205", sndindex, voice->reset); state_save_register_item("msm5205", sndindex, voice->prescaler); state_save_register_item("msm5205", sndindex, voice->bitwidth); state_save_register_item("msm5205", sndindex, voice->signal); state_save_register_item("msm5205", sndindex, voice->step); /* success */ return voice; }