From 00ac825a67f65f61b816b95efab472b919435dfb Mon Sep 17 00:00:00 2001 From: Couriersud Date: Wed, 12 Nov 2008 22:12:44 +0000 Subject: [PATCH] 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? --- src/emu/sound/disc_inp.c | 48 +++++++++++++++++++++++++++++++++++----- src/emu/sound/discrete.c | 2 +- src/emu/sound/discrete.h | 12 +++++++++- 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/emu/sound/disc_inp.c b/src/emu/sound/disc_inp.c index 3e7278b0573..91126dbc86c 100644 --- a/src/emu/sound/disc_inp.c +++ b/src/emu/sound/disc_inp.c @@ -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); +} /************************************************************************ * diff --git a/src/emu/sound/discrete.c b/src/emu/sound/discrete.c index 37dee6aac13..edc6ab99900 100644 --- a/src/emu/sound/discrete.c +++ b/src/emu/sound/discrete.c @@ -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; diff --git a/src/emu/sound/discrete.h b/src/emu/sound/discrete.h index edecdac48e5..7fe7bfeb70f 100644 --- a/src/emu/sound/discrete.h +++ b/src/emu/sound/discrete.h @@ -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__ */