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;
};
READ8_HANDLER(discrete_sound_r)
UINT8 discrete_sound_n_r(void *chip, offs_t offset)
{
discrete_info *info = sndti_token(SOUND_DISCRETE, 0);
discrete_info *info = chip;
node_description *node = discrete_find_node(info, offset);
UINT8 data = 0;
@ -57,9 +56,29 @@ READ8_HANDLER(discrete_sound_r)
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);
/* 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);
/* 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;

View File

@ -4290,7 +4290,17 @@ extern discrete_info *discrete_current_context;
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);
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__ */