summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/warpwarp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/warpwarp.cpp')
-rw-r--r--src/mame/drivers/warpwarp.cpp142
1 files changed, 71 insertions, 71 deletions
diff --git a/src/mame/drivers/warpwarp.cpp b/src/mame/drivers/warpwarp.cpp
index 39e819805a1..60bc71de95e 100644
--- a/src/mame/drivers/warpwarp.cpp
+++ b/src/mame/drivers/warpwarp.cpp
@@ -130,6 +130,7 @@ Notes:
#include "includes/warpwarp.h"
#include "cpu/i8085/i8085.h"
+#include "machine/74259.h"
#include "screen.h"
#include "speaker.h"
@@ -193,40 +194,47 @@ WRITE8_MEMBER(warpwarp_state::geebee_out6_w)
}
}
-WRITE8_MEMBER(warpwarp_state::geebee_out7_w)
+WRITE_LINE_MEMBER(warpwarp_state::lamp_1_w)
{
- switch (offset & 7)
- {
- case 0:
- output().set_led_value(0,data & 1);
- break;
- case 1:
- output().set_led_value(1,data & 1);
- break;
- case 2:
- output().set_led_value(2,data & 1);
- break;
- case 3:
- machine().bookkeeping().coin_counter_w(0,data & 1);
- break;
- case 4:
- if (strcmp(machine().system().name, "geebeeb"))
- machine().bookkeeping().coin_lockout_global_w(~data & 1);
- break;
- case 5:
- if( m_geebee_bgw != (data & 1) )
- machine().tilemap().mark_all_dirty();
- m_geebee_bgw = data & 1;
- break;
- case 6:
- m_ball_on = data & 1;
- if (~data & 1)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
- case 7:
- flip_screen_set(data & 1);
- break;
- }
+ output().set_led_value(0, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::lamp_2_w)
+{
+ output().set_led_value(1, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::lamp_3_w)
+{
+ output().set_led_value(2, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::lock_out_w)
+{
+ machine().bookkeeping().coin_lockout_global_w(!state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::geebee_bgw_w)
+{
+ m_geebee_bgw = state;
+ machine().tilemap().mark_all_dirty();
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::ball_on_w)
+{
+ m_ball_on = state;
+ if (!state)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::inv_w)
+{
+ flip_screen_set(state);
}
@@ -280,39 +288,6 @@ WRITE8_MEMBER(warpwarp_state::warpwarp_out0_w)
}
}
-WRITE8_MEMBER(warpwarp_state::warpwarp_out3_w)
-{
- switch (offset & 7)
- {
- case 0:
- output().set_led_value(0,data & 1);
- break;
- case 1:
- output().set_led_value(1,data & 1);
- break;
- case 2:
- output().set_led_value(2,data & 1);
- break;
- case 3:
- /* n.c. */
- break;
- case 4:
- machine().bookkeeping().coin_lockout_global_w(~data & 1);
- break;
- case 5:
- machine().bookkeeping().coin_counter_w(0,data & 1);
- break;
- case 6:
- m_ball_on = data & 1;
- if (~data & 1)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
- case 7:
- flip_screen_set(data & 1);
- break;
- }
-}
-
static ADDRESS_MAP_START( geebee_map, AS_PROGRAM, 8, warpwarp_state )
@@ -322,13 +297,13 @@ static ADDRESS_MAP_START( geebee_map, AS_PROGRAM, 8, warpwarp_state )
AM_RANGE(0x4000, 0x40ff) AM_RAM
AM_RANGE(0x5000, 0x53ff) AM_READ(geebee_in_r)
AM_RANGE(0x6000, 0x6fff) AM_WRITE(geebee_out6_w)
- AM_RANGE(0x7000, 0x7fff) AM_WRITE(geebee_out7_w)
+ AM_RANGE(0x7000, 0x7007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( geebee_port_map, AS_IO, 8, warpwarp_state )
AM_RANGE(0x50, 0x53) AM_READ(geebee_in_r)
AM_RANGE(0x60, 0x6f) AM_WRITE(geebee_out6_w)
- AM_RANGE(0x70, 0x7f) AM_WRITE(geebee_out7_w)
+ AM_RANGE(0x70, 0x77) AM_MIRROR(0x08) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -340,7 +315,7 @@ static ADDRESS_MAP_START( bombbee_map, AS_PROGRAM, 8, warpwarp_state )
AM_RANGE(0x6000, 0x600f) AM_READWRITE(warpwarp_sw_r, warpwarp_out0_w)
AM_RANGE(0x6010, 0x601f) AM_READ(warpwarp_vol_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music1_w)
AM_RANGE(0x6020, 0x602f) AM_READ(warpwarp_dsw1_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music2_w)
- AM_RANGE(0x6030, 0x603f) AM_WRITE(warpwarp_out3_w)
+ AM_RANGE(0x6030, 0x6037) AM_MIRROR(0x0008) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( warpwarp_map, AS_PROGRAM, 8, warpwarp_state )
@@ -351,7 +326,7 @@ static ADDRESS_MAP_START( warpwarp_map, AS_PROGRAM, 8, warpwarp_state )
AM_RANGE(0xc000, 0xc00f) AM_READWRITE(warpwarp_sw_r, warpwarp_out0_w)
AM_RANGE(0xc010, 0xc01f) AM_READ(warpwarp_vol_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music1_w)
AM_RANGE(0xc020, 0xc02f) AM_READ(warpwarp_dsw1_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music2_w)
- AM_RANGE(0xc030, 0xc03f) AM_WRITE(warpwarp_out3_w)
+ AM_RANGE(0xc030, 0xc037) AM_MIRROR(0x0008) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -738,6 +713,16 @@ static MACHINE_CONFIG_START( geebee )
MCFG_CPU_IO_MAP(geebee_port_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", warpwarp_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 5N
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(warpwarp_state, lamp_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(warpwarp_state, lamp_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(warpwarp_state, lamp_3_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(warpwarp_state, counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(warpwarp_state, lock_out_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(warpwarp_state, geebee_bgw_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(warpwarp_state, ball_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(warpwarp_state, inv_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 272, 264, 0, 224)
@@ -757,6 +742,11 @@ static MACHINE_CONFIG_START( geebee )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( geebeeb, geebee )
+ MCFG_DEVICE_MODIFY("latch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // remove coin lockout
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( navarone, geebee )
/* basic machine hardware */
@@ -775,6 +765,16 @@ static MACHINE_CONFIG_START( bombbee )
MCFG_CPU_PROGRAM_MAP(bombbee_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", warpwarp_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 6L on Warp Warp
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(warpwarp_state, lamp_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(warpwarp_state, lamp_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(warpwarp_state, lamp_3_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // n.c.
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(warpwarp_state, lock_out_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(warpwarp_state, counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(warpwarp_state, ball_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(warpwarp_state, inv_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -997,7 +997,7 @@ DRIVER_INIT_MEMBER(warpwarp_state,warpwarp)
/* B & W games */
GAMEL(1978, geebee, 0, geebee, geebee, warpwarp_state, geebee, ROT90, "Namco", "Gee Bee (Japan)", MACHINE_SUPPORTS_SAVE, layout_geebee )
-GAMEL(1978, geebeeb, geebee, geebee, geebeeb, warpwarp_state, geebee, ROT90, "Namco (F.lli Bertolino license)", "Gee Bee (Europe)", MACHINE_SUPPORTS_SAVE, layout_geebee ) // Fratelli Bertolino
+GAMEL(1978, geebeeb, geebee, geebeeb, geebeeb, warpwarp_state, geebee, ROT90, "Namco (F.lli Bertolino license)", "Gee Bee (Europe)", MACHINE_SUPPORTS_SAVE, layout_geebee ) // Fratelli Bertolino
GAMEL(1978, geebeeg, geebee, geebee, geebee, warpwarp_state, geebee, ROT90, "Namco (Gremlin license)", "Gee Bee (US)", MACHINE_SUPPORTS_SAVE, layout_geebee )
GAMEL(1980, navarone, 0, navarone, navarone, warpwarp_state, navarone, ROT90, "Namco", "Navarone", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_navarone )