diff --git a/src/mame/audio/m72.c b/src/mame/audio/m72.c index 2f235e05c4d..6fb6731d6de 100644 --- a/src/mame/audio/m72.c +++ b/src/mame/audio/m72.c @@ -41,226 +41,19 @@ Shisensho II 1993 Rev 3.34 M81 Yes ***************************************************************************/ -#include "emu.h" -#include "sound/dac.h" #include "m72.h" -#include "devlegcy.h" -/* - - The sound CPU runs in interrup mode 0. IRQ is shared by two sources: the - YM2151 (bit 4 of the vector), and the main CPU (bit 5). - Since the vector can be changed from different contexts (the YM2151 timer - callback, the main CPU context, and the sound CPU context), it's important - to accurately arbitrate the changes to avoid out-of-order execution. We do - that by handling all vector changes in a single timer callback. - -*/ - - -enum -{ - VECTOR_INIT, - YM2151_ASSERT, - YM2151_CLEAR, - Z80_ASSERT, - Z80_CLEAR -}; - -struct m72_audio_state -{ - UINT8 irqvector; - UINT32 sample_addr; - UINT8 *samples; - UINT32 samples_size; - address_space *space; - dac_device *dac; -}; - -INLINE m72_audio_state *get_safe_token(device_t *device) -{ - assert(device != NULL); - assert(device->type() == M72); - - return (m72_audio_state *)downcast(device)->token(); -} - - -static TIMER_CALLBACK( setvector_callback ) -{ - m72_audio_state *state = (m72_audio_state *)ptr; - - switch(param) - { - case VECTOR_INIT: - state->irqvector = 0xff; - break; - - case YM2151_ASSERT: - state->irqvector &= 0xef; - break; - - case YM2151_CLEAR: - state->irqvector |= 0x10; - break; - - case Z80_ASSERT: - state->irqvector &= 0xdf; - break; - - case Z80_CLEAR: - state->irqvector |= 0x20; - break; - } - - if (state->irqvector == 0) - logerror("You didn't call m72_init_sound()\n"); - - machine.device("soundcpu")->execute().set_input_line_and_vector(0, (state->irqvector == 0xff) ? CLEAR_LINE : ASSERT_LINE, state->irqvector); -} - -static DEVICE_START( m72_audio ) -{ - m72_audio_state *state = get_safe_token(device); - - state->samples = device->machine().root_device().memregion("samples")->base(); - state->samples_size = device->machine().root_device().memregion("samples")->bytes(); - state->space = &device->machine().device("soundcpu")->memory().space(AS_IO); - state->dac = device->machine().device("dac"); - - device->save_item(NAME(state->irqvector)); - device->save_item(NAME(state->sample_addr)); -} - -static DEVICE_RESET( m72_audio ) -{ - m72_audio_state *state = get_safe_token(device); - - setvector_callback(device->machine(), state, VECTOR_INIT); -} - -WRITE_LINE_DEVICE_HANDLER(m72_ym2151_irq_handler) -{ - device_t *audio = device->machine().device("m72"); - m72_audio_state *audstate = get_safe_token(audio); - - device->machine().scheduler().synchronize(FUNC(setvector_callback), state ? YM2151_ASSERT : YM2151_CLEAR, audstate); -} - -WRITE16_DEVICE_HANDLER( m72_sound_command_w ) -{ - if (ACCESSING_BITS_0_7) - { - m72_audio_state *state = get_safe_token(device); - driver_device *drvstate = space.machine().driver_data(); - drvstate->soundlatch_byte_w(*state->space, offset, data); - space.machine().scheduler().synchronize(FUNC(setvector_callback), Z80_ASSERT, state); - } -} - -WRITE8_DEVICE_HANDLER( m72_sound_command_byte_w ) -{ - m72_audio_state *state = get_safe_token(device); - driver_device *drvstate = space.machine().driver_data(); - drvstate->soundlatch_byte_w(*state->space, offset, data); - space.machine().scheduler().synchronize(FUNC(setvector_callback), Z80_ASSERT, state); -} - -WRITE8_DEVICE_HANDLER( m72_sound_irq_ack_w ) -{ - m72_audio_state *state = get_safe_token(device); - - space.machine().scheduler().synchronize(FUNC(setvector_callback), Z80_CLEAR, state); -} - - - -void m72_set_sample_start(device_t *device, int start) -{ - m72_audio_state *state = get_safe_token(device); - - state->sample_addr = start; -} - -WRITE8_DEVICE_HANDLER( vigilant_sample_addr_w ) -{ - m72_audio_state *state = get_safe_token(device); - - if (offset == 1) - state->sample_addr = (state->sample_addr & 0x00ff) | ((data << 8) & 0xff00); - else - state->sample_addr = (state->sample_addr & 0xff00) | ((data << 0) & 0x00ff); -} - -WRITE8_DEVICE_HANDLER( shisen_sample_addr_w ) -{ - m72_audio_state *state = get_safe_token(device); - - state->sample_addr >>= 2; - - if (offset == 1) - state->sample_addr = (state->sample_addr & 0x00ff) | ((data << 8) & 0xff00); - else - state->sample_addr = (state->sample_addr & 0xff00) | ((data << 0) & 0x00ff); - - state->sample_addr <<= 2; -} - -WRITE8_DEVICE_HANDLER( rtype2_sample_addr_w ) -{ - m72_audio_state *state = get_safe_token(device); - - state->sample_addr >>= 5; - - if (offset == 1) - state->sample_addr = (state->sample_addr & 0x00ff) | ((data << 8) & 0xff00); - else - state->sample_addr = (state->sample_addr & 0xff00) | ((data << 0) & 0x00ff); - - state->sample_addr <<= 5; -} - -WRITE8_DEVICE_HANDLER( poundfor_sample_addr_w ) -{ - m72_audio_state *state = get_safe_token(device); - - /* poundfor writes both sample start and sample END - a first for Irem... - we don't handle the end written here, 00 marks the sample end as usual. */ - if (offset > 1) return; - - state->sample_addr >>= 4; - - if (offset == 1) - state->sample_addr = (state->sample_addr & 0x00ff) | ((data << 8) & 0xff00); - else - state->sample_addr = (state->sample_addr & 0xff00) | ((data << 0) & 0x00ff); - - state->sample_addr <<= 4; -} - -READ8_DEVICE_HANDLER( m72_sample_r ) -{ - m72_audio_state *state = get_safe_token(device); - - return state->samples[state->sample_addr]; -} - -WRITE8_DEVICE_HANDLER( m72_sample_w ) -{ - m72_audio_state *state = get_safe_token(device); - - state->dac->write_signed8(data); - state->sample_addr = (state->sample_addr + 1) & (state->samples_size - 1); -} - const device_type M72 = &device_creator; m72_audio_device::m72_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, M72, "M72 Custom", tag, owner, clock, "m72_audio", __FILE__), - device_sound_interface(mconfig, *this) + device_sound_interface(mconfig, *this), + m_irqvector(0), + m_sample_addr(0), + m_samples(NULL), + m_samples_size(0) { - m_token = global_alloc_clear(m72_audio_state); } //------------------------------------------------- @@ -279,7 +72,13 @@ void m72_audio_device::device_config_complete() void m72_audio_device::device_start() { - DEVICE_START_NAME( m72_audio )(this); + m_samples = machine().root_device().memregion("samples")->base(); + m_samples_size = machine().root_device().memregion("samples")->bytes(); + m_space = &machine().device("soundcpu")->memory().space(AS_IO); + m_dac = machine().device("dac"); + + save_item(NAME(m_irqvector)); + save_item(NAME(m_sample_addr)); } //------------------------------------------------- @@ -288,15 +87,151 @@ void m72_audio_device::device_start() void m72_audio_device::device_reset() { - DEVICE_RESET_NAME( m72_audio )(this); + m_irqvector = 0xff; } + +/* + + The sound CPU runs in interrup mode 0. IRQ is shared by two sources: the + YM2151 (bit 4 of the vector), and the main CPU (bit 5). + Since the vector can be changed from different contexts (the YM2151 timer + callback, the main CPU context, and the sound CPU context), it's important + to accurately arbitrate the changes to avoid out-of-order execution. We do + that by handling all vector changes in a single timer callback. + +*/ + +TIMER_CALLBACK_MEMBER( m72_audio_device::setvector_callback ) +{ + switch(param) + { + case VECTOR_INIT: + m_irqvector = 0xff; + break; + + case YM2151_ASSERT: + m_irqvector &= 0xef; + break; + + case YM2151_CLEAR: + m_irqvector |= 0x10; + break; + + case Z80_ASSERT: + m_irqvector &= 0xdf; + break; + + case Z80_CLEAR: + m_irqvector |= 0x20; + break; + } + + if (m_irqvector == 0) + logerror("You didn't call m72_init_sound()\n"); + + machine().device("soundcpu")->execute().set_input_line_and_vector(0, (m_irqvector == 0xff) ? CLEAR_LINE : ASSERT_LINE, m_irqvector); +} + + +WRITE_LINE_MEMBER(m72_audio_device::ym2151_irq_handler) +{ + machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_audio_device::setvector_callback), this), state ? YM2151_ASSERT : YM2151_CLEAR); +} + +WRITE16_MEMBER( m72_audio_device::sound_command_w ) +{ + if (ACCESSING_BITS_0_7) + { + driver_device *drvstate = space.machine().driver_data(); + drvstate->soundlatch_byte_w(*m_space, offset, data); + space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_audio_device::setvector_callback), this), Z80_ASSERT); + } +} + +WRITE8_MEMBER( m72_audio_device::sound_command_byte_w ) +{ + driver_device *drvstate = space.machine().driver_data(); + drvstate->soundlatch_byte_w(*m_space, offset, data); + space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_audio_device::setvector_callback), this), Z80_ASSERT); +} + +WRITE8_MEMBER( m72_audio_device::sound_irq_ack_w ) +{ + space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_audio_device::setvector_callback), this), Z80_CLEAR); +} + + + +void m72_audio_device::set_sample_start(int start) +{ + m_sample_addr = start; +} + +WRITE8_MEMBER( m72_audio_device::vigilant_sample_addr_w ) +{ + if (offset == 1) + m_sample_addr = (m_sample_addr & 0x00ff) | ((data << 8) & 0xff00); + else + m_sample_addr = (m_sample_addr & 0xff00) | ((data << 0) & 0x00ff); +} + +WRITE8_MEMBER( m72_audio_device::shisen_sample_addr_w ) +{ + m_sample_addr >>= 2; + + if (offset == 1) + m_sample_addr = (m_sample_addr & 0x00ff) | ((data << 8) & 0xff00); + else + m_sample_addr = (m_sample_addr & 0xff00) | ((data << 0) & 0x00ff); + + m_sample_addr <<= 2; +} + +WRITE8_MEMBER( m72_audio_device::rtype2_sample_addr_w ) +{ + m_sample_addr >>= 5; + + if (offset == 1) + m_sample_addr = (m_sample_addr & 0x00ff) | ((data << 8) & 0xff00); + else + m_sample_addr = (m_sample_addr & 0xff00) | ((data << 0) & 0x00ff); + + m_sample_addr <<= 5; +} + +WRITE8_MEMBER( m72_audio_device::poundfor_sample_addr_w ) +{ + /* poundfor writes both sample start and sample END - a first for Irem... + we don't handle the end written here, 00 marks the sample end as usual. */ + if (offset > 1) return; + + m_sample_addr >>= 4; + + if (offset == 1) + m_sample_addr = (m_sample_addr & 0x00ff) | ((data << 8) & 0xff00); + else + m_sample_addr = (m_sample_addr & 0xff00) | ((data << 0) & 0x00ff); + + m_sample_addr <<= 4; +} + +READ8_MEMBER( m72_audio_device::sample_r ) +{ + return m_samples[m_sample_addr]; +} + +WRITE8_MEMBER( m72_audio_device::sample_w ) +{ + m_dac->write_signed8(data); + m_sample_addr = (m_sample_addr + 1) & (m_samples_size - 1); +} + + //------------------------------------------------- // sound_stream_update - handle a stream update //------------------------------------------------- void m72_audio_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"); } diff --git a/src/mame/audio/m72.h b/src/mame/audio/m72.h index d04640fe3ec..4fedb6a5d67 100644 --- a/src/mame/audio/m72.h +++ b/src/mame/audio/m72.h @@ -4,29 +4,39 @@ ****************************************************************************/ -WRITE_LINE_DEVICE_HANDLER(m72_ym2151_irq_handler); -DECLARE_WRITE8_DEVICE_HANDLER( m72_sound_command_byte_w ); -DECLARE_WRITE16_DEVICE_HANDLER( m72_sound_command_w ); -DECLARE_WRITE8_DEVICE_HANDLER( m72_sound_irq_ack_w ); -DECLARE_READ8_DEVICE_HANDLER( m72_sample_r ); -DECLARE_WRITE8_DEVICE_HANDLER( m72_sample_w ); - -/* the port goes to different address bits depending on the game */ -void m72_set_sample_start(device_t *device, int start); -DECLARE_WRITE8_DEVICE_HANDLER( vigilant_sample_addr_w ); -DECLARE_WRITE8_DEVICE_HANDLER( shisen_sample_addr_w ); -DECLARE_WRITE8_DEVICE_HANDLER( rtype2_sample_addr_w ); -DECLARE_WRITE8_DEVICE_HANDLER( poundfor_sample_addr_w ); +#include "emu.h" +#include "sound/dac.h" class m72_audio_device : public device_t, public device_sound_interface { public: m72_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~m72_audio_device() { global_free(m_token); } + ~m72_audio_device() {} + + enum + { + VECTOR_INIT, + YM2151_ASSERT, + YM2151_CLEAR, + Z80_ASSERT, + Z80_CLEAR + }; + + WRITE_LINE_MEMBER( ym2151_irq_handler ); + DECLARE_WRITE8_MEMBER( sound_command_byte_w ); + DECLARE_WRITE16_MEMBER( sound_command_w ); + DECLARE_WRITE8_MEMBER(sound_irq_ack_w ); + DECLARE_READ8_MEMBER( sample_r ); + DECLARE_WRITE8_MEMBER( sample_w ); + + /* the port goes to different address bits depending on the game */ + void set_sample_start( int start ); + DECLARE_WRITE8_MEMBER( vigilant_sample_addr_w ); + DECLARE_WRITE8_MEMBER( shisen_sample_addr_w ); + DECLARE_WRITE8_MEMBER( rtype2_sample_addr_w ); + DECLARE_WRITE8_MEMBER( poundfor_sample_addr_w ); - // access to legacy token - void *token() const { assert(m_token != NULL); return m_token; } protected: // device-level overrides virtual void device_config_complete(); @@ -35,9 +45,17 @@ protected: // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); + private: // internal state - void *m_token; + UINT8 m_irqvector; + UINT32 m_sample_addr; + UINT8 *m_samples; + UINT32 m_samples_size; + address_space *m_space; + dac_device *m_dac; + + TIMER_CALLBACK_MEMBER( setvector_callback ); }; extern const device_type M72; diff --git a/src/mame/drivers/m72.c b/src/mame/drivers/m72.c index 7fd0b13a448..982a5284f65 100644 --- a/src/mame/drivers/m72.c +++ b/src/mame/drivers/m72.c @@ -85,8 +85,6 @@ other supported games as well. #include "cpu/z80/z80.h" #include "cpu/nec/nec.h" #include "machine/irem_cpu.h" -#include "audio/m72.h" -#include "sound/dac.h" #include "sound/2151intf.h" #include "includes/iremipt.h" #include "includes/m72.h" @@ -104,7 +102,6 @@ other supported games as well. MACHINE_START_MEMBER(m72_state,m72) { - m_audio = machine().device("m72"); m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m72_state::m72_scanline_interrupt),this)); save_item(NAME(m_mcu_sample_addr)); @@ -433,46 +430,46 @@ int m72_state::find_sample(int num) INTERRUPT_GEN_MEMBER(m72_state::fake_nmi) { address_space &space = generic_space(); - int sample = m72_sample_r(m_audio,space,0); + int sample = m_audio->sample_r(space,0); if (sample) - m72_sample_w(m_audio,space,0,sample); + m_audio->sample_w(space,0,sample); } WRITE16_MEMBER(m72_state::bchopper_sample_trigger_w) { static const int a[6] = { 0x0000, 0x0010, 0x2510, 0x6510, 0x8510, 0x9310 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 6) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 6) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::nspirit_sample_trigger_w) { static const int a[9] = { 0x0000, 0x0020, 0x2020, 0, 0x5720, 0, 0x7b60, 0x9b60, 0xc360 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 9) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 9) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::imgfight_sample_trigger_w) { static const int a[7] = { 0x0000, 0x0020, 0x44e0, 0x98a0, 0xc820, 0xf7a0, 0x108c0 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 7) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 7) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::loht_sample_trigger_w) { static const int a[7] = { 0x0000, 0x0020, 0, 0x2c40, 0x4320, 0x7120, 0xb200 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 7) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 7) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::xmultiplm72_sample_trigger_w) { static const int a[3] = { 0x0000, 0x0020, 0x1a40 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 3) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 3) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::dbreedm72_sample_trigger_w) { static const int a[9] = { 0x00000, 0x00020, 0x02c40, 0x08160, 0x0c8c0, 0x0ffe0, 0x13000, 0x15820, 0x15f40 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 9) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 9) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::airduel_sample_trigger_w) @@ -480,7 +477,7 @@ WRITE16_MEMBER(m72_state::airduel_sample_trigger_w) static const int a[16] = { 0x00000, 0x00020, 0x03ec0, 0x05640, 0x06dc0, 0x083a0, 0x0c000, 0x0eb60, 0x112e0, 0x13dc0, 0x16520, 0x16d60, 0x18ae0, 0x1a5a0, 0x1bf00, 0x1c340 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 16) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 16) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::dkgenm72_sample_trigger_w) @@ -491,7 +488,7 @@ WRITE16_MEMBER(m72_state::dkgenm72_sample_trigger_w) 0x10fa0, 0x10fc0, 0x10fe0, 0x11f40, 0x12b20, 0x130a0, 0x13c60, 0x14740, 0x153c0, 0x197e0, 0x1af40, 0x1c080 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 28) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 28) m_audio->set_sample_start(a[data & 0xff]); } WRITE16_MEMBER(m72_state::gallop_sample_trigger_w) @@ -502,7 +499,7 @@ WRITE16_MEMBER(m72_state::gallop_sample_trigger_w) 0x10200, 0x10220, 0x10240, 0x11380, 0x12760, 0x12780, 0x127a0, 0x13c40, 0x140a0, 0x16760, 0x17e40, 0x18ee0, 0x19f60, 0x1bbc0, 0x1cee0 }; - if (ACCESSING_BITS_0_7 && (data & 0xff) < 31) m72_set_sample_start(m_audio, a[data & 0xff]); + if (ACCESSING_BITS_0_7 && (data & 0xff) < 31) m_audio->set_sample_start(a[data & 0xff]); } @@ -948,7 +945,7 @@ static ADDRESS_MAP_START( m72_portmap, AS_IO, 16, m72_state ) AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0") AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x02, 0x03) AM_WRITE(m72_port02_w) /* coin counters, reset sound cpu, other stuff? */ AM_RANGE(0x04, 0x05) AM_WRITE(m72_dmaon_w) AM_RANGE(0x06, 0x07) AM_WRITE(m72_irq_line_w) @@ -964,7 +961,7 @@ static ADDRESS_MAP_START( rtype2_portmap, AS_IO, 16, m72_state ) AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0") AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w) AM_RANGE(0x40, 0x43) AM_WRITENOP /* Interrupt controller, only written to at bootup */ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w) @@ -977,7 +974,7 @@ static ADDRESS_MAP_START( poundfor_portmap, AS_IO, 16, m72_state ) AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") AM_RANGE(0x08, 0x0f) AM_READ(poundfor_trackball_r) - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w) AM_RANGE(0x40, 0x43) AM_WRITENOP /* Interrupt controller, only written to at bootup */ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w) @@ -990,7 +987,7 @@ static ADDRESS_MAP_START( majtitle_portmap, AS_IO, 16, m72_state ) AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0") AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w) AM_RANGE(0x40, 0x43) AM_WRITENOP /* Interrupt controller, only written to at bootup */ AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w) @@ -1004,7 +1001,7 @@ static ADDRESS_MAP_START( hharry_portmap, AS_IO, 16, m72_state ) AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0") AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w) /* coin counters, reset sound cpu, other stuff? */ AM_RANGE(0x04, 0x05) AM_WRITE(m72_dmaon_w) AM_RANGE(0x06, 0x07) AM_WRITE(m72_irq_line_w) @@ -1019,7 +1016,7 @@ static ADDRESS_MAP_START( kengo_portmap, AS_IO, 16, m72_state ) AM_RANGE(0x00, 0x01) AM_READ_PORT("IN0") AM_RANGE(0x02, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x02, 0x03) AM_WRITE(rtype2_port02_w) AM_RANGE(0x80, 0x81) AM_WRITE(m72_scrolly1_w) AM_RANGE(0x82, 0x83) AM_WRITE(m72_scrollx1_w) @@ -1042,36 +1039,36 @@ static ADDRESS_MAP_START( rtype_sound_portmap, AS_IO, 8, m72_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x02, 0x02) AM_READ(soundlatch_byte_r) - AM_RANGE(0x06, 0x06) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) + AM_RANGE(0x06, 0x06) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, m72_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x02, 0x02) AM_READ(soundlatch_byte_r) - AM_RANGE(0x06, 0x06) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) - AM_RANGE(0x82, 0x82) AM_DEVWRITE_LEGACY("m72", m72_sample_w) - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) + AM_RANGE(0x06, 0x06) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x82, 0x82) AM_DEVWRITE("m72", m72_audio_device, sample_w) + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) ADDRESS_MAP_END static ADDRESS_MAP_START( rtype2_sound_portmap, AS_IO, 8, m72_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x80, 0x80) AM_READ(soundlatch_byte_r) - AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("m72", rtype2_sample_addr_w) - AM_RANGE(0x82, 0x82) AM_DEVWRITE_LEGACY("m72", m72_sample_w) - AM_RANGE(0x83, 0x83) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) + AM_RANGE(0x80, 0x81) AM_DEVWRITE("m72", m72_audio_device, rtype2_sample_addr_w) + AM_RANGE(0x82, 0x82) AM_DEVWRITE("m72", m72_audio_device, sample_w) + AM_RANGE(0x83, 0x83) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) // AM_RANGE(0x87, 0x87) AM_WRITENOP /* ??? */ ADDRESS_MAP_END static ADDRESS_MAP_START( poundfor_sound_portmap, AS_IO, 8, m72_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x10, 0x13) AM_DEVWRITE_LEGACY("m72", poundfor_sample_addr_w) + AM_RANGE(0x10, 0x13) AM_DEVWRITE("m72", m72_audio_device, poundfor_sample_addr_w) AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x42, 0x42) AM_READ(soundlatch_byte_r) - AM_RANGE(0x42, 0x42) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) + AM_RANGE(0x42, 0x42) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) ADDRESS_MAP_END static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, m72_state ) @@ -1818,7 +1815,7 @@ static MACHINE_CONFIG_START( m72_base, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -1873,7 +1870,7 @@ static MACHINE_CONFIG_START( rtype, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_CONFIG_END @@ -1910,7 +1907,7 @@ static MACHINE_CONFIG_START( xmultipl, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -1951,7 +1948,7 @@ static MACHINE_CONFIG_START( xmultiplm72, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -1992,7 +1989,7 @@ static MACHINE_CONFIG_START( dbreed, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2033,7 +2030,7 @@ static MACHINE_CONFIG_START( dbreedm72, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2074,7 +2071,7 @@ static MACHINE_CONFIG_START( rtype2, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2115,7 +2112,7 @@ static MACHINE_CONFIG_START( majtitle, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2156,7 +2153,7 @@ static MACHINE_CONFIG_START( hharry, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2197,7 +2194,7 @@ static MACHINE_CONFIG_START( hharryu, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2238,7 +2235,7 @@ static MACHINE_CONFIG_START( dkgenm72, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2279,7 +2276,7 @@ static MACHINE_CONFIG_START( poundfor, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2320,7 +2317,7 @@ static MACHINE_CONFIG_START( cosmccop, m72_state ) MCFG_SOUND_ADD("m72", M72, 0); MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) diff --git a/src/mame/drivers/m90.c b/src/mame/drivers/m90.c index 79dc1b9ae10..a7912f23c85 100644 --- a/src/mame/drivers/m90.c +++ b/src/mame/drivers/m90.c @@ -21,7 +21,6 @@ #include "cpu/nec/nec.h" #include "includes/iremipt.h" #include "machine/irem_cpu.h" -#include "audio/m72.h" #include "sound/dac.h" #include "sound/2151intf.h" #include "includes/m90.h" @@ -31,7 +30,6 @@ void m90_state::machine_start() { - m_audio = machine().device("m72"); } /***************************************************************************/ @@ -99,7 +97,7 @@ static ADDRESS_MAP_START( bomblord_main_cpu_map, AS_PROGRAM, 16, m90_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( m90_main_cpu_io_map, AS_IO, 16, m90_state ) - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", m72_sound_command_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, sound_command_w) AM_RANGE(0x00, 0x01) AM_READ_PORT("P1_P2") AM_RANGE(0x02, 0x03) AM_WRITE(m90_coincounter_w) AM_RANGE(0x02, 0x03) AM_READ_PORT("SYSTEM") @@ -131,10 +129,10 @@ static ADDRESS_MAP_START( m90_sound_cpu_io_map, AS_IO, 8, m90_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x80, 0x80) AM_READ(soundlatch_byte_r) - AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("m72", rtype2_sample_addr_w) - AM_RANGE(0x82, 0x82) AM_DEVWRITE_LEGACY("m72", m72_sample_w) - AM_RANGE(0x83, 0x83) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) + AM_RANGE(0x80, 0x81) AM_DEVWRITE("m72", m72_audio_device, rtype2_sample_addr_w) + AM_RANGE(0x82, 0x82) AM_DEVWRITE("m72", m72_audio_device, sample_w) + AM_RANGE(0x83, 0x83) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) ADDRESS_MAP_END static ADDRESS_MAP_START( dynablsb_sound_cpu_io_map, AS_IO, 8, m90_state ) @@ -146,10 +144,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( m99_sound_cpu_io_map, AS_IO, 8, m90_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_DEVWRITE_LEGACY("m72", poundfor_sample_addr_w) + AM_RANGE(0x00, 0x01) AM_DEVWRITE("m72", m72_audio_device, poundfor_sample_addr_w) AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x42, 0x42) AM_READ(soundlatch_byte_r) - AM_RANGE(0x42, 0x42) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) + AM_RANGE(0x42, 0x42) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) ADDRESS_MAP_END /*****************************************************************************/ @@ -669,17 +667,17 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(m90_state::fake_nmi) { address_space &space = machine().firstcpu->space(AS_PROGRAM); - int sample = m72_sample_r(m_audio,space,0); + int sample = m_audio->sample_r(space,0); if (sample) - m72_sample_w(m_audio,space,0,sample); + m_audio->sample_w(space,0,sample); } INTERRUPT_GEN_MEMBER(m90_state::bomblord_fake_nmi) { address_space &space = machine().firstcpu->space(AS_PROGRAM); - int sample = m72_sample_r(m_audio,space,0); + int sample = m_audio->sample_r(space,0); if (sample != 0x80) - m72_sample_w(m_audio,space,0,sample); + m_audio->sample_w(space,0,sample); } INTERRUPT_GEN_MEMBER(m90_state::m90_interrupt) @@ -731,7 +729,7 @@ static MACHINE_CONFIG_START( m90, m90_state ) MCFG_SOUND_ADD("m72", M72, 0) MCFG_YM2151_ADD("ymsnd", XTAL_3_579545MHz) /* verified on pcb */ - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "mono", 0.15) MCFG_SOUND_ROUTE(1, "mono", 0.15) diff --git a/src/mame/drivers/shisen.c b/src/mame/drivers/shisen.c index 017ad90b54b..dd19580e24e 100644 --- a/src/mame/drivers/shisen.c +++ b/src/mame/drivers/shisen.c @@ -8,7 +8,6 @@ driver by Nicola Salmoria #include "emu.h" #include "cpu/z80/z80.h" -#include "audio/m72.h" #include "sound/dac.h" #include "sound/2151intf.h" #include "includes/shisen.h" @@ -53,7 +52,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( shisen_io_map, AS_IO, 8, shisen_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_READWRITE(sichuan2_dsw1_r, sichuan2_coin_w) - AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW2") AM_DEVWRITE_LEGACY("m72", m72_sound_command_byte_w) + AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW2") AM_DEVWRITE("m72", m72_audio_device, sound_command_byte_w) AM_RANGE(0x02, 0x02) AM_READ_PORT("P1") AM_WRITE(sichuan2_bankswitch_w) AM_RANGE(0x03, 0x03) AM_READ_PORT("P2") AM_RANGE(0x04, 0x04) AM_READ_PORT("COIN") @@ -68,10 +67,10 @@ static ADDRESS_MAP_START( shisen_sound_io_map, AS_IO, 8, shisen_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x80, 0x80) AM_READ(soundlatch_byte_r) - AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("m72", shisen_sample_addr_w) - AM_RANGE(0x82, 0x82) AM_DEVWRITE_LEGACY("m72", m72_sample_w) - AM_RANGE(0x83, 0x83) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) + AM_RANGE(0x80, 0x81) AM_DEVWRITE("m72", m72_audio_device, shisen_sample_addr_w) + AM_RANGE(0x82, 0x82) AM_DEVWRITE("m72", m72_audio_device, sample_w) + AM_RANGE(0x83, 0x83) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) ADDRESS_MAP_END @@ -233,7 +232,7 @@ static MACHINE_CONFIG_START( shisen, shisen_state ) MCFG_SOUND_ADD("m72", M72, 0) MCFG_YM2151_ADD("ymsnd", 3579545) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.5) MCFG_SOUND_ROUTE(1, "rspeaker", 0.5) diff --git a/src/mame/drivers/vigilant.c b/src/mame/drivers/vigilant.c index 547f12d338a..f5b5e0bc673 100644 --- a/src/mame/drivers/vigilant.c +++ b/src/mame/drivers/vigilant.c @@ -16,7 +16,6 @@ Buccaneers has a 5.6888 Mhz and a 18.432 Mhz OSC #include "emu.h" #include "cpu/z80/z80.h" -#include "audio/m72.h" #include "sound/dac.h" #include "sound/2203intf.h" #include "sound/2151intf.h" @@ -72,7 +71,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( vigilant_io_map, AS_IO, 8, vigilant_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_DEVWRITE_LEGACY("m72", m72_sound_command_byte_w) /* SD */ + AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_DEVWRITE("m72", m72_audio_device, sound_command_byte_w) /* SD */ AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE(vigilant_out2_w) /* OUT2 */ AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") @@ -98,7 +97,7 @@ static ADDRESS_MAP_START( kikcubic_io_map, AS_IO, 8, vigilant_state ) AM_RANGE(0x02, 0x02) AM_READ_PORT("IN0") AM_RANGE(0x03, 0x03) AM_READ_PORT("IN1") AM_RANGE(0x04, 0x04) AM_READ_PORT("IN2") AM_WRITE(vigilant_bank_select_w) - AM_RANGE(0x06, 0x06) AM_DEVWRITE_LEGACY("m72", m72_sound_command_byte_w) + AM_RANGE(0x06, 0x06) AM_DEVWRITE("m72", m72_audio_device, sound_command_byte_w) // AM_RANGE(0x07, 0x07) AM_WRITENOP /* ?? */ ADDRESS_MAP_END @@ -110,10 +109,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, vigilant_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) - AM_RANGE(0x80, 0x81) AM_READ(soundlatch_byte_r) AM_DEVWRITE_LEGACY("m72", vigilant_sample_addr_w) /* STL / STH */ - AM_RANGE(0x82, 0x82) AM_DEVWRITE_LEGACY("m72", m72_sample_w) /* COUNT UP */ - AM_RANGE(0x83, 0x83) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) /* IRQ clear */ - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) /* S ROM C */ + AM_RANGE(0x80, 0x81) AM_READ(soundlatch_byte_r) AM_DEVWRITE("m72", m72_audio_device, vigilant_sample_addr_w) /* STL / STH */ + AM_RANGE(0x82, 0x82) AM_DEVWRITE("m72", m72_audio_device, sample_w) /* COUNT UP */ + AM_RANGE(0x83, 0x83) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) /* IRQ clear */ + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) /* S ROM C */ ADDRESS_MAP_END static ADDRESS_MAP_START( buccanrs_sound_io_map, AS_IO, 8, vigilant_state ) @@ -121,10 +120,10 @@ static ADDRESS_MAP_START( buccanrs_sound_io_map, AS_IO, 8, vigilant_state ) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ym1", ym2203_device, read, write) AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ym2", ym2203_device, read, write) AM_RANGE(0x80, 0x80) AM_READ(soundlatch_byte_r) /* SDRE */ - AM_RANGE(0x80, 0x81) AM_DEVWRITE_LEGACY("m72", vigilant_sample_addr_w) /* STL / STH */ - AM_RANGE(0x82, 0x82) AM_DEVWRITE_LEGACY("m72", m72_sample_w) /* COUNT UP */ - AM_RANGE(0x83, 0x83) AM_DEVWRITE_LEGACY("m72", m72_sound_irq_ack_w) /* IRQ clear */ - AM_RANGE(0x84, 0x84) AM_DEVREAD_LEGACY("m72", m72_sample_r) /* S ROM C */ + AM_RANGE(0x80, 0x81) AM_DEVWRITE("m72", m72_audio_device, vigilant_sample_addr_w) /* STL / STH */ + AM_RANGE(0x82, 0x82) AM_DEVWRITE("m72", m72_audio_device, sample_w) /* COUNT UP */ + AM_RANGE(0x83, 0x83) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) /* IRQ clear */ + AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) /* S ROM C */ ADDRESS_MAP_END @@ -500,7 +499,7 @@ static MACHINE_CONFIG_START( vigilant, vigilant_state ) MCFG_SOUND_ADD("m72", M72, 0) MCFG_YM2151_ADD("ymsnd", 3579645) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.55) MCFG_SOUND_ROUTE(1, "rspeaker", 0.55) @@ -540,7 +539,7 @@ static MACHINE_CONFIG_START( buccanrs, vigilant_state ) MCFG_SOUND_ADD("m72", M72, 0) MCFG_SOUND_ADD("ym1", YM2203, 18432000/6) - MCFG_YM2203_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2203_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_YM2203_AY8910_INTF(&ay8910_config) MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) MCFG_SOUND_ROUTE(0, "rspeaker", 0.35) @@ -597,7 +596,7 @@ static MACHINE_CONFIG_START( kikcubic, vigilant_state ) MCFG_SOUND_ADD("m72", M72, 0) MCFG_YM2151_ADD("ymsnd", 3579645) - MCFG_YM2151_IRQ_HANDLER(WRITELINE(driver_device, member_wrapper_line)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) MCFG_SOUND_ROUTE(0, "lspeaker", 0.55) MCFG_SOUND_ROUTE(1, "rspeaker", 0.55) diff --git a/src/mame/includes/m72.h b/src/mame/includes/m72.h index a07e950474d..c9ca41adf83 100644 --- a/src/mame/includes/m72.h +++ b/src/mame/includes/m72.h @@ -3,6 +3,7 @@ Irem M72 hardware *************************************************************************/ +#include "audio/m72.h" #include "sound/dac.h" class m72_state : public driver_device @@ -19,7 +20,8 @@ public: m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_mcu(*this, "mcu"), - m_dac(*this, "dac") { } + m_dac(*this, "dac"), + m_audio(*this, "m72") { } required_shared_ptr m_spriteram; required_shared_ptr m_videoram1; @@ -27,6 +29,12 @@ public: optional_shared_ptr m_majtitle_rowscrollram; optional_shared_ptr m_spriteram2; optional_shared_ptr m_soundram; + + required_device m_maincpu; + required_device m_soundcpu; + optional_device m_mcu; + optional_device m_dac; + optional_device m_audio; UINT16 *m_protection_ram; emu_timer *m_scanline_timer; @@ -48,7 +56,6 @@ public: INT32 m_scrolly2; INT32 m_video_off; int m_majtitle_rowscroll; - device_t *m_audio; DECLARE_WRITE16_MEMBER(m72_main_mcu_sound_w); DECLARE_WRITE16_MEMBER(m72_main_mcu_w); DECLARE_WRITE8_MEMBER(m72_mcu_data_w); @@ -137,8 +144,4 @@ public: int find_sample(int num); void copy_le(UINT16 *dest, const UINT8 *src, UINT8 bytes); void install_protection_handler(const UINT8 *code,const UINT8 *crc); - required_device m_maincpu; - required_device m_soundcpu; - optional_device m_mcu; - optional_device m_dac; }; diff --git a/src/mame/includes/m90.h b/src/mame/includes/m90.h index cb71bae9bf5..fdc0e0ed0d9 100644 --- a/src/mame/includes/m90.h +++ b/src/mame/includes/m90.h @@ -1,3 +1,5 @@ +#include "audio/m72.h" + class m90_state : public driver_device { public: @@ -6,10 +8,16 @@ public: m_video_data(*this, "video_data"), m_spriteram(*this, "spriteram"), m_maincpu(*this, "maincpu"), - m_soundcpu(*this, "soundcpu") { } + m_soundcpu(*this, "soundcpu"), + m_audio(*this, "m72") { } required_shared_ptr m_video_data; optional_shared_ptr m_spriteram; + + required_device m_maincpu; + required_device m_soundcpu; + optional_device m_audio; + UINT16 m_video_control_data[8]; tilemap_t *m_pf1_layer; tilemap_t *m_pf2_layer; @@ -17,7 +25,6 @@ public: tilemap_t *m_pf2_wide_layer; UINT8 m_last_pf1; UINT8 m_last_pf2; - device_t *m_audio; DECLARE_WRITE16_MEMBER(m90_coincounter_w); DECLARE_WRITE16_MEMBER(quizf1_bankswitch_w); DECLARE_WRITE16_MEMBER(dynablsb_sound_command_w); @@ -57,6 +64,4 @@ public: void bomblord_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); void dynablsb_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); void markdirty(tilemap_t *tmap,int page,offs_t offset); - required_device m_maincpu; - required_device m_soundcpu; }; diff --git a/src/mame/includes/shisen.h b/src/mame/includes/shisen.h index 770cb88cc9f..b8b2f273b95 100644 --- a/src/mame/includes/shisen.h +++ b/src/mame/includes/shisen.h @@ -1,3 +1,5 @@ +#include "audio/m72.h" + class shisen_state : public driver_device { public: @@ -5,12 +7,17 @@ public: : driver_device(mconfig, type, tag), m_paletteram(*this, "paletteram"), m_videoram(*this, "videoram"), - m_maincpu(*this, "maincpu") { } + m_maincpu(*this, "maincpu"), + m_audio (*this, "m72") { } - int m_gfxbank; - tilemap_t *m_bg_tilemap; required_shared_ptr m_paletteram; required_shared_ptr m_videoram; + + required_device m_maincpu; + required_device m_audio; + + int m_gfxbank; + tilemap_t *m_bg_tilemap; DECLARE_READ8_MEMBER(sichuan2_dsw1_r); DECLARE_WRITE8_MEMBER(sichuan2_coin_w); DECLARE_WRITE8_MEMBER(sichuan2_videoram_w); @@ -19,5 +26,4 @@ public: TILE_GET_INFO_MEMBER(get_bg_tile_info); virtual void video_start(); UINT32 screen_update_sichuan2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device m_maincpu; }; diff --git a/src/mame/includes/vigilant.h b/src/mame/includes/vigilant.h index 41434f1d451..f504979b06b 100644 --- a/src/mame/includes/vigilant.h +++ b/src/mame/includes/vigilant.h @@ -1,3 +1,5 @@ +#include "audio/m72.h" + class vigilant_state : public driver_device { public: @@ -5,10 +7,15 @@ public: : driver_device(mconfig, type, tag), m_spriteram(*this, "spriteram"), m_videoram(*this, "videoram"), - m_maincpu(*this, "maincpu") { } + m_maincpu(*this, "maincpu"), + m_audio(*this, "m72") { } required_shared_ptr m_spriteram; required_shared_ptr m_videoram; + + required_device m_maincpu; + required_device m_audio; + int m_horiz_scroll_low; int m_horiz_scroll_high; int m_rear_horiz_scroll_low; @@ -33,5 +40,4 @@ public: void draw_foreground(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority, int opaque ); void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); - required_device m_maincpu; }; diff --git a/src/mame/video/m72.c b/src/mame/video/m72.c index c966cb73534..746823e6fc6 100644 --- a/src/mame/video/m72.c +++ b/src/mame/video/m72.c @@ -1,5 +1,4 @@ #include "emu.h" -#include "audio/m72.h" #include "includes/m72.h" /***************************************************************************