Fix state save in discrete sound

* sndindex now considered as well in state save
* expose discrete_sound_n_r(void *chip, ...) to enable accessing multiple discrete sound cores

Curt Coder, is this sufficient?
This commit is contained in:
Couriersud 2008-11-12 22:12:44 +00:00
parent 7745124dc6
commit 00ac825a67
3 changed files with 55 additions and 7 deletions

View File

@ -30,10 +30,9 @@ struct dss_adjustment_context
double scale; double scale;
}; };
UINT8 discrete_sound_n_r(void *chip, offs_t offset)
READ8_HANDLER(discrete_sound_r)
{ {
discrete_info *info = sndti_token(SOUND_DISCRETE, 0); discrete_info *info = chip;
node_description *node = discrete_find_node(info, offset); node_description *node = discrete_find_node(info, offset);
UINT8 data = 0; UINT8 data = 0;
@ -57,9 +56,29 @@ READ8_HANDLER(discrete_sound_r)
return data; return data;
} }
WRITE8_HANDLER(discrete_sound_w) READ8_HANDLER(discrete_sound_r)
{ {
discrete_info *info = sndti_token(SOUND_DISCRETE, 0); return discrete_sound_n_r(sndti_token(SOUND_DISCRETE, 0), offset);
}
READ8_HANDLER(discrete_sound_1_r)
{
return discrete_sound_n_r(sndti_token(SOUND_DISCRETE, 1), offset);
}
READ8_HANDLER(discrete_sound_2_r)
{
return discrete_sound_n_r(sndti_token(SOUND_DISCRETE, 2), offset);
}
READ8_HANDLER(discrete_sound_3_r)
{
return discrete_sound_n_r(sndti_token(SOUND_DISCRETE, 3), offset);
}
void discrete_sound_n_w(void *chip, offs_t offset, UINT8 data)
{
discrete_info *info = chip;
node_description *node = discrete_find_node(info, offset); node_description *node = discrete_find_node(info, offset);
/* Update the node input value if it's a proper input node */ /* Update the node input value if it's a proper input node */
@ -99,6 +118,25 @@ WRITE8_HANDLER(discrete_sound_w)
} }
} }
WRITE8_HANDLER(discrete_sound_w)
{
discrete_sound_n_w(sndti_token(SOUND_DISCRETE, 0), offset, data);
}
WRITE8_HANDLER(discrete_sound_1_w)
{
discrete_sound_n_w(sndti_token(SOUND_DISCRETE, 1), offset, data);
}
WRITE8_HANDLER(discrete_sound_2_w)
{
discrete_sound_n_w(sndti_token(SOUND_DISCRETE, 2), offset, data);
}
WRITE8_HANDLER(discrete_sound_3_w)
{
discrete_sound_n_w(sndti_token(SOUND_DISCRETE, 3), offset, data);
}
/************************************************************************ /************************************************************************
* *

View File

@ -414,7 +414,7 @@ static void discrete_reset(void *chip)
(*node->module.step)(node); (*node->module.step)(node);
/* and register save state */ /* and register save state */
state_save_register_item_array("discrete", nodenum, node->output); state_save_register_item_array("discrete", nodenum | (info->sndindex << 16 ), node->output);
} }
discrete_current_context = NULL; discrete_current_context = NULL;

View File

@ -4290,7 +4290,17 @@ extern discrete_info *discrete_current_context;
node_description *discrete_find_node(void *chip, int node); node_description *discrete_find_node(void *chip, int node);
void discrete_sound_n_w(void *chip, offs_t offset, UINT8 data);
UINT8 discrete_sound_n_r(void *chip, offs_t offset);
WRITE8_HANDLER(discrete_sound_w); WRITE8_HANDLER(discrete_sound_w);
READ8_HANDLER( discrete_sound_r); WRITE8_HANDLER(discrete_sound_1_w);
WRITE8_HANDLER(discrete_sound_2_w);
WRITE8_HANDLER(discrete_sound_3_w);
READ8_HANDLER(discrete_sound_r);
READ8_HANDLER(discrete_sound_1_r);
READ8_HANDLER(discrete_sound_2_r);
READ8_HANDLER(discrete_sound_3_r);
#endif /* __DISCRETE_H__ */ #endif /* __DISCRETE_H__ */