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; }
int YM3812_sh_start(const struct MachineSound *msound) { int i; int rate = Machine->sample_rate; intf_3812 = msound->sound_interface; if( intf_3812->num > MAX_3812 ) return 1; if (options.use_filter) rate = intf_3812->baseclock/72; /* Timer state clear */ memset(Timer_3812,0,sizeof(Timer_3812)); /* stream system initialize */ if ( YM3812Init(intf_3812->num,intf_3812->baseclock,rate) != 0) return 1; for (i = 0;i < intf_3812->num;i++) { /* stream setup */ char name[40]; int vol = intf_3812->mixing_level[i]; /* emulator create */ /* stream setup */ sprintf(name,"%s #%d",sound_name(msound),i); stream_3812[i] = stream_init(name,vol,rate,i,YM3812UpdateOne); /* YM3812 setup */ YM3812SetTimerHandler (i, TimerHandler_3812, i*2); YM3812SetIRQHandler (i, IRQHandler_3812, i); YM3812SetUpdateHandler(i, stream_update, stream_3812[i]); Timer_3812[i*2+0] = timer_alloc(timer_callback_3812); Timer_3812[i*2+1] = timer_alloc(timer_callback_3812); } return 0; }