add upd7756_device

This commit is contained in:
Michaël Banaan Ananas 2012-09-09 15:19:43 +00:00
parent c21b74d779
commit 043d7775a5
3 changed files with 47 additions and 7 deletions

View File

@ -149,6 +149,9 @@ struct _upd7759_state
device_t *device;
sound_stream *channel; /* stream channel for playback */
/* chip configuration */
UINT8 sample_offset_shift; /* header sample address shift (access data > 0xffff) */
/* internal clock to output sample rate mapping */
UINT32 pos; /* current output sample position */
UINT32 step; /* step value per output sample */
@ -325,8 +328,8 @@ static void advance_state(upd7759_state *chip)
/* Address MSB state: latch the MSB of the sample address and issue a request for the fourth byte */
/* The expected response will be the LSB of the sample address */
case STATE_ADDR_MSB:
chip->offset = (chip->rom ? chip->rom[chip->req_sample * 2 + 5] : chip->fifo_in) << 9;
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: offset_hi = %02X, requesting offset_lo\n", chip->offset >> 9);
chip->offset = (chip->rom ? chip->rom[chip->req_sample * 2 + 5] : chip->fifo_in) << (8 + chip->sample_offset_shift);
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: offset_hi = %02X, requesting offset_lo\n", chip->offset >> (8 + chip->sample_offset_shift));
chip->drq = 1;
/* 44 cycles later, we will latch this value and request another byte */
@ -337,8 +340,8 @@ static void advance_state(upd7759_state *chip)
/* Address LSB state: latch the LSB of the sample address and issue a request for the fifth byte */
/* The expected response will be just a dummy */
case STATE_ADDR_LSB:
chip->offset |= (chip->rom ? chip->rom[chip->req_sample * 2 + 6] : chip->fifo_in) << 1;
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: offset_lo = %02X, requesting dummy 2\n", (chip->offset >> 1) & 0xff);
chip->offset |= (chip->rom ? chip->rom[chip->req_sample * 2 + 6] : chip->fifo_in) << chip->sample_offset_shift;
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: offset_lo = %02X, requesting dummy 2\n", (chip->offset >> chip->sample_offset_shift) & 0xff);
chip->drq = 1;
/* 36 cycles later, we will latch this value and request another byte */
@ -640,6 +643,9 @@ static DEVICE_START( upd7759 )
chip->device = device;
/* chip configuration */
chip->sample_offset_shift = (device->type() == UPD7759) ? 1 : 0;
/* allocate a stream channel */
chip->channel = device->machine().sound().stream_alloc(*device, 0, 1, device->clock()/4, chip, upd7759_update);
@ -752,6 +758,12 @@ upd7759_device::upd7759_device(const machine_config &mconfig, const char *tag, d
{
m_token = global_alloc_array_clear(UINT8, sizeof(upd7759_state));
}
upd7759_device::upd7759_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, type, name, tag, owner, clock),
device_sound_interface(mconfig, *this)
{
m_token = global_alloc_array_clear(UINT8, sizeof(upd7759_state));
}
//-------------------------------------------------
// device_config_complete - perform any
@ -792,3 +804,19 @@ void upd7759_device::sound_stream_update(sound_stream &stream, stream_sample_t *
}
const device_type UPD7756 = &device_creator<upd7756_device>;
upd7756_device::upd7756_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: upd7759_device(mconfig, UPD7756, "UPD7756", tag, owner, clock)
{
}
//-------------------------------------------------
// sound_stream_update - handle a stream update
//-------------------------------------------------
void upd7756_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{
// should never get here
fatalerror("sound_stream_update called; not applicable to legacy sound devices\n");
}

View File

@ -30,6 +30,7 @@ class upd7759_device : public device_t,
{
public:
upd7759_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
upd7759_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
~upd7759_device() { global_free(m_token); }
// access to legacy token
@ -49,5 +50,16 @@ private:
extern const device_type UPD7759;
class upd7756_device : public upd7759_device
{
public:
upd7756_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
};
extern const device_type UPD7756;
#endif /* __UPD7759_H__ */

View File

@ -335,8 +335,8 @@ static MACHINE_CONFIG_START( homerun, homerun_state )
MCFG_SOUND_CONFIG(ym2203_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("d7756c", UPD7759, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ADD("d7756c", UPD7756, UPD7759_STANDARD_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( ganjaja, homerun )
@ -400,4 +400,4 @@ ROM_END
GAME( 1988, homerun, 0, homerun, homerun, driver_device, 0, ROT0, "Jaleco", "Moero Pro Yakyuu Homerun", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1988, dynashot, 0, homerun, dynashot, driver_device, 0, ROT0, "Jaleco", "Dynamic Shooting", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1990, ganjaja, 0, ganjaja, ganjaja, driver_device, 0, ROT0, "Jaleco", "Ganbare Jajamaru Saisho wa Goo / Ganbare Jajamaru Hop Step & Jump", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1990, ganjaja, 0, ganjaja, ganjaja, driver_device, 0, ROT0, "Jaleco", "Ganbare Jajamaru Saisho wa Goo / Ganbare Jajamaru Hop Step & Jump", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )