int Y8950_sh_start(const struct MachineSound *msound) { int i; int rate = Machine->sample_rate; intf_8950 = msound->sound_interface; if( intf_8950->num > MAX_8950 ) return 1; if (1) //options.use_filter) // sure, use oversample rate = intf_8950->baseclock/72; /* Timer state clear */ memset(Timer_8950,0,sizeof(Timer_8950)); /* stream system initialize */ if ( Y8950Init(intf_8950->num,intf_8950->baseclock,rate) != 0) return 1; for (i = 0;i < intf_8950->num;i++) { /* stream setup */ char name[40]; int vol = intf_8950->mixing_level[i]; /* stream setup */ sprintf(name,"%s #%d",sound_name(msound),i); /* ADPCM ROM data */ Y8950SetDeltaTMemory(i, (void *)(memory_region(intf_8950->rom_region[i])), memory_region_length(intf_8950->rom_region[i]) ); stream_8950[i] = stream_init(name,vol,rate,i,Y8950UpdateOne); /* port and keyboard handler */ Y8950SetPortHandler(i, Y8950PortHandler_w, Y8950PortHandler_r, i); Y8950SetKeyboardHandler(i, Y8950KeyboardHandler_w, Y8950KeyboardHandler_r, i); /* Y8950 setup */ Y8950SetTimerHandler (i, TimerHandler_8950, i*2); Y8950SetIRQHandler (i, IRQHandler_8950, i); Y8950SetUpdateHandler(i, stream_update, stream_8950[i]); Timer_8950[i*2+0] = timer_alloc(timer_callback_8950); Timer_8950[i*2+1] = timer_alloc(timer_callback_8950); } return 0; }
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; }