diff options
Diffstat (limited to 'src/mame/drivers/m72.cpp')
-rw-r--r-- | src/mame/drivers/m72.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp index f1c3cb2619e..4c122bbc944 100644 --- a/src/mame/drivers/m72.cpp +++ b/src/mame/drivers/m72.cpp @@ -192,7 +192,9 @@ other supported games as well. #include "cpu/nec/nec.h" #include "cpu/nec/v25.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "machine/irem_cpu.h" +#include "machine/rstbuf.h" #include "sound/ym2151.h" #include "sound/volt_reg.h" #include "speaker.h" @@ -982,7 +984,7 @@ ADDRESS_MAP_START(m72_state::m72_portmap) 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_DEVWRITE8("m72", m72_audio_device, sound_command_w, 0x00ff) + AM_RANGE(0x00, 0x01) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x02, 0x03) AM_WRITE8(port02_w, 0x00ff) /* coin counters, reset sound cpu, other stuff? */ AM_RANGE(0x04, 0x05) AM_WRITE(dmaon_w) AM_RANGE(0x06, 0x07) AM_WRITE(irq_line_w) @@ -998,7 +1000,7 @@ ADDRESS_MAP_START(m72_state::m84_portmap) 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_DEVWRITE8("m72", m72_audio_device, sound_command_w, 0x00ff) + AM_RANGE(0x00, 0x01) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x02, 0x03) AM_WRITE8(rtype2_port02_w, 0x00ff) AM_RANGE(0x40, 0x43) AM_DEVREADWRITE8("upd71059c", pic8259_device, read, write, 0x00ff) AM_RANGE(0x80, 0x81) AM_WRITE(scrolly1_w) @@ -1011,7 +1013,7 @@ ADDRESS_MAP_START(m72_state::m84_v33_portmap) 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_DEVWRITE8("m72", m72_audio_device, sound_command_w, 0x00ff) + AM_RANGE(0x00, 0x01) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x02, 0x03) AM_WRITE8(rtype2_port02_w, 0x00ff) AM_RANGE(0x80, 0x81) AM_WRITE(scrolly1_w) AM_RANGE(0x82, 0x83) AM_WRITE(scrollx1_w) @@ -1026,7 +1028,7 @@ ADDRESS_MAP_START(m72_state::poundfor_portmap) AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") AM_RANGE(0x08, 0x0f) AM_DEVREAD8("upd4701l", upd4701_device, read_xy, 0x00ff) AM_RANGE(0x08, 0x0f) AM_DEVREAD8("upd4701h", upd4701_device, read_xy, 0xff00) - AM_RANGE(0x00, 0x01) AM_DEVWRITE8("m72", m72_audio_device, sound_command_w, 0x00ff) + AM_RANGE(0x00, 0x01) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x02, 0x03) AM_WRITE8(poundfor_port02_w, 0x00ff) AM_RANGE(0x40, 0x43) AM_DEVREADWRITE8("upd71059c", pic8259_device, read, write, 0x00ff) AM_RANGE(0x80, 0x81) AM_WRITE(scrolly1_w) @@ -1039,7 +1041,7 @@ ADDRESS_MAP_START(m72_state::m82_portmap) 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_DEVWRITE8("m72", m72_audio_device, sound_command_w, 0x00ff) + AM_RANGE(0x00, 0x01) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x02, 0x03) AM_WRITE8(rtype2_port02_w, 0x00ff) AM_RANGE(0x40, 0x43) AM_DEVREADWRITE8("upd71059c", pic8259_device, read, write, 0x00ff) AM_RANGE(0x80, 0x81) AM_WRITE(scrolly1_w) @@ -1056,7 +1058,7 @@ ADDRESS_MAP_START(m72_state::m81_portmap) 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_DEVWRITE8("m72", m72_audio_device, sound_command_w, 0x00ff) + AM_RANGE(0x00, 0x01) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) AM_RANGE(0x02, 0x03) AM_WRITE8(rtype2_port02_w, 0x00ff) /* coin counters, reset sound cpu, other stuff? */ AM_RANGE(0x04, 0x05) AM_WRITE(dmaon_w) AM_RANGE(0x06, 0x07) AM_WRITE(irq_line_w) @@ -1082,15 +1084,14 @@ ADDRESS_MAP_START(m72_state::rtype_sound_portmap) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x02, 0x02) AM_DEVREAD("soundlatch", generic_latch_8_device, read) - 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) + AM_RANGE(0x06, 0x06) AM_DEVWRITE("soundlatch", generic_latch_8_device, acknowledge_w) ADDRESS_MAP_END ADDRESS_MAP_START(m72_state::sound_portmap) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) AM_RANGE(0x02, 0x02) AM_DEVREAD("soundlatch", generic_latch_8_device, read) - AM_RANGE(0x06, 0x06) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x06, 0x06) AM_DEVWRITE("soundlatch", generic_latch_8_device, acknowledge_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 @@ -1101,7 +1102,7 @@ ADDRESS_MAP_START(m72_state::rtype2_sound_portmap) AM_RANGE(0x80, 0x80) AM_DEVREAD("soundlatch", generic_latch_8_device, read) 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(0x83, 0x83) AM_DEVWRITE("soundlatch", generic_latch_8_device, acknowledge_w) AM_RANGE(0x84, 0x84) AM_DEVREAD("m72", m72_audio_device, sample_r) // AM_RANGE(0x87, 0x87) AM_WRITENOP /* ??? */ ADDRESS_MAP_END @@ -1110,8 +1111,7 @@ ADDRESS_MAP_START(m72_state::poundfor_sound_portmap) ADDRESS_MAP_GLOBAL_MASK(0xff) 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_DEVREAD("soundlatch", generic_latch_8_device, read) - AM_RANGE(0x42, 0x42) AM_DEVWRITE("m72", m72_audio_device, sound_irq_ack_w) + AM_RANGE(0x42, 0x42) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, acknowledge_w) ADDRESS_MAP_END ADDRESS_MAP_START(m72_state::mcu_io_map) @@ -1844,11 +1844,19 @@ MACHINE_CONFIG_START(m72_state::m72_audio_chips) MCFG_SPEAKER_STANDARD_MONO("speaker") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundirq", rst_neg_buffer_device, rst18_w)) + MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true) + + MCFG_DEVICE_ADD("soundirq", RST_NEG_BUFFER, 0) + MCFG_RST_BUFFER_INT_CALLBACK(INPUTLINE("soundcpu", 0)) + + MCFG_CPU_MODIFY("soundcpu") + MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("soundirq", rst_neg_buffer_device, inta_cb) MCFG_SOUND_ADD("m72", IREM_M72_AUDIO, 0) MCFG_YM2151_ADD("ymsnd", SOUND_CLOCK) - MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("m72", m72_audio_device, ym2151_irq_handler)) + MCFG_YM2151_IRQ_HANDLER(DEVWRITELINE("soundirq", rst_neg_buffer_device, rst28_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) MCFG_SOUND_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.2) // unknown DAC @@ -1908,6 +1916,7 @@ MACHINE_CONFIG_START(m72_state::rtype) MCFG_CPU_MODIFY("soundcpu") MCFG_CPU_IO_MAP(rtype_sound_portmap) + MCFG_DEVICE_REMOVE("m72") MCFG_DEVICE_REMOVE("dac") MCFG_DEVICE_REMOVE("vref") MACHINE_CONFIG_END |