summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/pengo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/pengo.cpp')
-rw-r--r--src/mame/drivers/pengo.cpp57
1 files changed, 34 insertions, 23 deletions
diff --git a/src/mame/drivers/pengo.cpp b/src/mame/drivers/pengo.cpp
index 923150fbe72..4157f5c89a2 100644
--- a/src/mame/drivers/pengo.cpp
+++ b/src/mame/drivers/pengo.cpp
@@ -67,6 +67,7 @@
#include "includes/pacman.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/segacrpt_device.h"
#include "screen.h"
#include "speaker.h"
@@ -77,8 +78,9 @@ class pengo_state : public pacman_state
public:
pengo_state(const machine_config &mconfig, device_type type, const char *tag)
: pacman_state(mconfig, type, tag), m_decrypted_opcodes(*this, "decrypted_opcodes") { }
- DECLARE_WRITE8_MEMBER(pengo_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_DRIVER_INIT(penta);
INTERRUPT_GEN_MEMBER(vblank_irq);
@@ -115,14 +117,19 @@ public:
*
*************************************/
-WRITE8_MEMBER(pengo_state::pengo_coin_counter_w)
+WRITE_LINE_MEMBER(pengo_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(pengo_state::irq_mask_w)
+WRITE_LINE_MEMBER(pengo_state::coin_counter_2_w)
{
- m_irq_mask = data & 1;
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(pengo_state::irq_mask_w)
+{
+ m_irq_mask = state;
}
static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
@@ -135,14 +142,8 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x9000, 0x903f) AM_READ_PORT("DSW1")
AM_RANGE(0x9040, 0x907f) AM_READ_PORT("DSW0")
- AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
- AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
- AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x9044, 0x9045) AM_WRITE(pengo_coin_counter_w)
- AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w)
- AM_RANGE(0x9047, 0x9047) AM_WRITE(pengo_gfxbank_w)
- AM_RANGE(0x9070, 0x9070) AM_WRITENOP
+ AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0)
+ AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("IN1")
AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("IN0")
ADDRESS_MAP_END
@@ -164,15 +165,8 @@ static ADDRESS_MAP_START( jrpacmbl_map, AS_PROGRAM, 8, pengo_state )
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x9030, 0x9030) AM_WRITE(jrpacman_scroll_w)
AM_RANGE(0x9040, 0x904f) AM_READ_PORT("DSW")
- AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
- AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
- AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x9044, 0x9044) AM_WRITE(jrpacman_bgpriority_w)
- AM_RANGE(0x9045, 0x9045) AM_WRITE(jrpacman_spritebank_w)
- AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w)
- AM_RANGE(0x9047, 0x9047) AM_WRITE(jrpacman_charbank_w)
- AM_RANGE(0x9070, 0x9070) AM_WRITENOP
+ AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0)
+ AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("P2")
AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("P1")
ADDRESS_MAP_END
@@ -380,6 +374,18 @@ static MACHINE_CONFIG_START( pengo )
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pengo_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // U27
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pengo_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pengo_state, pengo_palettebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pengo_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pengo_state, pengo_colortablebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, pengo_gfxbank_w))
+
+ MCFG_WATCHDOG_ADD("watchdog")
+
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pengo)
MCFG_PALETTE_ADD("palette", 128*4)
@@ -422,6 +428,11 @@ static MACHINE_CONFIG_DERIVED( jrpacmbl, pengo )
MCFG_CPU_PROGRAM_MAP(jrpacmbl_map)
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_OPCODES)
+ MCFG_DEVICE_MODIFY("latch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, jrpacman_bgpriority_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, jrpacman_spritebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, jrpacman_charbank_w))
+
MCFG_VIDEO_START_OVERRIDE(pengo_state,jrpacman)
MACHINE_CONFIG_END