From 3c6eacc96f5ede7feec56e345e70af28ba3bed42 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Fri, 5 Dec 2008 08:00:13 +0000 Subject: Changed save state system to accept machine parameters where appropriate, and to keep all global variables hanging off the machine structure. Once again, this means all state registration call sites have been touched: - state_save_register_global* now takes a machine parameter - state_save_register_item* now takes a machine parameter - added new state_save_register_device_item* which now uses the device name and tag to generate the base name Extended the fake sound devices to have more populated fields. Modified sound cores to use tags from the devices and simplified the start function. Renumbered CPU and sound get/set info constants to align with the device constants, and shared values where they were perfectly aligned. Set the type field in the fake device_configs for CPU and sound chips to a get_info stub which calls through to the CPU and sound specific get_info functions. This means the device_get_info() functions work for CPU and sound cores, even in their fake state. Changed device information getters from device_info() to device_get_info() to match the CPU and sound macros. --- src/emu/sound/ay8910.c | 60 +++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'src/emu/sound/ay8910.c') diff --git a/src/emu/sound/ay8910.c b/src/emu/sound/ay8910.c index f7a48294b86..414b829e168 100644 --- a/src/emu/sound/ay8910.c +++ b/src/emu/sound/ay8910.c @@ -160,7 +160,7 @@ struct _ay_ym_param typedef struct _ay8910_context ay8910_context; struct _ay8910_context { - const char *tag; + const device_config *device; int streams; int ready; sound_stream *channel; @@ -450,11 +450,11 @@ static void ay8910_write_reg(ay8910_context *psg, int r, int v) if (psg->intf->portAwrite) (*psg->intf->portAwrite)(space, 0, psg->regs[AY_PORTA]); else - logerror("warning - write %02x to 8910 '%s' Port A\n",psg->regs[AY_PORTA],psg->tag); + logerror("warning - write %02x to 8910 '%s' Port A\n",psg->regs[AY_PORTA],psg->device->tag); } else { - logerror("warning: write to 8910 '%s' Port A set as input - ignored\n",psg->tag); + logerror("warning: write to 8910 '%s' Port A set as input - ignored\n",psg->device->tag); } break; case AY_PORTB: @@ -463,11 +463,11 @@ static void ay8910_write_reg(ay8910_context *psg, int r, int v) if (psg->intf->portBwrite) (*psg->intf->portBwrite)(space, 0, psg->regs[AY_PORTB]); else - logerror("warning - write %02x to 8910 '%s' Port B\n",psg->regs[AY_PORTB],psg->tag); + logerror("warning - write %02x to 8910 '%s' Port B\n",psg->regs[AY_PORTB],psg->device->tag); } else { - logerror("warning: write to 8910 '%s' Port B set as input - ignored\n",psg->tag); + logerror("warning: write to 8910 '%s' Port B set as input - ignored\n",psg->device->tag); } break; } @@ -628,27 +628,27 @@ static void build_mixer_table(ay8910_context *psg) build_3D_table(psg->intf->res_load[0], psg->par, psg->par_env, normalize, 3, psg->zero_is_off, psg->vol3d_table); } -static void ay8910_statesave(ay8910_context *psg, const char *tag) +static void ay8910_statesave(ay8910_context *psg, const device_config *device) { - state_save_register_item("AY8910", tag, 0, psg->register_latch); - state_save_register_item_array("AY8910", tag, 0, psg->regs); - state_save_register_item("AY8910", tag, 0, psg->last_enable); + state_save_register_device_item(device, 0, psg->register_latch); + state_save_register_device_item_array(device, 0, psg->regs); + state_save_register_device_item(device, 0, psg->last_enable); - state_save_register_item_array("AY8910", tag, 0, psg->count); - state_save_register_item("AY8910", tag, 0, psg->count_noise); - state_save_register_item("AY8910", tag, 0, psg->count_env); + state_save_register_device_item_array(device, 0, psg->count); + state_save_register_device_item(device, 0, psg->count_noise); + state_save_register_device_item(device, 0, psg->count_env); - state_save_register_item("AY8910", tag, 0, psg->env_volume); + state_save_register_device_item(device, 0, psg->env_volume); - state_save_register_item_array("AY8910", tag, 0, psg->output); - state_save_register_item("AY8910", tag, 0, psg->output_noise); + state_save_register_device_item_array(device, 0, psg->output); + state_save_register_device_item(device, 0, psg->output_noise); - state_save_register_item("AY8910", tag, 0, psg->env_step); - state_save_register_item("AY8910", tag, 0, psg->hold); - state_save_register_item("AY8910", tag, 0, psg->alternate); - state_save_register_item("AY8910", tag, 0, psg->attack); - state_save_register_item("AY8910", tag, 0, psg->holding); - state_save_register_item("AY8910", tag, 0, psg->rng); + state_save_register_device_item(device, 0, psg->env_step); + state_save_register_device_item(device, 0, psg->hold); + state_save_register_device_item(device, 0, psg->alternate); + state_save_register_device_item(device, 0, psg->attack); + state_save_register_device_item(device, 0, psg->holding); + state_save_register_device_item(device, 0, psg->rng); } /************************************* @@ -659,13 +659,13 @@ static void ay8910_statesave(ay8910_context *psg, const char *tag) * *************************************/ -void *ay8910_start_ym(sound_type chip_type, const char *tag, int clock, const ay8910_interface *intf) +void *ay8910_start_ym(sound_type chip_type, const device_config *device, int clock, const ay8910_interface *intf) { ay8910_context *info; info = auto_malloc(sizeof(*info)); memset(info, 0, sizeof(*info)); - info->tag = tag; + info->device = device; info->intf = intf; if ((info->intf->flags & AY8910_SINGLE_OUTPUT) != 0) { @@ -709,7 +709,7 @@ void *ay8910_start_ym(sound_type chip_type, const char *tag, int clock, const ay info->channel = stream_create(0,info->streams,clock / 8 ,info,ay8910_update); ay8910_set_clock_ym(info,clock); - ay8910_statesave(info, tag); + ay8910_statesave(info, device); return info; } @@ -792,7 +792,7 @@ int ay8910_read_ym(void *chip) { case AY_PORTA: if ((psg->regs[AY_ENABLE] & 0x40) != 0) - logerror("warning: read from 8910 '%s' Port A set as output\n",psg->tag); + logerror("warning: read from 8910 '%s' Port A set as output\n",psg->device->tag); /* even if the port is set as output, we still need to return the external data. Some games, like kidniki, need this to work. @@ -800,15 +800,15 @@ int ay8910_read_ym(void *chip) if (psg->intf->portAread) psg->regs[AY_PORTA] = (*psg->intf->portAread)(space, 0); else - logerror("PC %04x: warning - read 8910 '%s' Port A\n",cpu_get_pc(Machine->activecpu),psg->tag); + logerror("PC %04x: warning - read 8910 '%s' Port A\n",cpu_get_pc(Machine->activecpu),psg->device->tag); break; case AY_PORTB: if ((psg->regs[AY_ENABLE] & 0x80) != 0) - logerror("warning: read from 8910 '%s' Port B set as output\n",psg->tag); + logerror("warning: read from 8910 '%s' Port B set as output\n",psg->device->tag); if (psg->intf->portBread) psg->regs[AY_PORTB] = (*psg->intf->portBread)(space, 0); else - logerror("PC %04x: warning - read 8910 '%s' Port B\n",cpu_get_pc(Machine->activecpu),psg->tag); + logerror("PC %04x: warning - read 8910 '%s' Port B\n",cpu_get_pc(Machine->activecpu),psg->device->tag); break; } return psg->regs[r]; @@ -829,7 +829,7 @@ static SND_START( ay8910 ) NULL, NULL, NULL, NULL }; const ay8910_interface *intf = (config ? config : &generic_ay8910); - return ay8910_start_ym(SOUND_AY8910, tag, clock, intf); + return ay8910_start_ym(SOUND_AY8910, device, clock, intf); } static SND_START( ym2149 ) @@ -841,7 +841,7 @@ static SND_START( ym2149 ) NULL, NULL, NULL, NULL }; const ay8910_interface *intf = (config ? config : &generic_ay8910); - return ay8910_start_ym(SOUND_YM2149, tag, clock, intf); + return ay8910_start_ym(SOUND_YM2149, device, clock, intf); } static SND_STOP( ay8910 ) -- cgit v1.2.3-70-g09d2