summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatarGravatar James Wallace <james-wallace-ghub@users.noreply.github.com>2020-07-14 09:19:16 +0100
committerGravatarGravatar James Wallace <james-wallace-ghub@users.noreply.github.com>2020-07-14 09:19:16 +0100
commitc665001905ac1ddcb06ac5a31dc96f13c49993d0 (patch)
treeb758a4a4db5584af122ebb702705fcb29ed17dcb
parent36ae40b4aa741885c6df3b3e9ff2b13f0bb448b6 (diff)
downloadmame-c665001905ac1ddcb06ac5a31dc96f13c49993d0.tar.xz
mame-c665001905ac1ddcb06ac5a31dc96f13c49993d0.zip
mpu4vid.cpp: Added inputs and layout for Strike it Lucky, corrected inputs for Adders and Ladders.
mpu4.cpp: Added support for simple LED extender used by MPU4Video games.
-rw-r--r--src/mame/drivers/mpu4.cpp2
-rw-r--r--src/mame/drivers/mpu4vid.cpp137
-rw-r--r--src/mame/includes/mpu4.h7
-rw-r--r--src/mame/layout/crmaze2p.lay2
-rw-r--r--src/mame/layout/crmaze4p.lay2
-rw-r--r--src/mame/layout/v4strike.lay465
-rw-r--r--src/mame/machine/mpu4.cpp68
7 files changed, 638 insertions, 45 deletions
diff --git a/src/mame/drivers/mpu4.cpp b/src/mame/drivers/mpu4.cpp
index 989436ede67..0c19f0da4ef 100644
--- a/src/mame/drivers/mpu4.cpp
+++ b/src/mame/drivers/mpu4.cpp
@@ -1,6 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
-/* these are the MPU4 set listings / set specific code, for hardware emulation see mpu4hw.c */
+/* these are the MPU4 set listings / set specific code, for hardware emulation see machine/mpu4.cpp */
/* todo: driver inits (basic hw reel, protection configs etc.) should probably be moved here
once the actual code for them is cleaned up and can be put into neater structures
diff --git a/src/mame/drivers/mpu4vid.cpp b/src/mame/drivers/mpu4vid.cpp
index 95bafaf8710..4b93deb7925 100644
--- a/src/mame/drivers/mpu4vid.cpp
+++ b/src/mame/drivers/mpu4vid.cpp
@@ -170,7 +170,7 @@ TODO:
- Get the BwB games running
* They have a slightly different 68k memory map. The 6850 is at e00000 and the 6840 is at e01000
They appear to hang on the handshake with the MPU4 board
- - EF9369 colour palette is still wrong in test modes.
+ - Layouts needed for the other working games, and DIP switches need checking/altering (no test mode?)
***********************************************************************************************************/
#include "emu.h"
#include "includes/mpu4.h"
@@ -201,6 +201,7 @@ TODO:
#include "crmaze2p.lh"
#include "crmaze4p.lh"
#include "v4addlad.lh"
+#include "v4strike.lh"
class mpu4vid_state : public mpu4_state
@@ -1102,10 +1103,10 @@ static INPUT_PORTS_START( adders )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_INTERLOCK) PORT_NAME("Cashbox Door") PORT_CODE(KEYCODE_Q) PORT_TOGGLE
PORT_START("BLACK2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("C")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("C")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("B")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("A")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_NAME("Continue")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("A")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Continue")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_START1)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
@@ -1238,6 +1239,120 @@ static INPUT_PORTS_START( v4tetris )
INPUT_PORTS_END
+static INPUT_PORTS_START( strike )
+ PORT_START("ORANGE1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Freeze")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_NAME("Go On!")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("ORANGE2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("BLACK1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Play")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_NAME("Green (Left)")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Yellow (Left)")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Red (Left)")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Button") PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Refill Key") PORT_CODE(KEYCODE_R) PORT_TOGGLE
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_INTERLOCK) PORT_NAME("Cashbox Door") PORT_CODE(KEYCODE_Q) PORT_TOGGLE
+
+ PORT_START("BLACK2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Help")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_NAME("Green (Right)")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_NAME("Yellow (Right)")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_NAME("Red (Right)")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_GAMBLE_PAYOUT) PORT_NAME("Collect")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_START1)
+
+ PORT_START("DIL1")
+ PORT_DIPNAME( 0x01, 0x00, "DIL101" ) PORT_DIPLOCATION("DIL1:01")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, "DIL102" ) PORT_DIPLOCATION("DIL1:02")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, "DIL103" ) PORT_DIPLOCATION("DIL1:03")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, "DIL104" ) PORT_DIPLOCATION("DIL1:04")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, "DIL105" ) PORT_DIPLOCATION("DIL1:05")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "DIL106" ) PORT_DIPLOCATION("DIL1:06")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "DIL107" ) PORT_DIPLOCATION("DIL1:07")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, "DIL108" ) PORT_DIPLOCATION("DIL1:08")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+ PORT_START("DIL2")
+ PORT_DIPNAME( 0x01, 0x00, "1 Pound for change" ) PORT_DIPLOCATION("DIL2:01")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, "DIL202" ) PORT_DIPLOCATION("DIL2:02")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, "DIL203" ) PORT_DIPLOCATION("DIL2:03")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, "Attract mode inhibit" ) PORT_DIPLOCATION("DIL2:04")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, "DIL205" ) PORT_DIPLOCATION("DIL2:05")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Coin alarm inhibit" ) PORT_DIPLOCATION("DIL2:06")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "DIL207" ) PORT_DIPLOCATION("DIL2:07")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, "Single coin entry" ) PORT_DIPLOCATION("DIL2:08")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+ PORT_START("AUX1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("AUX2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_CUSTOM)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_CUSTOM)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")//PORT_IMPULSE(5)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")//PORT_IMPULSE(5)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")//PORT_IMPULSE(5)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")//PORT_IMPULSE(5)
+INPUT_PORTS_END
+
WRITE_LINE_MEMBER(mpu4vid_state::mpu_video_reset)
{
m_ptm->reset();
@@ -1339,7 +1454,6 @@ void mpu4vid_state::bwbvid_68k_map(address_map &map)
map(0xc00000, 0xc1ffff).rw(FUNC(mpu4vid_state::mpu4_vid_vidram_r), FUNC(mpu4vid_state::mpu4_vid_vidram_w)).share("vid_vidram");
map(0xe00000, 0xe00003).rw(m_acia_1, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
map(0xe01000, 0xe0100f).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)).umask16(0x00ff);
- //map(0xe05000, 0xe05001).rw(FUNC(mpu4vid_state::bwb_characteriser16_r), FUNC(mpu4vid_state::bwb_characteriser16_w)); // CHR
}
void mpu4vid_state::bwbvid5_68k_map(address_map &map)
@@ -1360,7 +1474,7 @@ void mpu4vid_state::bwbvid5_68k_map(address_map &map)
map(0xe02000, 0xe02007).rw("pia_ic4ss", FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0xff00); //Seems odd...
map(0xe03000, 0xe0300f).r("ptm_ic3ss", FUNC(ptm6840_device::read)).umask16(0xff00); // 6840PTM on sampled sound board
map(0xe03000, 0xe0300f).w(FUNC(mpu4vid_state::ic3ss_vid_w)).umask16(0xff00); // 6840PTM on sampled sound board
- map(0xe04000, 0xe0400f).rw(FUNC(mpu4vid_state::bwb_characteriser_r), FUNC(mpu4vid_state::bwb_characteriser_w)).umask16(0x00ff); //.rw(FUNC(mpu4vid_state::adpcm_r), FUNC(mpu4vid_state::adpcm_w)); CHR ?
+ map(0xe04000, 0xe0400f).rw(FUNC(mpu4vid_state::bwb_characteriser_r), FUNC(mpu4vid_state::bwb_characteriser_w)).umask16(0x00ff); // CHR ?
}
/* TODO: Fix up MPU4 map*/
@@ -1903,6 +2017,7 @@ void mpu4vid_state::init_timemchn()
void mpu4vid_state::init_strikeit()
{
+ m_led_extender = SIMPLE_CARD;
m_reels = 0;//currently no hybrid games
m_current_chr_table = nullptr;
m_4ktable = memregion( "video_prot" )->base();
@@ -4028,7 +4143,7 @@ GAMEL( 1994, v4cmaze3c, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_v4c
GAMEL( 1994, v4cmaze3a, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze3a, ROT0, "Barcrest","The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )//SWP 0.7
//Year is a guess, based on the use of the 'Coin Man' logo
-GAME( 1996?,v4mate, v4bios, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4) (MPU4 Video)",GAME_FLAGS )//SWP 0.2 /* Using crmaze controls for now, cabinet has trackball */
+GAME( 1996?,v4mate, v4bios, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4) (MPU4 Video)",GAME_FLAGS )//SWP 0.2
GAME( 1996?,v4mated, v4mate, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4, Datapak) (MPU4 Video)",GAME_FLAGS )//SWP 0.2D
/* Quiz games - Questions decoded */
@@ -4037,10 +4152,10 @@ GAMEL( 1989, v4addlad, v4bios, mpu4_vid_strike, adders, mpu4vid_state,
GAMEL( 1989, v4addladd, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.1d) (MPU4 Video)",GAME_FLAGS,layout_v4addlad )
GAMEL( 1989, v4addlad20, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.0) (MPU4 Video)",GAME_FLAGS,layout_v4addlad )
-GAME( 199?, v4strike, v4bios, mpu4_vid_strike, mpu4, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5) (MPU4 Video)",GAME_FLAGS )
-GAME( 199?, v4striked, v4strike, mpu4_vid_strike, mpu4, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5, Datapak) (MPU4 Video)",GAME_FLAGS )
-GAME( 199?, v4strike2, v4strike, mpu4_vid_strike, mpu4, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53) (MPU4 Video)",GAME_FLAGS )
-GAME( 199?, v4strike2d, v4strike, mpu4_vid_strike, mpu4, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53, Datapak) (MPU4 Video)",GAME_FLAGS )
+GAMEL( 199?, v4strike, v4bios, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5) (MPU4 Video)",GAME_FLAGS,layout_v4strike )
+GAMEL( 199?, v4striked, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5, Datapak) (MPU4 Video)",GAME_FLAGS,layout_v4strike )
+GAMEL( 199?, v4strike2, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53) (MPU4 Video)",GAME_FLAGS,layout_v4strike )
+GAMEL( 199?, v4strike2d, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53, Datapak) (MPU4 Video)",GAME_FLAGS,layout_v4strike )
GAME( 199?, v4barqst, v4bios, mpu4_vid_strike, mpu4, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4barqstd, v4barqst, mpu4_vid_strike, mpu4, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6d) (MPU4 Video)",GAME_FLAGS )
diff --git a/src/mame/includes/mpu4.h b/src/mame/includes/mpu4.h
index 780832db214..69694712bfe 100644
--- a/src/mame/includes/mpu4.h
+++ b/src/mame/includes/mpu4.h
@@ -60,7 +60,7 @@ static const uint8_t bwb_chr_table_common[10]= {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x
#define SIX_REEL_1TO8 4 // Two reels on the meter drives
#define SIX_REEL_5TO8 5 // Like FIVE_REEL_5TO8, but with an extra reel elsewhere
#define SEVEN_REEL 6 // Mainly club machines, significant reworking of reel hardware
-#define FLUTTERBOX 7 // Will you start the fans, please! A fan using a reel mux-like setup, but not actually a reel
+#define FLUTTERBOX 7 // A fan feature using a reel mux-like setup, but not actually a reel
//Lamp extension
#define NO_EXTENDER 0 // As originally designed
@@ -73,6 +73,8 @@ static const uint8_t bwb_chr_table_common[10]= {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x
#define CARD_A 1
#define CARD_B 2
#define CARD_C 3
+#define SIMPLE_CARD 4
+
//Hopper info
#define TUBES 0
@@ -159,6 +161,7 @@ public:
void init_m4_led_a();
void init_m4_led_b();
void init_m4_led_c();
+ void init_m4_led_simple();
void init_m4_andycp10c();
void init_m_blsbys();
void init_m_oldtmr();
@@ -232,7 +235,7 @@ protected:
void mpu4_memmap(address_map &map);
void lamp_extend_small(int data);
void lamp_extend_large(int data,int column,int active);
- void led_write_latch(int latch, int data, int column);
+ void led_write_extender(int latch, int data, int column);
void update_meters();
void ic23_update();
void ic24_output(int data);
diff --git a/src/mame/layout/crmaze2p.lay b/src/mame/layout/crmaze2p.lay
index a377010d7c3..b33617e2de3 100644
--- a/src/mame/layout/crmaze2p.lay
+++ b/src/mame/layout/crmaze2p.lay
@@ -46,7 +46,7 @@ license:CC0
</element>
<view name="Monitor and Lamps">
- <bezel name="lamp41" element="ESCAPE">
+ <bezel name="lamp41" element="ESCAPE" inputtag="BLACK2" inputmask="0x40">
<bounds x="514" y="267" width="30" height="30" />
</bezel>
<bezel name="P1" element="P1">
diff --git a/src/mame/layout/crmaze4p.lay b/src/mame/layout/crmaze4p.lay
index 7c6613636e7..05037e01927 100644
--- a/src/mame/layout/crmaze4p.lay
+++ b/src/mame/layout/crmaze4p.lay
@@ -59,7 +59,7 @@ license:CC0
</element>
<view name="Monitor and Lamps">
- <bezel name="lamp41" element="ESCAPE">
+ <bezel name="lamp41" element="ESCAPE" inputtag="BLACK2" inputmask="0x40">
<bounds x="514" y="267" width="30" height="30" />
</bezel>
<bezel name="P1" element="P1">
diff --git a/src/mame/layout/v4strike.lay b/src/mame/layout/v4strike.lay
new file mode 100644
index 00000000000..8bee59426e9
--- /dev/null
+++ b/src/mame/layout/v4strike.lay
@@ -0,0 +1,465 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+ <element name="GEMS" defstate="0">
+ <text string="GEMS" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="7" />
+ </text>
+ <text string="FOR" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="8" width="16" height="7" />
+ </text>
+ </element>
+ <element name="FREEZE" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="0.2" />
+ </rect>
+ <text string="FREEZE">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="7" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="1.0" />
+ </rect>
+ </element>
+ <element name="GO" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.2" green="0.2" blue="0.0" />
+ </rect>
+ <text string="GO ON">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="7" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.8" green="0.8" blue="0.0" />
+ </rect>
+ </element>
+ <element name="FREEGAME">
+ <text string="FREE">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="7" />
+ </text>
+ <text string="GAME">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="8" width="16" height="7" />
+ </text>
+ </element>
+ <element name="50P" defstate="0">
+ <text string="50p" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£1" defstate="0">
+ <text string="£1" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£2" defstate="0">
+ <text string="£2" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£3" defstate="0">
+ <text string="£3" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£4" defstate="0">
+ <text string="£4" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£5" defstate="0">
+ <text string="£5" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£6" defstate="0">
+ <text string="£6" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£10" defstate="0">
+ <text string="£10" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="£20" defstate="0">
+ <text string="£20" state="0">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0" y="0" width="16" height="16" />
+ </text>
+ </element>
+ <element name="TRAIL1" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="252" height="16" />
+ <color red="0.2" green="0.2" blue="0.2" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="252" height="16" />
+ <color red="1.0" green="1.0" blue="1.0" />
+ </rect>
+ </element>
+ <element name="TRAIL2" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="80" height="16" />
+ <color red="0.0" green="0.2" blue="0.0" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="80" height="16" />
+ <color red="0.0" green="1.0" blue="0.3" />
+ </rect>
+ </element>
+ <element name="TRAIL3" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="80" height="16" />
+ <color red="0.2" green="0.2" blue="0.0" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="80" height="16" />
+ <color red="1.0" green="1.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="TRAIL4" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="80" height="16" />
+ <color red="0.2" green="0.0" blue="0.0" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="80" height="16" />
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="RED" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.5" green="0.0" blue="0.0" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="YELLOW" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.5" green="0.5" blue="0.0" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="1.0" green="1.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="GREEN" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.5" blue="0.0" />
+ </rect>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="1.0" blue="0.0" />
+ </rect>
+ </element>
+
+ <element name="PASS" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="0.2" />
+ </rect>
+ <text string="PASS">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="2" y="2" width="16" height="8" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.3" blue="1.0" />
+ </rect>
+ </element>
+
+ <element name="GET" defstate="0">
+ <text string="COLLECT" state="0">
+ <color red="0.1" green="0.1" blue="0.1" />
+ <bounds x="0" y="0" width="16" height="8" />
+ </text>
+ <text string="COLLECT" state="1">
+ <color red="1" green="0.1" blue="0.1" />
+ <bounds x="0" y="0" width="16" height="8" />
+ </text>
+ </element>
+
+ <element name="COLLECT" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="16" height="10" />
+ <color red="0.5" green="0.2" blue="0.0" />
+ </rect>
+ <text string="COLLECT" state="0">
+ <color red="0.1" green="0.1" blue="0.1" />
+ <bounds x="0" y="0" width="16" height="8" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="16" height="10" />
+ <color red="1.0" green="0.4" blue="0.0" />
+ </rect>
+ <text string="COLLECT" state="1">
+ <color red="0.1" green="0.1" blue="0.1" />
+ <bounds x="0" y="0" width="16" height="8" />
+ </text>
+ </element>
+
+ <element name="START" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="16" height="10" />
+ <color red="0.0" green="0.3" blue="0.1" />
+ </rect>
+ <text string="START" state="0">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0" width="16" height="8" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="16" height="10" />
+ <color red="0.0" green="1.0" blue="0.3" />
+ </rect>
+ <text string="START" state="1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0" width="16" height="8" />
+ </text>
+ </element>
+
+ <element name="HELP" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <text string="HELP" state="0">
+ <color red="0.2" green="0.2" blue="0.2" />
+ <bounds x="2" y="2" width="16" height="8" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <text string="HELP" state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="2" y="2" width="16" height="8" />
+ </text>
+ </element>
+
+ <element name="PLAY" defstate="0">
+ <rect state ="0">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="0.3" />
+ </rect>
+ <text string="PLAY">
+ <color red="0.2" green="0.2" blue="0.2" />
+ <bounds x="2" y="2" width="16" height="8" />
+ </text>
+ <rect state ="1">
+ <bounds x="0" y="0" width="20" height="10" />
+ <color red="0.0" green="0.0" blue="1.0" />
+ </rect>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.0" blue="0.0" />
+ </led7seg>
+ </element>
+
+
+ <view name="Monitor and Lamps">
+ <bezel name="lamp85" element="TRAIL1">
+ <bounds x="50" y="10" width="252" height="60" />
+ </bezel>
+ <bezel name="lamp85" element="TRAIL2">
+ <bounds x="252" y="10" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp85" element="TRAIL3">
+ <bounds x="332" y="10" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp85" element="TRAIL4">
+ <bounds x="412" y="10" width="80" height="60" />
+ </bezel>
+ <bezel name="digit14" element="digit">
+ <bounds x="100" y="10" width="40" height="60" />
+ </bezel>
+ <bezel name="digit15" element="digit">
+ <bounds x="140" y="10" width="40" height="60" />
+ </bezel>
+ <bezel name="lamp85" element="GET">
+ <bounds x="50" y="10" width="50" height="60" />
+ </bezel>
+ <bezel name="GEMS" element="GEMS">
+ <bounds x="180" y="10" width="72" height="60" />
+ </bezel>
+ <bezel name="£5" element="£5">
+ <bounds x="252" y="10" width="80" height="60" />
+ </bezel>
+ <bezel name="£10" element="£10">
+ <bounds x="332" y="10" width="80" height="60" />
+ </bezel>
+ <bezel name="£20" element="£20">
+ <bounds x="412" y="10" width="80" height="60" />
+ </bezel>
+
+ <bezel name="lamp93" element="TRAIL1">
+ <bounds x="50" y="70" width="252" height="60" />
+ </bezel>
+ <bezel name="lamp93" element="TRAIL2">
+ <bounds x="252" y="70" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp93" element="TRAIL3">
+ <bounds x="332" y="70" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp93" element="TRAIL4">
+ <bounds x="412" y="70" width="80" height="60" />
+ </bezel>
+ <bezel name="digit12" element="digit">
+ <bounds x="100" y="70" width="40" height="60" />
+ </bezel>
+ <bezel name="digit13" element="digit">
+ <bounds x="140" y="70" width="40" height="60" />
+ </bezel>
+ <bezel name="lamp93" element="GET">
+ <bounds x="50" y="70" width="50" height="60" />
+ </bezel>
+ <bezel name="GEMS" element="GEMS">
+ <bounds x="180" y="70" width="72" height="60" />
+ </bezel>
+ <bezel name="£2" element="£2">
+ <bounds x="252" y="70" width="80" height="60" />
+ </bezel>
+ <bezel name="£4" element="£4">
+ <bounds x="332" y="70" width="80" height="60" />
+ </bezel>
+ <bezel name="£6" element="£6">
+ <bounds x="412" y="70" width="80" height="60" />
+ </bezel>
+
+ <bezel name="lamp101" element="TRAIL1">
+ <bounds x="50" y="130" width="252" height="60" />
+ </bezel>
+ <bezel name="lamp101" element="TRAIL2">
+ <bounds x="252" y="130" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp101" element="TRAIL3">
+ <bounds x="332" y="130" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp101" element="TRAIL4">
+ <bounds x="412" y="130" width="80" height="60" />
+ </bezel>
+ <bezel name="digit10" element="digit">
+ <bounds x="100" y="130" width="40" height="60" />
+ </bezel>
+ <bezel name="digit11" element="digit">
+ <bounds x="140" y="130" width="40" height="60" />
+ </bezel>
+ <bezel name="lamp101" element="GET">
+ <bounds x="50" y="130" width="50" height="60" />
+ </bezel>
+ <bezel name="GEMS" element="GEMS">
+ <bounds x="180" y="130" width="72" height="60" />
+ </bezel>
+ <bezel name="£1" element="£1">
+ <bounds x="252" y="130" width="80" height="60" />
+ </bezel>
+ <bezel name="£2" element="£2">
+ <bounds x="332" y="130" width="80" height="60" />
+ </bezel>
+ <bezel name="£3" element="£3">
+ <bounds x="412" y="130" width="80" height="60" />
+ </bezel>
+
+ <bezel name="lamp109" element="TRAIL1">
+ <bounds x="50" y="190" width="252" height="60" />
+ </bezel>
+ <bezel name="lamp109" element="TRAIL2">
+ <bounds x="252" y="190" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp109" element="TRAIL3">
+ <bounds x="332" y="190" width="80" height="60" />
+ </bezel>
+ <bezel name="lamp109" element="TRAIL4">
+ <bounds x="412" y="190" width="80" height="60" />
+ </bezel>
+ <bezel name="digit8" element="digit">
+ <bounds x="100" y="190" width="40" height="60" />
+ </bezel>
+ <bezel name="digit9" element="digit">
+ <bounds x="140" y="190" width="40" height="60" />
+ </bezel>
+ <bezel name="lamp109" element="GET">
+ <bounds x="50" y="190" width="50" height="60" />
+ </bezel>
+ <bezel name="GEMS" element="GEMS">
+ <bounds x="180" y="190" width="72" height="60" />
+ </bezel>
+ <bezel name="FREEGAME" element="FREEGAME">
+ <bounds x="252" y="190" width="80" height="60" />
+ </bezel>
+ <bezel name="50P" element="50P">
+ <bounds x="332" y="190" width="80" height="60" />
+ </bezel>
+ <bezel name="£1" element="£1">
+ <bounds x="412" y="190" width="80" height="60" />
+ </bezel>
+
+ <bezel name="lamp25" element="COLLECT" inputtag="BLACK2" inputmask="0x40">
+ <bounds x="0" y="310" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp32" element="RED" inputtag="BLACK1" inputmask="0x10">
+ <bounds x="0" y="360" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp34" element="YELLOW" inputtag="BLACK1" inputmask="0x08">
+ <bounds x="0" y="410" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp41" element="GREEN" inputtag="BLACK1" inputmask="0x04">
+ <bounds x="0" y="460" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp48" element="PLAY" inputtag="BLACK1" inputmask="0x02">
+ <bounds x="0" y="510" width="48" height="50" />
+ </bezel>
+
+ <bezel name="lamp24" element="START" inputtag="BLACK2" inputmask="0x80">
+ <bounds x="560" y="310" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp26" element="RED" inputtag="BLACK2" inputmask="0x10">
+ <bounds x="560" y="360" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp33" element="YELLOW" inputtag="BLACK2" inputmask="0x08">
+ <bounds x="560" y="410" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp40" element="GREEN" inputtag="BLACK2" inputmask="0x04">
+ <bounds x="560" y="460" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp42" element="HELP" inputtag="BLACK2" inputmask="0x02">
+ <bounds x="564" y="510" width="48" height="50" />
+ </bezel>
+ <bezel name="lamp51" element="FREEZE" inputtag="ORANGE1" inputmask="0x10">
+ <bounds x="250" y="560" width="50" height="50" />
+ </bezel>
+
+ <bezel name="lamp35" element="GO" inputtag="ORANGE1" inputmask="0x40">
+ <bounds x="300" y="560" width="50" height="50" />
+ </bezel>
+
+ <screen index="0">
+ <bounds x="50" y="260" width="504" height="296" />
+ </screen>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/mpu4.cpp b/src/mame/machine/mpu4.cpp
index 03521465965..91df4c8250d 100644
--- a/src/mame/machine/mpu4.cpp
+++ b/src/mame/machine/mpu4.cpp
@@ -23,6 +23,7 @@
This is the core driver, no video specific stuff should go in here.
This driver holds all the mechanical games.
+ Old logs shown here from pre-GIT days:
06-2011: Fixed boneheaded interface glitch that was causing samples to not be cancelled correctly.
Added the ability to read each segment of an LED display separately, this may be necessary for some
games that use them as surrogate lamp lines.
@@ -251,9 +252,8 @@ To change between them, follow these instructions:
TODO: - Distinguish door switches using manual
- Complete stubs for hoppers (needs slightly better 68681 emulation, and new 'hoppers' device emulation)
- It seems that the MPU4 core program relies on some degree of persistence when switching strobes and handling
- writes to the various hardware ports. This explains the occasional lamping/LED blackout and switching bugs
- For now, we're ignoring any extra writes to strobes, as the alternative is to assign a timer to *everything* and
- start modelling the individual hysteresis curves of filament lamps.
+ writes to the various hardware ports. This explains the occasional lamping/LED blackout and switching bugs.
+ Ideally, this needs converting to the PWM device, but that will be a complex job with this many outputs.
- Fix BwB characteriser, need to be able to calculate stabiliser bytes. Anyone fancy reading 6809 source?
- Strange bug in Andy's Great Escape - Mystery nudge sound effect is not played, mpu4 latches in silence instead (?)
@@ -300,7 +300,7 @@ void mpu4_state::lamp_extend_small(int data)
if (m_lamp_strobe_ext_persistence == 0)
{
//One write to reset the drive lines, one with the data, one to clear the lines, so only the 2nd write does anything
- //Once again, lamp persistences would take care of this, but we can't do that
+ //TODO: PWM
for (i = 0; i < 5; i++)
{
m_lamps[(8*column)+i+128] = BIT(lamp_ext_data, i);
@@ -334,7 +334,7 @@ void mpu4_state::lamp_extend_large(int data,int column,int active)
if (m_lamp_strobe_ext != column)
{
for (i = 0; i < 8; i++)
- {//CHECK, this includes bit 7
+ {//CHECK, this includes bit 7, which seems wrong
m_lamps[(8*column)+i+128+lampbase] = BIT(data, i);
}
m_lamp_strobe_ext = column;
@@ -348,27 +348,25 @@ void mpu4_state::lamp_extend_large(int data,int column,int active)
}
}
-void mpu4_state::led_write_latch(int latch, int data, int column)
+void mpu4_state::led_write_extender(int latch, int data, int starting_column)
{
- int diff,i,j;
+ int diff,i,j, ext_strobe;
diff = (latch ^ m_last_latch) & latch;
- column = 7 - column; // like main board, these are wired up in reverse
- data = ~data;//inverted drive lines?
+ ext_strobe = (7 - starting_column) * 8;
+ data = ~data;//invert drive lines
for (i=0; i<5; i++)
{
- // FIXME: this doesn't look like it could possibly be correct - it can produce 0..17 but with lots of aliasing
if (diff & (1<<i))
{
- column += i;
+ for (j=0; j<8; j++)
+ {
+ m_mpu4leds[(ext_strobe + i) | j], BIT(data, j);
+ }
+ m_digits[(ext_strobe + i)] = data;
}
}
- for (j=0; j<8; j++)
- {
- m_mpu4leds[(column << 3) | j], BIT(data, j);
- }
- m_digits[column << 3] = data; // FIXME should this really be so sparse?
m_last_latch = diff;
}
@@ -465,12 +463,10 @@ MACHINE_RESET_MEMBER(mpu4_state,mpu4)
m_chr_value = 0;
- {
- if (m_numbanks)
- m_bank1->set_entry(m_numbanks);
+ if (m_numbanks)
+ m_bank1->set_entry(m_numbanks);
- m_maincpu->reset();
- }
+ m_maincpu->reset();
}
@@ -512,7 +508,6 @@ void mpu4_state::bankswitch_w(uint8_t data)
{
// printf("bankswitch_w %02x\n", data);
- // m_pageset is never even set??
m_pageval = (data & 0x03);
m_bank1->set_entry((m_pageval + (m_pageset ? 4 : 0)) & m_numbanks);
}
@@ -528,8 +523,6 @@ void mpu4_state::bankset_w(uint8_t data)
{
// printf("bankset_w %02x\n", data);
- // m_pageset is never even set??
-
m_pageval = (data - 2);//writes 2 and 3, to represent 0 and 1 - a hangover from the half page design?
m_bank1->set_entry((m_pageval + (m_pageset ? 4 : 0)) & m_numbanks);
}
@@ -605,7 +598,6 @@ void mpu4_state::pia_ic3_portb_w(uint8_t data)
{
/* Some games (like Connect 4) use 'programmable' LED displays, built from light display lines in section 2. */
/* These are mostly low-tech machines, where such wiring proved cheaper than an extender card */
- /* TODO: replace this with 'segment' lamp masks, to make it more generic */
uint8_t pled_segs[2] = {0,0};
static const int lamps1[8] = { 106, 107, 108, 109, 104, 105, 110, 111 };
@@ -874,7 +866,7 @@ void mpu4_state::pia_ic5_porta_w(uint8_t data)
case NO_EXTENDER:
if (m_led_extender == CARD_B)
{
- led_write_latch(data & 0x1f, m_pia4->a_output(),m_input_strobe);
+ led_write_extender(data & 0x1f, m_pia4->a_output(),m_input_strobe);
}
else if ((m_led_extender != CARD_A) && (m_led_extender != NO_EXTENDER))
{
@@ -1029,10 +1021,22 @@ void mpu4_state::pia_ic5_portb_w(uint8_t data)
}
if (m_led_extender == CARD_A)
{
- led_write_latch(data & 0x07, m_pia4->a_output(),m_input_strobe);
+ led_write_extender(data & 0x07, m_pia4->a_output(),m_input_strobe);
+ }
+ else if (m_led_extender == SIMPLE_CARD)
+ {
+ if(m_led_strobe != m_input_strobe)
+ {
+ for(int i=0; i<8; i++)
+ {
+ m_mpu4leds[( ( (7 - m_input_strobe) + 8) << 3) | i] = BIT(m_pia4->a_output(), i);
+ }
+ m_digits[(7 - m_input_strobe) + 8] = m_pia4->a_output();
+ }
+ m_led_strobe = m_input_strobe;
}
-
}
+
uint8_t mpu4_state::pia_ic5_portb_r()
{
if (m_hopper == HOPPER_NONDUART_B)
@@ -1398,6 +1402,7 @@ WRITE_LINE_MEMBER(mpu4_state::pia_gb_cb2_w)
if (m_bwb_bank)
{
//printf("pia_gb_cb2_w %d\n", state);
+ //m_pageset?
m_pageval = state;
m_bank1->set_entry((m_pageval + (m_pageset ? 4 : 0)) & m_numbanks);
}
@@ -2380,6 +2385,11 @@ void mpu4_state::init_m4_led_c()
m_led_extender = CARD_C;
}
+void mpu4_state::init_m4_led_simple()
+{
+ m_led_extender = SIMPLE_CARD;
+}
+
//TODO: Replace with standard six reels once sets are sorted out - is really six_reel_std
void mpu4_state::init_m4altreels()
{
@@ -3130,7 +3140,7 @@ void mpu4_state::mod4oki(machine_config &config)
mpu4_common2(config);
mpu4_std_6reel(config);
- OKIM6376(config, m_msm6376, 128000); //16KHz sample Can also be 85430 at 10.5KHz and 64000 at 8KHz
+ OKIM6376(config, m_msm6376, 128000); //Adjusted by IC3, default to 16KHz sample. Can also be 85430 at 10.5KHz and 64000 at 8KHz
m_msm6376->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
m_msm6376->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}