Modernized the m72 audio device. [Osso]

This commit is contained in:
Scott Stone 2013-07-18 18:41:17 +00:00
parent 12d8c005a7
commit acf5377cee
11 changed files with 294 additions and 329 deletions

View File

@ -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<m72_audio_device *>(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>("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<driver_device>();
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<driver_device>();
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::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_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<driver_device>();
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<driver_device>();
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");
}

View File

@ -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;

View File

@ -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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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)

View File

@ -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<m72_ym2151_irq_handler>))
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)

View File

@ -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<m72_ym2151_irq_handler>))
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)

View File

@ -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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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<m72_ym2151_irq_handler>))
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)

View File

@ -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<UINT16> m_spriteram;
required_shared_ptr<UINT16> m_videoram1;
@ -27,6 +29,12 @@ public:
optional_shared_ptr<UINT16> m_majtitle_rowscrollram;
optional_shared_ptr<UINT16> m_spriteram2;
optional_shared_ptr<UINT8> m_soundram;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
optional_device<cpu_device> m_mcu;
optional_device<dac_device> m_dac;
optional_device<m72_audio_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<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
optional_device<cpu_device> m_mcu;
optional_device<dac_device> m_dac;
};

View File

@ -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<UINT16> m_video_data;
optional_shared_ptr<UINT16> m_spriteram;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
optional_device<m72_audio_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<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
};

View File

@ -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<UINT8> m_paletteram;
required_shared_ptr<UINT8> m_videoram;
required_device<cpu_device> m_maincpu;
required_device<m72_audio_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<cpu_device> m_maincpu;
};

View File

@ -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<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_videoram;
required_device<cpu_device> m_maincpu;
required_device<m72_audio_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<cpu_device> m_maincpu;
};

View File

@ -1,5 +1,4 @@
#include "emu.h"
#include "audio/m72.h"
#include "includes/m72.h"
/***************************************************************************