From 74f152924be4b913c21a1a04d73f4620bcb74f6c Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 24 Jul 2017 23:01:29 -0400 Subject: trackfld.cpp, hyperspt.cpp, sbasketb.cpp: Add 74LS259 latches (nw) --- src/mame/audio/trackfld.cpp | 6 +-- src/mame/audio/trackfld.h | 12 ++--- src/mame/drivers/hyperspt.cpp | 32 +++++++++---- src/mame/drivers/sbasketb.cpp | 30 +++++++++---- src/mame/drivers/trackfld.cpp | 101 +++++++++++++++++++++++++----------------- src/mame/includes/hyperspt.h | 7 +-- src/mame/includes/sbasketb.h | 13 +++--- src/mame/includes/trackfld.h | 14 +++--- src/mame/video/hyperspt.cpp | 9 ++-- src/mame/video/sbasketb.cpp | 18 +++++--- src/mame/video/trackfld.cpp | 9 ++-- 11 files changed, 150 insertions(+), 101 deletions(-) diff --git a/src/mame/audio/trackfld.cpp b/src/mame/audio/trackfld.cpp index 598d6775a0a..5e979f97b48 100644 --- a/src/mame/audio/trackfld.cpp +++ b/src/mame/audio/trackfld.cpp @@ -121,15 +121,15 @@ WRITE8_MEMBER( trackfld_audio_device::hyperspt_sound_w ) -WRITE8_MEMBER( trackfld_audio_device::konami_sh_irqtrigger_w ) +WRITE_LINE_MEMBER(trackfld_audio_device::sh_irqtrigger_w) { - if (m_last_irq == 0 && data) + if (m_last_irq == 0 && state) { /* setting bit 0 low then high triggers IRQ on the sound CPU */ m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } - m_last_irq = data; + m_last_irq = state; } //------------------------------------------------- diff --git a/src/mame/audio/trackfld.h b/src/mame/audio/trackfld.h index c1819437b70..1b4fa3ef17e 100644 --- a/src/mame/audio/trackfld.h +++ b/src/mame/audio/trackfld.h @@ -13,12 +13,12 @@ class trackfld_audio_device : public device_t, public device_sound_interface public: trackfld_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE8_MEMBER(konami_sh_irqtrigger_w ); - DECLARE_READ8_MEMBER(trackfld_sh_timer_r ); - DECLARE_READ8_MEMBER(trackfld_speech_r ); - DECLARE_WRITE8_MEMBER(trackfld_sound_w ); - DECLARE_READ8_MEMBER(hyperspt_sh_timer_r ); - DECLARE_WRITE8_MEMBER(hyperspt_sound_w ); + DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w); + DECLARE_READ8_MEMBER(trackfld_sh_timer_r); + DECLARE_READ8_MEMBER(trackfld_speech_r); + DECLARE_WRITE8_MEMBER(trackfld_sound_w); + DECLARE_READ8_MEMBER(hyperspt_sh_timer_r); + DECLARE_WRITE8_MEMBER(hyperspt_sound_w); protected: // device-level overrides diff --git a/src/mame/drivers/hyperspt.cpp b/src/mame/drivers/hyperspt.cpp index ce9f7df21ae..b003e0794ef 100644 --- a/src/mame/drivers/hyperspt.cpp +++ b/src/mame/drivers/hyperspt.cpp @@ -17,6 +17,7 @@ Based on drivers from Juno First emulator by Chris Hardy (chrish@kcbbs.gen.nz) #include "cpu/m6800/m6800.h" #include "cpu/m6809/m6809.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/konami1.h" #include "machine/nvram.h" @@ -34,24 +35,28 @@ void hyperspt_state::machine_start() save_item(NAME(m_SN76496_latch)); } -WRITE8_MEMBER(hyperspt_state::coin_counter_w) +WRITE_LINE_MEMBER(hyperspt_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(hyperspt_state::irq_mask_w) +WRITE_LINE_MEMBER(hyperspt_state::coin_counter_2_w) { - m_irq_mask = data & 1; + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(hyperspt_state::irq_mask_w) +{ + m_irq_mask = state; + if (!m_irq_mask) + m_maincpu->set_input_line(0, CLEAR_LINE); } static ADDRESS_MAP_START( common_map, AS_PROGRAM, 8, hyperspt_state ) AM_RANGE(0x1000, 0x10bf) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x10c0, 0x10ff) AM_RAM AM_SHARE("scroll") /* Scroll amount */ AM_RANGE(0x1400, 0x1400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x1480, 0x1480) AM_WRITE(flipscreen_w) - AM_RANGE(0x1481, 0x1481) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */ - AM_RANGE(0x1483, 0x1484) AM_WRITE(coin_counter_w) - AM_RANGE(0x1487, 0x1487) AM_WRITE(irq_mask_w) /* Interrupt enable */ + AM_RANGE(0x1480, 0x1487) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x1500, 0x1500) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x1600, 0x1600) AM_READ_PORT("DSW2") AM_RANGE(0x1680, 0x1680) AM_READ_PORT("SYSTEM") @@ -280,7 +285,7 @@ GFXDECODE_END INTERRUPT_GEN_MEMBER(hyperspt_state::vblank_irq) { if(m_irq_mask) - device.execute().set_input_line(0, HOLD_LINE); + device.execute().set_input_line(0, ASSERT_LINE); } static MACHINE_CONFIG_START( hyperspt ) @@ -293,6 +298,15 @@ static MACHINE_CONFIG_START( hyperspt ) MCFG_CPU_ADD("audiocpu", Z80,XTAL_14_31818MHz/4) /* verified on pcb */ MCFG_CPU_PROGRAM_MAP(hyperspt_sound_map) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // F2 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(hyperspt_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("trackfld_audio", trackfld_audio_device, sh_irqtrigger_w)) // SOUND ON + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // END + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(hyperspt_state, coin_counter_1_w)) // COIN 1 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hyperspt_state, coin_counter_2_w)) // COIN 2 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // SA + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(hyperspt_state, irq_mask_w)) // INT + MCFG_NVRAM_ADD_0FILL("nvram") MCFG_WATCHDOG_ADD("watchdog") diff --git a/src/mame/drivers/sbasketb.cpp b/src/mame/drivers/sbasketb.cpp index c28297e2e2d..ea0c5c1ebb9 100644 --- a/src/mame/drivers/sbasketb.cpp +++ b/src/mame/drivers/sbasketb.cpp @@ -47,6 +47,7 @@ CPU/Video Board Parts: #include "cpu/m6809/m6809.h" #include "cpu/z80/z80.h" +#include "machine/74259.h" #include "machine/gen_latch.h" #include "machine/konami1.h" #include "machine/watchdog.h" @@ -61,14 +62,21 @@ WRITE8_MEMBER(sbasketb_state::sbasketb_sh_irqtrigger_w) m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); } -WRITE8_MEMBER(sbasketb_state::sbasketb_coin_counter_w) +WRITE_LINE_MEMBER(sbasketb_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data); + machine().bookkeeping().coin_counter_w(0, state); } -WRITE8_MEMBER(sbasketb_state::irq_mask_w) +WRITE_LINE_MEMBER(sbasketb_state::coin_counter_2_w) { - m_irq_mask = data & 1; + machine().bookkeeping().coin_counter_w(1, state); +} + +WRITE_LINE_MEMBER(sbasketb_state::irq_mask_w) +{ + m_irq_mask = state; + if (!m_irq_mask) + m_maincpu->set_input_line(0, CLEAR_LINE); } static ADDRESS_MAP_START( sbasketb_map, AS_PROGRAM, 8, sbasketb_state ) @@ -80,10 +88,7 @@ static ADDRESS_MAP_START( sbasketb_map, AS_PROGRAM, 8, sbasketb_state ) AM_RANGE(0x3c00, 0x3c00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x3c10, 0x3c10) AM_READNOP /* ???? */ AM_RANGE(0x3c20, 0x3c20) AM_WRITEONLY AM_SHARE("palettebank") - AM_RANGE(0x3c80, 0x3c80) AM_WRITE(sbasketb_flipscreen_w) - AM_RANGE(0x3c81, 0x3c81) AM_WRITE(irq_mask_w) - AM_RANGE(0x3c83, 0x3c84) AM_WRITE(sbasketb_coin_counter_w) - AM_RANGE(0x3c85, 0x3c85) AM_WRITEONLY AM_SHARE("spriteramsel") + AM_RANGE(0x3c80, 0x3c87) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x3d00, 0x3d00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x3d80, 0x3d80) AM_WRITE(sbasketb_sh_irqtrigger_w) AM_RANGE(0x3e00, 0x3e00) AM_READ_PORT("SYSTEM") @@ -197,6 +202,15 @@ static MACHINE_CONFIG_START( sbasketb ) MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz / 4) /* 3.5795 MHz */ MCFG_CPU_PROGRAM_MAP(sbasketb_sound_map) + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B3 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sbasketb_state, flipscreen_w)) // FLIP + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sbasketb_state, irq_mask_w)) // INTST + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // MUT - not used? + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sbasketb_state, coin_counter_1_w)) // COIN 1 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sbasketb_state, coin_counter_2_w)) // COIN 2 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sbasketb_state, spriteram_select_w)) // OBJ CHE + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // END - not used + MCFG_WATCHDOG_ADD("watchdog") /* video hardware */ diff --git a/src/mame/drivers/trackfld.cpp b/src/mame/drivers/trackfld.cpp index d50841e01a3..89f355859f2 100644 --- a/src/mame/drivers/trackfld.cpp +++ b/src/mame/drivers/trackfld.cpp @@ -189,6 +189,7 @@ MAIN BOARD: #include "cpu/z80/z80.h" #include "cpu/m6800/m6800.h" #include "cpu/m6809/m6809.h" +#include "machine/74259.h" #include "machine/konami1.h" #include "machine/nvram.h" #include "machine/watchdog.h" @@ -203,9 +204,14 @@ MAIN BOARD: #define VLM_CLOCK XTAL_3_579545MHz -WRITE8_MEMBER(trackfld_state::coin_w) +WRITE_LINE_MEMBER(trackfld_state::coin_counter_1_w) { - machine().bookkeeping().coin_counter_w(offset, data & 1); + machine().bookkeeping().coin_counter_w(0, state); +} + +WRITE_LINE_MEMBER(trackfld_state::coin_counter_2_w) +{ + machine().bookkeeping().coin_counter_w(1, state); } WRITE8_MEMBER(trackfld_state::questions_bank_w) @@ -222,20 +228,16 @@ WRITE8_MEMBER(trackfld_state::questions_bank_w) } } -WRITE8_MEMBER(trackfld_state::irq_mask_w) +WRITE_LINE_MEMBER(trackfld_state::irq_mask_w) { - m_irq_mask = data & 1; + m_irq_mask = state; + if (!m_irq_mask) + m_maincpu->set_input_line(0, CLEAR_LINE); } static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x007f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* AFE */ - AM_RANGE(0x1080, 0x1080) AM_MIRROR(0x0078) AM_WRITE(trackfld_flipscreen_w) /* FLIP */ - AM_RANGE(0x1081, 0x1081) AM_MIRROR(0x0078) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* 26 */ /* cause interrupt on audio CPU */ - AM_RANGE(0x1082, 0x1082) AM_MIRROR(0x0078) AM_WRITENOP /* 25 */ - AM_RANGE(0x1083, 0x1084) AM_MIRROR(0x0078) AM_WRITE(coin_w) /* 24, 23 */ - AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */ - AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */ - AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(irq_mask_w) /* INT */ + AM_RANGE(0x1080, 0x1087) AM_MIRROR(0x0078) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* 32 */ AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2") AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM") @@ -255,9 +257,11 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0x6000, 0xffff) AM_ROM ADDRESS_MAP_END -WRITE8_MEMBER(trackfld_state::yieartf_nmi_mask_w) +WRITE_LINE_MEMBER(trackfld_state::nmi_mask_w) { - m_yieartf_nmi_mask = data & 1; + m_nmi_mask = state; + if (!m_nmi_mask) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } READ8_MEMBER(trackfld_state::trackfld_speech_r) @@ -282,13 +286,7 @@ static ADDRESS_MAP_START( yieartf_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0x0002, 0x0002) AM_WRITE(trackfld_VLM5030_control_w) AM_RANGE(0x0003, 0x0003) AM_DEVWRITE("vlm", vlm5030_device, data_w) AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x007f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* AFE */ - AM_RANGE(0x1080, 0x1080) AM_MIRROR(0x0078) AM_WRITE(trackfld_flipscreen_w) /* FLIP */ - AM_RANGE(0x1081, 0x1081) AM_MIRROR(0x0078) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* 26 */ /* cause interrupt on audio CPU */ - AM_RANGE(0x1082, 0x1082) AM_MIRROR(0x0078) AM_WRITE(yieartf_nmi_mask_w) /* 25 */ - AM_RANGE(0x1083, 0x1084) AM_MIRROR(0x0078) AM_WRITE(coin_w) /* 24, 23 */ - AM_RANGE(0x1085, 0x1085) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.2 */ - AM_RANGE(0x1086, 0x1086) AM_MIRROR(0x0078) AM_WRITENOP /* CN3.4 */ - AM_RANGE(0x1087, 0x1087) AM_MIRROR(0x0078) AM_WRITE(irq_mask_w) /* INT */ + AM_RANGE(0x1080, 0x1087) AM_MIRROR(0x0078) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // AM_RANGE(0x1100, 0x1100) AM_MIRROR(0x007f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* 32 */ AM_RANGE(0x1200, 0x1200) AM_MIRROR(0x007f) AM_READ_PORT("DSW2") AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x007c) AM_READ_PORT("SYSTEM") @@ -312,10 +310,7 @@ static ADDRESS_MAP_START( reaktor_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM /* all usual addresses +0x8000 */ AM_RANGE(0x9000, 0x9000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x9080, 0x9080) AM_WRITE(trackfld_flipscreen_w) - AM_RANGE(0x9081, 0x9081) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */ - AM_RANGE(0x9083, 0x9084) AM_WRITE(coin_w) - AM_RANGE(0x9087, 0x9087) AM_WRITE(irq_mask_w) + AM_RANGE(0x9080, 0x9087) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x9100, 0x9100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x9200, 0x9200) AM_READ_PORT("DSW2") AM_RANGE(0x9280, 0x9280) AM_READ_PORT("SYSTEM") @@ -345,10 +340,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mastkin_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0x1000, 0x1000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x10b0, 0x10b0) AM_WRITE(trackfld_flipscreen_w) - AM_RANGE(0x10b1, 0x10b1) AM_READNOP AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) - AM_RANGE(0x10b3, 0x10b4) AM_WRITE(coin_w) // actually not used - AM_RANGE(0x10b7, 0x10b7) AM_READNOP AM_WRITE(irq_mask_w) + AM_RANGE(0x10b0, 0x10b7) AM_READNOP AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x1100, 0x1100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x1200, 0x1200) AM_READ_PORT("DSW2") AM_RANGE(0x1280, 0x1280) AM_READ_PORT("SYSTEM") @@ -372,10 +364,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( wizzquiz_map, AS_PROGRAM, 8, trackfld_state ) AM_RANGE(0x0000, 0x007f) AM_RAM AM_RANGE(0x1000, 0x1000) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w) - AM_RANGE(0x1080, 0x1080) AM_WRITE(trackfld_flipscreen_w) - AM_RANGE(0x1081, 0x1081) AM_DEVWRITE("trackfld_audio", trackfld_audio_device, konami_sh_irqtrigger_w) /* cause interrupt on audio CPU */ - AM_RANGE(0x1083, 0x1084) AM_WRITE(coin_w) - AM_RANGE(0x1087, 0x1087) AM_WRITE(irq_mask_w) + AM_RANGE(0x1080, 0x1087) AM_DEVWRITE("mainlatch", ls259_device, write_d0) AM_RANGE(0x1100, 0x1100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) AM_RANGE(0x1200, 0x1200) AM_READ_PORT("DSW2") AM_RANGE(0x1280, 0x1280) AM_READ_PORT("SYSTEM") @@ -873,6 +862,9 @@ GFXDECODE_END MACHINE_START_MEMBER(trackfld_state,trackfld) { + save_item(NAME(m_irq_mask)); + save_item(NAME(m_nmi_mask)); + /* video */ save_item(NAME(m_bg_bank)); save_item(NAME(m_sprite_bank1)); @@ -890,14 +882,14 @@ MACHINE_RESET_MEMBER(trackfld_state,trackfld) INTERRUPT_GEN_MEMBER(trackfld_state::vblank_irq) { - if(m_irq_mask) - device.execute().set_input_line(0, HOLD_LINE); + if (m_irq_mask) + device.execute().set_input_line(0, ASSERT_LINE); } INTERRUPT_GEN_MEMBER(trackfld_state::vblank_nmi) { - if(m_irq_mask) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (m_nmi_mask) + device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } static MACHINE_CONFIG_START( trackfld ) @@ -912,6 +904,17 @@ static MACHINE_CONFIG_START( trackfld ) MCFG_MACHINE_START_OVERRIDE(trackfld_state,trackfld) MCFG_MACHINE_RESET_OVERRIDE(trackfld_state,trackfld) + + MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 1D + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(trackfld_state, flipscreen_w)) // FLIP + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("trackfld_audio", trackfld_audio_device, sh_irqtrigger_w)) // 26 = SOUND ON + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // 25 = MUT? + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(trackfld_state, coin_counter_1_w)) // 24 = OUT1 + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(trackfld_state, coin_counter_2_w)) // 23 = OUT2 + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // CN3.2 + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // CN3.4 + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(trackfld_state, irq_mask_w)) // INT + MCFG_NVRAM_ADD_0FILL("nvram") MCFG_WATCHDOG_ADD("watchdog") @@ -953,8 +956,8 @@ MACHINE_CONFIG_END INTERRUPT_GEN_MEMBER(trackfld_state::yieartf_timer_irq) { - if (m_yieartf_nmi_mask) - device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (m_nmi_mask) + device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } static MACHINE_CONFIG_START( yieartf ) @@ -971,6 +974,17 @@ static MACHINE_CONFIG_START( yieartf ) MCFG_MACHINE_START_OVERRIDE(trackfld_state,trackfld) MCFG_MACHINE_RESET_OVERRIDE(trackfld_state,trackfld) + + MCFG_DEVICE_ADD("mainlatch", LS259, 0) + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(trackfld_state, flipscreen_w)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("trackfld_audio", trackfld_audio_device, sh_irqtrigger_w)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(trackfld_state, nmi_mask_w)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(trackfld_state, coin_counter_1_w)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(trackfld_state, coin_counter_2_w)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(trackfld_state, irq_mask_w)) + MCFG_NVRAM_ADD_0FILL("nvram") MCFG_WATCHDOG_ADD("watchdog") @@ -1033,11 +1047,13 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( mastkin, trackfld ) /* basic machine hardware */ - MCFG_DEVICE_REMOVE("maincpu") - - MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/6/2) /* a guess for now */ + MCFG_CPU_REPLACE("maincpu", M6809, MASTER_CLOCK/6/2) /* a guess for now */ MCFG_CPU_PROGRAM_MAP(mastkin_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", trackfld_state, vblank_irq) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // actually not used + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // actually not used MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( wizzquiz, trackfld ) @@ -1047,6 +1063,9 @@ static MACHINE_CONFIG_DERIVED( wizzquiz, trackfld ) MCFG_CPU_REPLACE("maincpu",M6800,2048000) /* 1.400 MHz ??? */ MCFG_CPU_PROGRAM_MAP(wizzquiz_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", trackfld_state, vblank_nmi) + + MCFG_DEVICE_MODIFY("mainlatch") + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(trackfld_state, nmi_mask_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( reaktor, trackfld ) diff --git a/src/mame/includes/hyperspt.h b/src/mame/includes/hyperspt.h index 7cd6d3a43c2..de8cdbc69a8 100644 --- a/src/mame/includes/hyperspt.h +++ b/src/mame/includes/hyperspt.h @@ -38,11 +38,12 @@ public: uint8_t m_irq_mask; uint8_t m_SN76496_latch; - DECLARE_WRITE8_MEMBER(coin_counter_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(colorram_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(konami_SN76496_latch_w) { m_SN76496_latch = data; }; DECLARE_WRITE8_MEMBER(konami_SN76496_w) { m_sn->write(space, offset, m_SN76496_latch); }; diff --git a/src/mame/includes/sbasketb.h b/src/mame/includes/sbasketb.h index f9c9ee1f1ec..8de944e782c 100644 --- a/src/mame/includes/sbasketb.h +++ b/src/mame/includes/sbasketb.h @@ -13,7 +13,6 @@ public: m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), m_palettebank(*this, "palettebank"), - m_spriteram_select(*this, "spriteramsel"), m_scroll(*this, "scroll"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), @@ -27,7 +26,6 @@ public: required_shared_ptr m_videoram; required_shared_ptr m_spriteram; required_shared_ptr m_palettebank; - required_shared_ptr m_spriteram_select; required_shared_ptr m_scroll; /* devices */ @@ -40,14 +38,17 @@ public: /* video-related */ tilemap_t *m_bg_tilemap; + bool m_spriteram_select; - uint8_t m_irq_mask; + bool m_irq_mask; DECLARE_WRITE8_MEMBER(sbasketb_sh_irqtrigger_w); - DECLARE_WRITE8_MEMBER(sbasketb_coin_counter_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); DECLARE_WRITE8_MEMBER(sbasketb_videoram_w); DECLARE_WRITE8_MEMBER(sbasketb_colorram_w); - DECLARE_WRITE8_MEMBER(sbasketb_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(spriteram_select_w); DECLARE_DRIVER_INIT(sbasketb); uint8_t m_SN76496_latch; diff --git a/src/mame/includes/trackfld.h b/src/mame/includes/trackfld.h index 32886c2f751..5dca2311b54 100644 --- a/src/mame/includes/trackfld.h +++ b/src/mame/includes/trackfld.h @@ -49,15 +49,17 @@ public: int m_old_gfx_bank; // needed by atlantol int m_sprites_gfx_banked; - uint8_t m_irq_mask; - uint8_t m_yieartf_nmi_mask; - DECLARE_WRITE8_MEMBER(coin_w); + bool m_irq_mask; + bool m_nmi_mask; + + DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); + DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE8_MEMBER(questions_bank_w); - DECLARE_WRITE8_MEMBER(irq_mask_w); - DECLARE_WRITE8_MEMBER(yieartf_nmi_mask_w); + DECLARE_WRITE_LINE_MEMBER(irq_mask_w); + DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(trackfld_videoram_w); DECLARE_WRITE8_MEMBER(trackfld_colorram_w); - DECLARE_WRITE8_MEMBER(trackfld_flipscreen_w); + DECLARE_WRITE_LINE_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(atlantol_gfxbank_w); DECLARE_READ8_MEMBER(trackfld_SN76496_r); DECLARE_READ8_MEMBER(trackfld_speech_r); diff --git a/src/mame/video/hyperspt.cpp b/src/mame/video/hyperspt.cpp index 8e7ce844870..6b268069dc7 100644 --- a/src/mame/video/hyperspt.cpp +++ b/src/mame/video/hyperspt.cpp @@ -101,13 +101,10 @@ WRITE8_MEMBER(hyperspt_state::colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(hyperspt_state::flipscreen_w) +WRITE_LINE_MEMBER(hyperspt_state::flipscreen_w) { - if (flip_screen() != (data & 0x01)) - { - flip_screen_set(data & 0x01); - machine().tilemap().mark_all_dirty(); - } + flip_screen_set(state); + machine().tilemap().mark_all_dirty(); } TILE_GET_INFO_MEMBER(hyperspt_state::get_bg_tile_info) diff --git a/src/mame/video/sbasketb.cpp b/src/mame/video/sbasketb.cpp index de3b5d0c6a5..b549174940e 100644 --- a/src/mame/video/sbasketb.cpp +++ b/src/mame/video/sbasketb.cpp @@ -106,13 +106,15 @@ WRITE8_MEMBER(sbasketb_state::sbasketb_colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(sbasketb_state::sbasketb_flipscreen_w) +WRITE_LINE_MEMBER(sbasketb_state::flipscreen_w) { - if (flip_screen() != data) - { - flip_screen_set(data); - machine().tilemap().mark_all_dirty(); - } + flip_screen_set(state); + machine().tilemap().mark_all_dirty(); +} + +WRITE_LINE_MEMBER(sbasketb_state::spriteram_select_w) +{ + m_spriteram_select = state; } TILE_GET_INFO_MEMBER(sbasketb_state::get_bg_tile_info) @@ -128,12 +130,14 @@ void sbasketb_state::video_start() { m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(sbasketb_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_bg_tilemap->set_scroll_cols(32); + + save_item(NAME(m_spriteram_select)); } void sbasketb_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) { uint8_t *spriteram = m_spriteram; - int offs = (*m_spriteram_select & 0x01) * 0x100; + int offs = m_spriteram_select ? 0x100 : 0; int i; for (i = 0; i < 64; i++, offs += 4) diff --git a/src/mame/video/trackfld.cpp b/src/mame/video/trackfld.cpp index 34a615b6adc..e4531d3a140 100644 --- a/src/mame/video/trackfld.cpp +++ b/src/mame/video/trackfld.cpp @@ -101,13 +101,10 @@ WRITE8_MEMBER(trackfld_state::trackfld_colorram_w) m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(trackfld_state::trackfld_flipscreen_w) +WRITE_LINE_MEMBER(trackfld_state::flipscreen_w) { - if (flip_screen() != data) - { - flip_screen_set(data); - machine().tilemap().mark_all_dirty(); - } + flip_screen_set(state); + machine().tilemap().mark_all_dirty(); } WRITE8_MEMBER(trackfld_state::atlantol_gfxbank_w) -- cgit v1.2.3