diff options
Diffstat (limited to 'src/mame/drivers/hnayayoi.cpp')
-rw-r--r-- | src/mame/drivers/hnayayoi.cpp | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/src/mame/drivers/hnayayoi.cpp b/src/mame/drivers/hnayayoi.cpp index d80111e02ad..12bc4ec803e 100644 --- a/src/mame/drivers/hnayayoi.cpp +++ b/src/mame/drivers/hnayayoi.cpp @@ -44,6 +44,8 @@ TODO: #include "cpu/z80/z80.h" #include "sound/2203intf.h" #include "sound/msm5205.h" +#include "machine/74259.h" +#include "machine/clock.h" #include "machine/nvram.h" #include "screen.h" #include "speaker.h" @@ -81,19 +83,25 @@ WRITE8_MEMBER(hnayayoi_state::adpcm_data_w) m_msm->data_w(data); } -WRITE8_MEMBER(hnayayoi_state::adpcm_vclk_w) + +WRITE_LINE_MEMBER(hnayayoi_state::coin_counter_w) { - m_msm->vclk_w(data & 1); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(hnayayoi_state::adpcm_reset_w) + +WRITE_LINE_MEMBER(hnayayoi_state::nmi_enable_w) { - m_msm->reset_w(data & 1); + m_nmi_enable = state; + if (!state) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } -WRITE8_MEMBER(hnayayoi_state::adpcm_reset_inv_w) + +WRITE_LINE_MEMBER(hnayayoi_state::nmi_clock_w) { - m_msm->reset_w(~data & 1); + if (m_nmi_enable) + m_maincpu->set_input_line(INPUT_LINE_NMI, state); } @@ -113,8 +121,7 @@ static ADDRESS_MAP_START( hnayayoi_io_map, AS_IO, 8, hnayayoi_state ) // AM_RANGE(0x09, 0x09) AM_WRITENOP // CRT Controller AM_RANGE(0x0a, 0x0a) AM_WRITE(dynax_blitter_rev1_start_w) AM_RANGE(0x0c, 0x0c) AM_WRITE(dynax_blitter_rev1_clear_w) - AM_RANGE(0x23, 0x23) AM_WRITE(adpcm_vclk_w) - AM_RANGE(0x24, 0x24) AM_WRITE(adpcm_reset_w) + AM_RANGE(0x20, 0x27) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x40, 0x40) AM_WRITE(keyboard_w) AM_RANGE(0x41, 0x41) AM_READ(keyboard_0_r) AM_RANGE(0x42, 0x42) AM_READ(keyboard_1_r) @@ -135,8 +142,7 @@ static ADDRESS_MAP_START( hnfubuki_map, AS_PROGRAM, 8, hnayayoi_state ) // AM_RANGE(0xff09, 0xff09) AM_WRITENOP // CRT Controller AM_RANGE(0xff0a, 0xff0a) AM_WRITE(dynax_blitter_rev1_start_w) AM_RANGE(0xff0c, 0xff0c) AM_WRITE(dynax_blitter_rev1_clear_w) - AM_RANGE(0xff23, 0xff23) AM_WRITE(adpcm_vclk_w) - AM_RANGE(0xff24, 0xff24) AM_WRITE(adpcm_reset_inv_w) + AM_RANGE(0xff20, 0xff27) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0xff40, 0xff40) AM_WRITE(keyboard_w) AM_RANGE(0xff41, 0xff41) AM_READ(keyboard_0_r) AM_RANGE(0xff42, 0xff42) AM_READ(keyboard_1_r) @@ -165,8 +171,7 @@ static ADDRESS_MAP_START( untoucha_io_map, AS_IO, 8, hnayayoi_state ) AM_RANGE(0x1a, 0x1f) AM_WRITE(dynax_blitter_rev1_param_w) AM_RANGE(0x20, 0x20) AM_WRITE(dynax_blitter_rev1_clear_w) AM_RANGE(0x28, 0x28) AM_WRITE(dynax_blitter_rev1_start_w) - AM_RANGE(0x31, 0x31) AM_WRITE(adpcm_vclk_w) - AM_RANGE(0x32, 0x32) AM_WRITE(adpcm_reset_inv_w) + AM_RANGE(0x30, 0x37) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x50, 0x50) AM_DEVWRITE("ymsnd", ym2203_device, write_port_w) AM_RANGE(0x51, 0x51) AM_DEVREAD("ymsnd", ym2203_device, read_port_r) // AM_RANGE(0x52, 0x52) AM_WRITENOP // CRT Controller @@ -519,13 +524,11 @@ void hnayayoi_state::machine_start() save_item(NAME(m_blit_dest)); save_item(NAME(m_blit_src)); save_item(NAME(m_keyb)); + save_item(NAME(m_nmi_enable)); } void hnayayoi_state::machine_reset() { - /* start with the MSM5205 reset */ - m_msm->reset_w(1); - m_palbank = 0; m_blit_layer = 0; m_blit_dest = 0; @@ -541,11 +544,18 @@ static MACHINE_CONFIG_START( hnayayoi ) MCFG_CPU_PROGRAM_MAP(hnayayoi_map) MCFG_CPU_IO_MAP(hnayayoi_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", hnayayoi_state, irq0_line_hold) - MCFG_CPU_PERIODIC_INT_DRIVER(hnayayoi_state, nmi_line_pulse, 8000) + MCFG_DEVICE_ADD("nmiclock", CLOCK, 8000) + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(hnayayoi_state, nmi_clock_w)) MCFG_NVRAM_ADD_0FILL("nvram") + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(hnayayoi_state, coin_counter_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) MCFG_DEVCB_INVERT + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -577,6 +587,10 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( hnfubuki, hnayayoi ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(hnfubuki_map) + MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_IO) + + MCFG_DEVICE_MODIFY("mainlatch") // D5 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi ) @@ -584,6 +598,12 @@ static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi ) MCFG_CPU_PROGRAM_MAP(untoucha_map) MCFG_CPU_IO_MAP(untoucha_io_map) + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ? + MCFG_VIDEO_START_OVERRIDE(hnayayoi_state,untoucha) MACHINE_CONFIG_END |