int YM2203_sh_start(const struct MachineSound *msound) { int i; if (AY8910_sh_start_ym(msound)) return 1; intf = msound->sound_interface; /* Timer Handler set */ FMTimerInit(); /* stream system initialize */ for (i = 0;i < intf->num;i++) { int volume; char name[20]; sprintf(name,"%s #%d FM",sound_name(msound),i); volume = intf->mixing_level[i]>>16; /* high 16 bit */ stream[i] = stream_init(name,volume,Machine->sample_rate,i,YM2203UpdateOne/*YM2203UpdateCallback*/); } /* Initialize FM emurator */ if (YM2203Init(intf->num,intf->baseclock,Machine->sample_rate,TimerHandler,IRQHandler) == 0) { /* Ready */ return 0; } /* error */ /* stream close */ return 1; }
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 *ym2203_start(int sndindex, int clock, const void *config) { static const struct YM2203interface generic_2203 = { { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, NULL, NULL, NULL, NULL }, NULL }; const struct YM2203interface *intf = config ? config : &generic_2203; struct ym2203_info *info; int rate = clock/72; /* ??? */ info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); info->intf = intf; info->psg = ay8910_start_ym(SOUND_YM2203, sndindex, clock, &intf->ay8910_intf); if (!info->psg) return NULL; /* Timer Handler set */ info->timer[0] = timer_alloc(timer_callback_2203_0, info); info->timer[1] = timer_alloc(timer_callback_2203_1, info); /* stream system initialize */ info->stream = stream_create(0,1,rate,info,ym2203_stream_update); /* Initialize FM emurator */ info->chip = YM2203Init(info,sndindex,clock,rate,timer_handler,IRQHandler,&psgintf); state_save_register_postload(Machine, ym2203_postload, info); if (info->chip) return info; /* error */ /* stream close */ return NULL; }
C_Ym2203Chip::C_Ym2203Chip() { chip = YM2203Init(YM2203_CHIP_CLOCK, YM2203_SND_FQ); for (int i = 0; i < 0x100; i++) regs[i] = 0; Reset(); }