summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2017-01-01 12:01:04 -0500
committer GitHub <noreply@github.com>2017-01-01 12:01:04 -0500
commit94de598e970b89eadbf13e914d98f2426216821c (patch)
treeed583771f959f24a0cb23df85bf57162d3fe1561
parent805f8bb6c2e147df41c66748966c7b1849291804 (diff)
parent2bf764c9a172679f5a042b81c39830672416b4cb (diff)
Merge pull request #1886 from mamehaze/281216
Taito 68705 refactoring
-rw-r--r--scripts/target/mame/arcade.lua5
-rw-r--r--src/mame/drivers/40love.cpp16
-rw-r--r--src/mame/drivers/bigevglf.cpp52
-rw-r--r--src/mame/drivers/bking.cpp74
-rw-r--r--src/mame/drivers/bublbobl.cpp64
-rw-r--r--src/mame/drivers/buggychl.cpp15
-rw-r--r--src/mame/drivers/flstory.cpp60
-rw-r--r--src/mame/drivers/lkage.cpp80
-rw-r--r--src/mame/drivers/lsasquad.cpp48
-rw-r--r--src/mame/drivers/nycaptor.cpp51
-rw-r--r--src/mame/drivers/slapfght.cpp70
-rw-r--r--src/mame/includes/40love.h6
-rw-r--r--src/mame/includes/bigevglf.h17
-rw-r--r--src/mame/includes/bking.h15
-rw-r--r--src/mame/includes/bublbobl.h32
-rw-r--r--src/mame/includes/buggychl.h6
-rw-r--r--src/mame/includes/flstory.h33
-rw-r--r--src/mame/includes/lkage.h34
-rw-r--r--src/mame/includes/lsasquad.h25
-rw-r--r--src/mame/includes/msisaac.h4
-rw-r--r--src/mame/includes/nycaptor.h32
-rw-r--r--src/mame/includes/slapfght.h30
-rw-r--r--src/mame/machine/bigevglf.cpp80
-rw-r--r--src/mame/machine/bublbobl.cpp93
-rw-r--r--src/mame/machine/buggychl.cpp234
-rw-r--r--src/mame/machine/buggychl.h48
-rw-r--r--src/mame/machine/flstory.cpp125
-rw-r--r--src/mame/machine/lkage.cpp141
-rw-r--r--src/mame/machine/lsasquad.cpp107
-rw-r--r--src/mame/machine/nycaptor.cpp94
-rw-r--r--src/mame/machine/slapfght.cpp131
-rw-r--r--src/mame/machine/taito68705interface.cpp354
-rw-r--r--src/mame/machine/taito68705interface.h86
33 files changed, 638 insertions, 1624 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index c2607815f6a..1d7085b5e24 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -3550,8 +3550,8 @@ files {
MAME_DIR .. "src/mame/video/bublbobl.cpp",
MAME_DIR .. "src/mame/drivers/buggychl.cpp",
MAME_DIR .. "src/mame/includes/buggychl.h",
- MAME_DIR .. "src/mame/machine/buggychl.cpp",
- MAME_DIR .. "src/mame/machine/buggychl.h",
+ MAME_DIR .. "src/mame/machine/taito68705interface.cpp",
+ MAME_DIR .. "src/mame/machine/taito68705interface.h",
MAME_DIR .. "src/mame/video/buggychl.cpp",
MAME_DIR .. "src/mame/drivers/capr1.cpp",
MAME_DIR .. "src/mame/drivers/caprcyc.cpp",
@@ -3612,7 +3612,6 @@ files {
MAME_DIR .. "src/mame/drivers/lgp.cpp",
MAME_DIR .. "src/mame/drivers/lkage.cpp",
MAME_DIR .. "src/mame/includes/lkage.h",
- MAME_DIR .. "src/mame/machine/lkage.cpp",
MAME_DIR .. "src/mame/video/lkage.cpp",
MAME_DIR .. "src/mame/drivers/lsasquad.cpp",
MAME_DIR .. "src/mame/includes/lsasquad.h",
diff --git a/src/mame/drivers/40love.cpp b/src/mame/drivers/40love.cpp
index 27fcab8b205..004d9b0b6a3 100644
--- a/src/mame/drivers/40love.cpp
+++ b/src/mame/drivers/40love.cpp
@@ -628,8 +628,8 @@ WRITE8_MEMBER(fortyl_state::to_main_w)
static ADDRESS_MAP_START( 40love_map, AS_PROGRAM, 8, fortyl_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM /* M5517P on main board */
- AM_RANGE(0x8800, 0x8800) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_mcu_r, buggychl_mcu_w)
- AM_RANGE(0x8801, 0x8801) AM_DEVREAD("bmcu", buggychl_mcu_device, buggychl_mcu_status_r) AM_WRITE(pix1_mcu_w) //pixel layer related
+ AM_RANGE(0x8800, 0x8800) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ AM_RANGE(0x8801, 0x8801) AM_DEVREAD("bmcu", taito68705_mcu_device, mcu_status_r) AM_WRITE(pix1_mcu_w) //pixel layer related
AM_RANGE(0x8802, 0x8802) AM_WRITE(bank_select_w)
AM_RANGE(0x8803, 0x8803) AM_READWRITE(pix2_r, pix2_w) //pixel layer related
AM_RANGE(0x8804, 0x8804) AM_READWRITE(from_snd_r, sound_command_w)
@@ -1011,8 +1011,6 @@ MACHINE_RESET_MEMBER(fortyl_state,common)
MACHINE_RESET_MEMBER(fortyl_state,40love)
{
- m_mcu->set_input_line(0, CLEAR_LINE);
-
MACHINE_RESET_CALL_MEMBER(common);
}
@@ -1046,9 +1044,7 @@ static MACHINE_CONFIG_START( 40love, fortyl_state )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(fortyl_state, irq0_line_hold, 2*60) /* source/number of IRQs is unknown */
- MCFG_CPU_ADD("mcu",M68705,18432000/6) /* OK */
- MCFG_CPU_PROGRAM_MAP(buggychl_mcu_map)
- MCFG_DEVICE_ADD("bmcu", BUGGYCHL_MCU, 0)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 18432000/6) /* OK */
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* high interleave to ensure proper synchronization of CPUs */
MCFG_MACHINE_START_OVERRIDE(fortyl_state,40love)
@@ -1107,9 +1103,7 @@ static MACHINE_CONFIG_START( undoukai, fortyl_state )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(fortyl_state, irq0_line_hold, 2*60) /* source/number of IRQs is unknown */
-// MCFG_CPU_ADD("mcu",M68705,18432000/6)
-// MCFG_CPU_PROGRAM_MAP(buggychl_mcu_map)
-// MCFG_DEVICE_ADD("bmcu", BUGGYCHL_MCU, 0)
+// MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 18432000/6)
MCFG_MACHINE_START_OVERRIDE(fortyl_state,undoukai)
MCFG_MACHINE_RESET_OVERRIDE(fortyl_state,undoukai) /* init machine */
@@ -1175,7 +1169,7 @@ ROM_START( 40love )
ROM_LOAD( "a30-12.u38", 0x8000, 0x2000, CRC(f7afd475) SHA1(dd09d5ca7fec5e0454f9efb8ebc722561010f124) )
ROM_LOAD( "a30-13.u39", 0xa000, 0x2000, CRC(e806630f) SHA1(09022aae88ea0171a0aacf3260fa3a95e8faeb21) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a30-14" , 0x0000, 0x0800, CRC(c4690279) SHA1(60bc77e03b9be434bb97a374a2fedeb8d049a660) )
ROM_REGION( 0x8000, "gfx1", 0 )
diff --git a/src/mame/drivers/bigevglf.cpp b/src/mame/drivers/bigevglf.cpp
index e93c9ac3ca4..6309831483b 100644
--- a/src/mame/drivers/bigevglf.cpp
+++ b/src/mame/drivers/bigevglf.cpp
@@ -346,8 +346,8 @@ static ADDRESS_MAP_START( bigevglf_sub_portmap, AS_IO, 8, bigevglf_state )
AM_RANGE(0x06, 0x06) AM_READ_PORT("DSW2")
AM_RANGE(0x07, 0x07) AM_READNOP
AM_RANGE(0x08, 0x08) AM_WRITE(beg_port08_w) /* muxed port select + other unknown stuff */
- AM_RANGE(0x0b, 0x0b) AM_READ(bigevglf_mcu_r)
- AM_RANGE(0x0c, 0x0c) AM_WRITE(bigevglf_mcu_w)
+ AM_RANGE(0x0b, 0x0b) AM_DEVREAD("bmcu", taito68705_mcu_device, mcu_r)
+ AM_RANGE(0x0c, 0x0c) AM_DEVWRITE("bmcu", taito68705_mcu_device, mcu_w)
AM_RANGE(0x0e, 0x0e) AM_WRITENOP /* 0-enable MCU, 1-keep reset line ASSERTED; D0 goes to the input of ls74 and the /Q of this ls74 goes to reset line on 68705 */
AM_RANGE(0x10, 0x17) AM_WRITE(beg13_a_clr_w)
AM_RANGE(0x18, 0x1f) AM_WRITE(beg13_b_set_w)
@@ -376,20 +376,6 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, bigevglf_state )
ADDRESS_MAP_END
-/*********************************************************************************/
-/* MCU */
-
-static ADDRESS_MAP_START( m68705_map, AS_PROGRAM, 8, bigevglf_state )
- ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_READWRITE(bigevglf_68705_port_a_r, bigevglf_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_READWRITE(bigevglf_68705_port_b_r, bigevglf_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_READWRITE(bigevglf_68705_port_c_r, bigevglf_68705_port_c_w)
- AM_RANGE(0x0004, 0x0004) AM_WRITE(bigevglf_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_WRITE(bigevglf_68705_ddr_b_w)
- AM_RANGE(0x0006, 0x0006) AM_WRITE(bigevglf_68705_ddr_c_w)
- AM_RANGE(0x0010, 0x007f) AM_RAM
- AM_RANGE(0x0080, 0x07ff) AM_ROM
-ADDRESS_MAP_END
static const gfx_layout gfxlayout =
@@ -424,20 +410,10 @@ void bigevglf_state::machine_start()
save_item(NAME(m_from_sound));
save_item(NAME(m_sound_state));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_mcu_sent));
+
save_item(NAME(m_mcu_coin_bit5));
- save_item(NAME(m_port_a_in));
- save_item(NAME(m_port_a_out));
- save_item(NAME(m_ddr_a));
- save_item(NAME(m_port_b_in));
- save_item(NAME(m_port_b_out));
- save_item(NAME(m_ddr_b));
- save_item(NAME(m_port_c_in));
- save_item(NAME(m_port_c_out));
- save_item(NAME(m_ddr_c));
- save_item(NAME(m_from_mcu));
+
}
void bigevglf_state::machine_reset()
@@ -457,20 +433,7 @@ void bigevglf_state::machine_reset()
m_from_sound = 0;
m_sound_state = 0;
- m_main_sent = 0;
- m_mcu_sent = 0;
m_mcu_coin_bit5 = 0;
-
- m_port_a_in = 0;
- m_port_a_out = 0;
- m_ddr_a = 0;
- m_port_b_in = 0;
- m_port_b_out = 0;
- m_ddr_b = 0;
- m_port_c_in = 0;
- m_port_c_out = 0;
- m_ddr_c = 0;
- m_from_mcu = 0;
}
@@ -493,8 +456,7 @@ static MACHINE_CONFIG_START( bigevglf, bigevglf_state )
2 irqs/frame give good music tempo but also SOUND ERROR in test mode,
4 irqs/frame give SOUND OK in test mode but music seems to be running too fast */
- MCFG_CPU_ADD("mcu", M68705,2000000) /* ??? */
- MCFG_CPU_PROGRAM_MAP(m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU_BEG, 2000000) /* ??? */
MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - interleaving is forced on the fly */
@@ -559,7 +521,7 @@ ROM_START( bigevglf )
ROM_LOAD( "a67-17", 0x4000, 0x4000, CRC(9f57deae) SHA1(dbdb3d77c3de0113ef6671aec854e4e44ee162ef))
ROM_LOAD( "a67-18", 0x8000, 0x4000, CRC(40d54fed) SHA1(bfa0922809bffafec15d3ef59ac8b8ad653860a1))
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a67_19-1", 0x0000, 0x0800, CRC(25691658) SHA1(aabf47abac43abe2ffed18ead1cb94e587149e6e))
ROM_REGION( 0x20000, "gfx1", 0 )
@@ -590,7 +552,7 @@ ROM_START( bigevglfj )
ROM_LOAD( "a67-17", 0x4000, 0x4000, CRC(9f57deae) SHA1(dbdb3d77c3de0113ef6671aec854e4e44ee162ef))
ROM_LOAD( "a67-18", 0x8000, 0x4000, CRC(40d54fed) SHA1(bfa0922809bffafec15d3ef59ac8b8ad653860a1))
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a67_19-1", 0x0000, 0x0800, CRC(25691658) SHA1(aabf47abac43abe2ffed18ead1cb94e587149e6e))
ROM_REGION( 0x20000, "gfx1", 0 )
diff --git a/src/mame/drivers/bking.cpp b/src/mame/drivers/bking.cpp
index 44b0adfa450..b4305d2351f 100644
--- a/src/mame/drivers/bking.cpp
+++ b/src/mame/drivers/bking.cpp
@@ -120,8 +120,8 @@ static ADDRESS_MAP_START( bking3_io_map, AS_IO, 8, bking_state )
// AM_RANGE(0x0c, 0x0c) AM_WRITE(bking_eport2_w) this is not shown to be connected anywhere
AM_RANGE(0x0d, 0x0d) AM_WRITE(bking_hitclr_w)
AM_RANGE(0x07, 0x1f) AM_READ(bking_pos_r)
- AM_RANGE(0x2f, 0x2f) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_mcu_r, buggychl_mcu_w)
- AM_RANGE(0x4f, 0x4f) AM_DEVREAD("bmcu", buggychl_mcu_device, buggychl_mcu_status_r) AM_WRITE(unk_w)
+ AM_RANGE(0x2f, 0x2f) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ AM_RANGE(0x4f, 0x4f) AM_DEVREAD("bmcu", taito68705_mcu_device, mcu_status_r) AM_WRITE(unk_w)
AM_RANGE(0x60, 0x60) AM_READ(bking3_extrarom_r)
AM_RANGE(0x6f, 0x6f) AM_READWRITE(bking3_ext_check_r, bking3_addr_h_w)
AM_RANGE(0x8f, 0x8f) AM_WRITE(bking3_addr_l_w)
@@ -140,68 +140,6 @@ static ADDRESS_MAP_START( bking_audio_map, AS_PROGRAM, 8, bking_state )
AM_RANGE(0xe000, 0xefff) AM_ROM /* Space for diagnostic ROM */
ADDRESS_MAP_END
-#if 0
-READ8_MEMBER(bking_state::bking3_68705_port_a_r)
-{
- //printf("port_a_r = %02X\n",(m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a));
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER(bking_state::bking3_68705_port_a_w)
-{
- m_port_a_out = data;
-// printf("port_a_out = %02X\n",data);
-}
-
-WRITE8_MEMBER(bking_state::bking3_68705_ddr_a_w)
-{
- m_ddr_a = data;
-}
-
-READ8_MEMBER(bking_state::bking3_68705_port_b_r)
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER(bking_state::bking3_68705_port_b_w)
-{
-// if(data != 0xff)
-// printf("port_b_out = %02X\n",data);
-
- if (~data & 0x02)
- {
- m_port_a_in = from_main;
- if (main_sent) m_mcu->set_input_line(0, CLEAR_LINE);
- main_sent = 0;
- }
-
- if (~data & 0x04)
- {
- /* 68705 is writing data for the Z80 */
- from_mcu = m_port_a_out;
- mcu_sent = 1;
- }
-
- if(data != 0xff && data != 0xfb && data != 0xfd)
- printf("port_b_w = %X\n",data);
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER(bking_state::bking3_68705_ddr_b_w)
-{
- m_ddr_b = data;
-}
-
-READ8_MEMBER(bking_state::bking3_68705_port_c_r)
-{
- int port_c_in = 0;
- if (main_sent) port_c_in |= 0x01;
- if (!mcu_sent) port_c_in |= 0x02;
-//logerror("%04x: 68705 port C read %02x\n",space.device().safe_pc(),port_c_in);
- return port_c_in;
-}
-#endif
static INPUT_PORTS_START( bking )
PORT_START("IN0")
@@ -440,8 +378,6 @@ void bking_state::machine_reset()
MACHINE_RESET_MEMBER(bking_state,bking3)
{
- m_mcu->set_input_line(0, CLEAR_LINE);
-
bking_state::machine_reset();
/* misc */
@@ -505,9 +441,7 @@ static MACHINE_CONFIG_DERIVED( bking3, bking )
MCFG_CPU_MODIFY("main_cpu")
MCFG_CPU_IO_MAP(bking3_io_map)
- MCFG_CPU_ADD("mcu", M68705, XTAL_3MHz) /* xtal is 3MHz, divided by 4 internally */
- MCFG_CPU_PROGRAM_MAP(buggychl_mcu_map)
- MCFG_DEVICE_ADD("bmcu", BUGGYCHL_MCU, 0)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL_3MHz) /* xtal is 3MHz, divided by 4 internally */
MCFG_MACHINE_START_OVERRIDE(bking_state,bking3)
MCFG_MACHINE_RESET_OVERRIDE(bking_state,bking3)
@@ -774,7 +708,7 @@ ROM_START( bking3 )
ROM_LOAD( "a24-19.4d", 0x1000, 0x1000, CRC(817f9c2a) SHA1(7365ecf2700e1fd13016408f5493f8d51aab5bbd) )
ROM_LOAD( "a24-20.4b", 0x2000, 0x1000, CRC(0e9e16d6) SHA1(43c69602a8d9c34c527ce54472db84168acc4ef4) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a24_22.ic17", 0x000000, 0x000800, CRC(27c497d5) SHA1(c6c72bbf0537da53148fa0a56d412ab46129d29c) ) //M68705P5S uC 3MHz xtal
ROM_REGION( 0x6000, "gfx1", 0 ) /* Tiles */
diff --git a/src/mame/drivers/bublbobl.cpp b/src/mame/drivers/bublbobl.cpp
index 434cc015df9..63ea6bf6330 100644
--- a/src/mame/drivers/bublbobl.cpp
+++ b/src/mame/drivers/bublbobl.cpp
@@ -389,9 +389,19 @@ static ADDRESS_MAP_START( tokio_map, AS_PROGRAM, 8, bublbobl_state )
AM_RANGE(0xfb00, 0xfb00) AM_WRITE(tokio_videoctrl_w)
AM_RANGE(0xfb80, 0xfb80) AM_WRITE(bublbobl_nmitrigger_w)
AM_RANGE(0xfc00, 0xfc00) AM_READWRITE(bublbobl_sound_status_r, bublbobl_sound_command_w)
- AM_RANGE(0xfe00, 0xfe00) AM_READWRITE(tokio_mcu_r, tokio_mcu_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( tokio_map_mcu, AS_PROGRAM, 8, bublbobl_state )
+ AM_IMPORT_FROM(tokio_map)
+ AM_RANGE(0xfe00, 0xfe00) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tokio_map_bootleg, AS_PROGRAM, 8, bublbobl_state )
+ AM_IMPORT_FROM(tokio_map)
+ AM_RANGE(0xfe00, 0xfe00) AM_READ( tokiob_mcu_r )
+ADDRESS_MAP_END
+
+
static ADDRESS_MAP_START( tokio_slave_map, AS_PROGRAM, 8, bublbobl_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x97ff) AM_RAM AM_SHARE("share1")
@@ -619,7 +629,7 @@ static INPUT_PORTS_START( dland )
PORT_DIPSETTING( 0x20, "100 (Cheat)")
INPUT_PORTS_END
-static INPUT_PORTS_START( tokio )
+static INPUT_PORTS_START( tokio_base )
PORT_START("DSW0")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW A:1")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
@@ -669,8 +679,8 @@ static INPUT_PORTS_START( tokio )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, bublbobl_state,tokio_main_sent_r, nullptr)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, bublbobl_state,tokio_mcu_sent_r, nullptr)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) // see INPUT_PORTS_START( tokio )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) // see INPUT_PORTS_START( tokio )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -695,7 +705,13 @@ static INPUT_PORTS_START( tokio )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
+static INPUT_PORTS_START( tokio )
+ PORT_INCLUDE( tokio_base )
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER("bmcu", taito68705_mcu_device, main_sent_r, nullptr)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER("bmcu", taito68705_mcu_device, mcu_sent_r, nullptr)
+INPUT_PORTS_END
/*************************************
*
@@ -744,15 +760,6 @@ MACHINE_RESET_MEMBER(bublbobl_state,common)
MACHINE_START_MEMBER(bublbobl_state,tokio)
{
MACHINE_START_CALL_MEMBER(common);
-
-
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
- save_item(NAME(m_from_mcu_latch));
- save_item(NAME(m_to_mcu_latch));
- save_item(NAME(m_old_portB));
}
@@ -767,7 +774,7 @@ static MACHINE_CONFIG_START( tokio, bublbobl_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MAIN_XTAL/4) // 6 MHz
- MCFG_CPU_PROGRAM_MAP(tokio_map)
+ MCFG_CPU_PROGRAM_MAP(tokio_map_mcu)
MCFG_CPU_VBLANK_INT_DRIVER("screen", bublbobl_state, irq0_line_hold)
MCFG_CPU_ADD("slave", Z80, MAIN_XTAL/4) // 6 MHz
@@ -777,12 +784,7 @@ static MACHINE_CONFIG_START( tokio, bublbobl_state )
MCFG_CPU_ADD("audiocpu", Z80, MAIN_XTAL/8) // 3 MHz
MCFG_CPU_PROGRAM_MAP(tokio_sound_map) // NMIs are triggered by the main CPU, IRQs are triggered by the YM2203
- MCFG_CPU_ADD("mcu", M68705_NEW, MAIN_XTAL/8) // 3 Mhz
- MCFG_M68705_PORTA_R_CB(READ8(bublbobl_state, tokio_mcu_porta_r))
- MCFG_M68705_PORTA_W_CB(WRITE8(bublbobl_state, tokio_mcu_porta_w))
- MCFG_M68705_PORTB_W_CB(WRITE8(bublbobl_state, tokio_mcu_portb_w))
- MCFG_M68705_PORTC_R_CB(READ8(bublbobl_state, tokio_mcu_portc_r))
-
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, MAIN_XTAL/8) // 3 Mhz
MCFG_QUANTUM_PERFECT_CPU("maincpu")
@@ -816,9 +818,16 @@ static MACHINE_CONFIG_START( tokio, bublbobl_state )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tokiob, tokio )
- MCFG_DEVICE_REMOVE("mcu")
+
+ MCFG_DEVICE_REMOVE("maincpu")
+ MCFG_DEVICE_REMOVE("bmcu")
+
+ MCFG_CPU_ADD("maincpu", Z80, MAIN_XTAL/4) // 6 MHz
+ MCFG_CPU_PROGRAM_MAP(tokio_map_bootleg)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", bublbobl_state, irq0_line_hold)
MACHINE_CONFIG_END
+
MACHINE_START_MEMBER(bublbobl_state,bublbobl)
{
MACHINE_START_CALL_MEMBER(common);
@@ -999,7 +1008,7 @@ ROM_START( tokio ) // newer japan set, has -1 revision of roms 02, 03 and 06
ROM_REGION( 0x10000, "audiocpu", 0 ) /* audio CPU */
ROM_LOAD( "a71-07.ic10", 0x0000, 0x08000, CRC(f298cc7b) SHA1(ebf5c804aa07b7f198ec3e1f8d1e111cd89ebdf3) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller (68705P5) */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller (68705P5) */
ROM_LOAD( "a71__24.ic57", 0x0000, 0x0800, CRC(0f4b25de) SHA1(e2d82aa8d8cc6a86aaf5715ef9cb62f526fd5b11) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* gfx roms, on gfx board */
@@ -1042,7 +1051,7 @@ ROM_START( tokioo ) // older japan set, has older roms 02, 03, 06
ROM_REGION( 0x10000, "audiocpu", 0 ) /* audio CPU */
ROM_LOAD( "a71-07.ic10", 0x0000, 0x08000, CRC(f298cc7b) SHA1(ebf5c804aa07b7f198ec3e1f8d1e111cd89ebdf3) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller (68705P5) */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller (68705P5) */
ROM_LOAD( "a71__24.ic57", 0x0000, 0x0800, CRC(0f4b25de) SHA1(e2d82aa8d8cc6a86aaf5715ef9cb62f526fd5b11) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* gfx roms, on gfx board */
@@ -1085,7 +1094,7 @@ ROM_START( tokiou )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* audio CPU */
ROM_LOAD( "a71-07.ic10", 0x0000, 0x08000, CRC(f298cc7b) SHA1(ebf5c804aa07b7f198ec3e1f8d1e111cd89ebdf3) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller (68705P5) */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller (68705P5) */
ROM_LOAD( "a71__24.ic57", 0x0000, 0x0800, CRC(0f4b25de) SHA1(e2d82aa8d8cc6a86aaf5715ef9cb62f526fd5b11) )
ROM_REGION( 0x80000, "gfx1", ROMREGION_INVERT ) /* gfx roms, on gfx board */
@@ -1871,12 +1880,7 @@ DRIVER_INIT_MEMBER(bublbobl_state,tokio)
m_video_enable = 1;
}
-DRIVER_INIT_MEMBER(bublbobl_state,tokiob)
-{
- DRIVER_INIT_CALL(tokio);
- m_maincpu->space(AS_PROGRAM).install_read_handler(0xfe00, 0xfe00, read8_delegate(FUNC(bublbobl_state::tokiob_mcu_r),this) );
-}
DRIVER_INIT_MEMBER(bublbobl_state,dland)
{
@@ -1902,7 +1906,7 @@ DRIVER_INIT_MEMBER(bublbobl_state,dland)
GAME( 1986, tokio, 0, tokio, tokio, bublbobl_state, tokio, ROT90, "Taito Corporation", "Tokio / Scramble Formation (newer)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, tokioo, tokio, tokio, tokio, bublbobl_state, tokio, ROT90, "Taito Corporation", "Tokio / Scramble Formation (older)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, tokiou, tokio, tokio, tokio, bublbobl_state, tokio, ROT90, "Taito America Corporation (Romstar license)", "Tokio / Scramble Formation (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, tokiob, tokio, tokiob, tokio, bublbobl_state, tokiob, ROT90, "bootleg", "Tokio / Scramble Formation (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, tokiob, tokio, tokiob, tokio_base, bublbobl_state, tokio, ROT90, "bootleg", "Tokio / Scramble Formation (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, bublbobl, 0, bublbobl, bublbobl, bublbobl_state, bublbobl, ROT0, "Taito Corporation", "Bubble Bobble (Japan, Ver 0.1)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, bublbobl1, bublbobl, bublbobl, bublbobl, bublbobl_state, bublbobl, ROT0, "Taito Corporation", "Bubble Bobble (Japan, Ver 0.0)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/buggychl.cpp b/src/mame/drivers/buggychl.cpp
index 1ee00ce3b4e..9c802071125 100644
--- a/src/mame/drivers/buggychl.cpp
+++ b/src/mame/drivers/buggychl.cpp
@@ -140,8 +140,8 @@ static ADDRESS_MAP_START( buggychl_map, AS_PROGRAM, 8, buggychl_state )
AM_RANGE(0xd200, 0xd200) AM_WRITE(bankswitch_w)
AM_RANGE(0xd300, 0xd300) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xd303, 0xd303) AM_WRITE(buggychl_sprite_lookup_bank_w)
- AM_RANGE(0xd400, 0xd400) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_mcu_r, buggychl_mcu_w)
- AM_RANGE(0xd401, 0xd401) AM_DEVREAD("bmcu", buggychl_mcu_device, buggychl_mcu_status_r)
+ AM_RANGE(0xd400, 0xd400) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ AM_RANGE(0xd401, 0xd401) AM_DEVREAD("bmcu", taito68705_mcu_device, mcu_status_r)
AM_RANGE(0xd500, 0xd57f) AM_WRITEONLY AM_SHARE("spriteram")
AM_RANGE(0xd600, 0xd600) AM_READ_PORT("DSW1")
AM_RANGE(0xd601, 0xd601) AM_READ_PORT("DSW2")
@@ -347,8 +347,6 @@ void buggychl_state::machine_start()
void buggychl_state::machine_reset()
{
- m_mcu->set_input_line(0, CLEAR_LINE);
-
m_sound_nmi_enable = 0;
m_pending_nmi = 0;
m_sl_bank = 0;
@@ -370,9 +368,8 @@ static MACHINE_CONFIG_START( buggychl, buggychl_state )
MCFG_CPU_PERIODIC_INT_DRIVER(buggychl_state, irq0_line_hold, 60*60) /* irq is timed, tied to the cpu clock and not to vblank */
/* nmi is caused by the main cpu */
- MCFG_CPU_ADD("mcu", M68705,8000000/2) /* 4 MHz */
- MCFG_CPU_PROGRAM_MAP(buggychl_mcu_map)
- MCFG_DEVICE_ADD("bmcu", BUGGYCHL_MCU, 0)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU,8000000/2) /* 4 MHz */
+
MCFG_WATCHDOG_ADD("watchdog")
@@ -438,7 +435,7 @@ ROM_START( buggychl )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound Z80 */
ROM_LOAD( "a22-24.28", 0x00000, 0x4000, CRC(1e7f841f) SHA1(2dc0787b08d32acb78291b689c02dbb83d04d08c) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 8k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 8k for the microcontroller */
ROM_LOAD( "a22-19.31", 0x00000, 0x0800, CRC(06a71df0) SHA1(28183e6769e1471e7f28dc2a9f5b54e14b7ef339) )
ROM_REGION( 0x20000, "gfx1", 0 ) /* sprites */
@@ -468,7 +465,7 @@ ROM_START( buggychlt )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound Z80 */
ROM_LOAD( "a22-24.28", 0x00000, 0x4000, CRC(1e7f841f) SHA1(2dc0787b08d32acb78291b689c02dbb83d04d08c) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 8k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 8k for the microcontroller */
ROM_LOAD( "a22-19.31", 0x00000, 0x0800, CRC(06a71df0) SHA1(28183e6769e1471e7f28dc2a9f5b54e14b7ef339) )
ROM_REGION( 0x20000, "gfx1", 0 ) /* sprites */
diff --git a/src/mame/drivers/flstory.cpp b/src/mame/drivers/flstory.cpp
index 88505594557..47a3456f29c 100644
--- a/src/mame/drivers/flstory.cpp
+++ b/src/mame/drivers/flstory.cpp
@@ -70,7 +70,7 @@ static ADDRESS_MAP_START( flstory_map, AS_PROGRAM, 8, flstory_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xc800, 0xcfff) AM_RAM /* unknown */
- AM_RANGE(0xd000, 0xd000) AM_READWRITE(flstory_mcu_r, flstory_mcu_w)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
AM_RANGE(0xd001, 0xd001) AM_WRITENOP /* watchdog? */
AM_RANGE(0xd002, 0xd002) AM_WRITENOP /* coin lock out? */
AM_RANGE(0xd400, 0xd400) AM_READWRITE(from_snd_r, sound_command_w)
@@ -81,7 +81,7 @@ static ADDRESS_MAP_START( flstory_map, AS_PROGRAM, 8, flstory_state )
AM_RANGE(0xd802, 0xd802) AM_READ_PORT("DSW2")
AM_RANGE(0xd803, 0xd803) AM_READ_PORT("SYSTEM")
AM_RANGE(0xd804, 0xd804) AM_READ_PORT("P1")
- AM_RANGE(0xd805, 0xd805) AM_READ(flstory_mcu_status_r)
+ AM_RANGE(0xd805, 0xd805) AM_DEVREAD("bmcu", taito68705_mcu_device, mcu_status_r)
AM_RANGE(0xd806, 0xd806) AM_READ_PORT("P2")
// AM_RANGE(0xda00, 0xda00) AM_WRITEONLY
AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_SHARE("spriteram")
@@ -441,17 +441,6 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, flstory_state )
AM_RANGE(0xe000, 0xefff) AM_ROM /* space for diagnostics ROM */
ADDRESS_MAP_END
-static ADDRESS_MAP_START( flstory_m68705_map, AS_PROGRAM, 8, flstory_state )
- ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_READWRITE(flstory_68705_port_a_r, flstory_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_READWRITE(flstory_68705_port_b_r, flstory_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_READWRITE(flstory_68705_port_c_r, flstory_68705_port_c_w)
- AM_RANGE(0x0004, 0x0004) AM_WRITE(flstory_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_WRITE(flstory_68705_ddr_b_w)
- AM_RANGE(0x0006, 0x0006) AM_WRITE(flstory_68705_ddr_c_w)
- AM_RANGE(0x0010, 0x007f) AM_RAM
- AM_RANGE(0x0080, 0x07ff) AM_ROM
-ADDRESS_MAP_END
@@ -992,22 +981,12 @@ void flstory_state::machine_start()
save_item(NAME(m_snd_ctrl2));
save_item(NAME(m_snd_ctrl3));
/* mcu */
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_port_a_in));
- save_item(NAME(m_port_a_out));
- save_item(NAME(m_ddr_a));
- save_item(NAME(m_port_b_in));
- save_item(NAME(m_port_b_out));
- save_item(NAME(m_ddr_b));
- save_item(NAME(m_port_c_in));
- save_item(NAME(m_port_c_out));
- save_item(NAME(m_ddr_c));
save_item(NAME(m_mcu_select));
+ save_item(NAME(m_from_mcu));
}
+
+
MACHINE_RESET_MEMBER(flstory_state,flstory)
{
MACHINE_RESET_CALL_MEMBER(ta7630);
@@ -1026,20 +1005,8 @@ MACHINE_RESET_MEMBER(flstory_state,flstory)
m_snd_ctrl2 = 0;
m_snd_ctrl3 = 0;
/* mcu */
- m_from_main = 0;
- m_from_mcu = 0;
- m_mcu_sent = 0;
- m_main_sent = 0;
- m_port_a_in = 0;
- m_port_a_out = 0;
- m_ddr_a = 0;
- m_port_b_in = 0;
- m_port_b_out = 0;
- m_ddr_b = 0;
- m_port_c_in = 0;
- m_port_c_out = 0;
- m_ddr_c = 0;
m_mcu_select = 0;
+ m_from_mcu = 0;
}
static MACHINE_CONFIG_START( flstory, flstory_state )
@@ -1054,8 +1021,7 @@ static MACHINE_CONFIG_START( flstory, flstory_state )
MCFG_CPU_PERIODIC_INT_DRIVER(flstory_state, irq0_line_hold, 2*60) /* IRQ generated by ??? */
/* NMI generated by the main CPU */
- MCFG_CPU_ADD("mcu", M68705, XTAL_18_432MHz/6) /* verified on pcb */
- MCFG_CPU_PROGRAM_MAP(flstory_m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL_18_432MHz/6) /* verified on pcb */
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@@ -1316,7 +1282,7 @@ ROM_START( flstory )
ROM_LOAD( "snd.22", 0x0000, 0x2000, CRC(d58b201d) SHA1(1c9c2936ec95a8fa920d58668bea420c5e15008f) )
ROM_LOAD( "snd.23", 0x2000, 0x2000, CRC(25e7fd9d) SHA1(b9237459e3d8acf8502a693914e50714a37d515e) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a45.mcu", 0x0000, 0x0800, CRC(5378253c) SHA1(e1ae1ab01e470b896c1d74ad4088928602a21a1b) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@@ -1340,7 +1306,7 @@ ROM_START( flstoryj )
ROM_LOAD( "a45_12.8", 0x0000, 0x2000, CRC(d6f593fb) SHA1(8551ef22c2cdd9df8d7949a178883f56ea56a4a2) )
ROM_LOAD( "a45_13.9", 0x2000, 0x2000, CRC(451f92f9) SHA1(f4196e6d3420983b74001303936d086a48b10827) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a45.mcu", 0x0000, 0x0800, CRC(5378253c) SHA1(e1ae1ab01e470b896c1d74ad4088928602a21a1b) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@@ -1367,7 +1333,7 @@ ROM_START( onna34ro )
ROM_LOAD( "a52-15.37s", 0x6000, 0x2000, CRC(5afc21d0) SHA1(317d5fb3a48ce5e13e02c5c6431fa08ada115d27) )
ROM_LOAD( "a52-16.38s", 0x8000, 0x2000, CRC(ccf42aee) SHA1(a6eb01c5384724999631b55700dade430b71ca95) )
- ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a52-17.54c", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@@ -1394,7 +1360,7 @@ ROM_START( onna34roa )
ROM_LOAD( "a52-15.37s", 0x6000, 0x2000, CRC(5afc21d0) SHA1(317d5fb3a48ce5e13e02c5c6431fa08ada115d27) )
ROM_LOAD( "a52-16.38s", 0x8000, 0x2000, CRC(ccf42aee) SHA1(a6eb01c5384724999631b55700dade430b71ca95) )
- ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a52-17.54c", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@@ -1509,7 +1475,7 @@ ROM_START( victnine )
ROM_LOAD( "a16-16.38", 0x8000, 0x2000, CRC(9395351b) SHA1(8f97bdf03dec47bcaaa62fb66c545566776116be) )
ROM_LOAD( "a16-17.39", 0xa000, 0x2000, CRC(872270b3) SHA1(2298cb8ced6c3e9afb430faab1b38ba8f2fa93b5) )
- ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a16-18.mcu", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x10000, "gfx1", ROMREGION_INVERT )
@@ -1578,7 +1544,7 @@ ROM_START( rumba )
ROM_LOAD( "a23_09.bin", 0x2000, 0x2000, CRC(d0a101d3) SHA1(c92bb1ce67bec394fd8ce303d9e61eac12493b5d) )
ROM_LOAD( "a23_10.bin", 0x4000, 0x2000, CRC(f9447bd4) SHA1(68c02249ca0e5b923cddb4bff8d090963b9c78e4) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a23-11.mc68705p5s", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT )
diff --git a/src/mame/drivers/lkage.cpp b/src/mame/drivers/lkage.cpp
index d8d6a58e181..948f66c048b 100644
--- a/src/mame/drivers/lkage.cpp
+++ b/src/mame/drivers/lkage.cpp
@@ -139,7 +139,6 @@ static ADDRESS_MAP_START( lkage_map, AS_PROGRAM, 8, lkage_state )
AM_RANGE(0xf000, 0xf003) AM_RAM AM_SHARE("vreg") /* video registers */
AM_RANGE(0xf060, 0xf060) AM_WRITE(lkage_sound_command_w)
AM_RANGE(0xf061, 0xf061) AM_WRITENOP AM_READ(sound_status_r)
- AM_RANGE(0xf062, 0xf062) AM_READWRITE(lkage_mcu_r,lkage_mcu_w)
AM_RANGE(0xf063, 0xf063) AM_WRITENOP /* pulsed; nmi on sound cpu? */
AM_RANGE(0xf080, 0xf080) AM_READ_PORT("DSW1")
AM_RANGE(0xf081, 0xf081) AM_READ_PORT("DSW2")
@@ -147,7 +146,6 @@ static ADDRESS_MAP_START( lkage_map, AS_PROGRAM, 8, lkage_state )
AM_RANGE(0xf083, 0xf083) AM_READ_PORT("SYSTEM")
AM_RANGE(0xf084, 0xf084) AM_READ_PORT("P1")
AM_RANGE(0xf086, 0xf086) AM_READ_PORT("P2")
- AM_RANGE(0xf087, 0xf087) AM_READ(lkage_mcu_status_r)
AM_RANGE(0xf0a0, 0xf0a3) AM_RAM /* unknown */
AM_RANGE(0xf0c0, 0xf0c5) AM_RAM AM_SHARE("scroll")
AM_RANGE(0xf0e1, 0xf0e1) AM_WRITENOP /* pulsed */
@@ -156,6 +154,18 @@ static ADDRESS_MAP_START( lkage_map, AS_PROGRAM, 8, lkage_state )
AM_RANGE(0xf400, 0xffff) AM_RAM_WRITE(lkage_videoram_w) AM_SHARE("videoram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( lkage_map_mcu, AS_PROGRAM, 8, lkage_state )
+ AM_IMPORT_FROM(lkage_map)
+ AM_RANGE(0xf062, 0xf062) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ AM_RANGE(0xf087, 0xf087) AM_DEVREAD("bmcu", taito68705_mcu_device, mcu_status_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( lkage_map_boot, AS_PROGRAM, 8, lkage_state )
+ AM_IMPORT_FROM(lkage_map)
+ AM_RANGE(0xf062, 0xf062) AM_READWRITE(fake_mcu_r,fake_mcu_w)
+ AM_RANGE(0xf087, 0xf087) AM_READ(fake_status_r)
+ADDRESS_MAP_END
+
READ8_MEMBER(lkage_state::port_fetch_r)
{
@@ -166,17 +176,6 @@ static ADDRESS_MAP_START( lkage_io_map, AS_IO, 8, lkage_state )
AM_RANGE(0x4000, 0x7fff) AM_READ(port_fetch_r)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( lkage_m68705_map, AS_PROGRAM, 8, lkage_state )
- ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_READWRITE(lkage_68705_port_a_r,lkage_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_READWRITE(lkage_68705_port_b_r,lkage_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_READWRITE(lkage_68705_port_c_r,lkage_68705_port_c_w)
- AM_RANGE(0x0004, 0x0004) AM_WRITE(lkage_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_WRITE(lkage_68705_ddr_b_w)
- AM_RANGE(0x0006, 0x0006) AM_WRITE(lkage_68705_ddr_c_w)
- AM_RANGE(0x0010, 0x007f) AM_RAM
- AM_RANGE(0x0080, 0x07ff) AM_ROM
-ADDRESS_MAP_END
/***************************************************************************/
@@ -489,20 +488,6 @@ void lkage_state::machine_start()
save_item(NAME(m_mcu_val));
save_item(NAME(m_sound_nmi_enable));
save_item(NAME(m_pending_nmi));
-
- save_item(NAME(m_port_a_in));
- save_item(NAME(m_port_a_out));
- save_item(NAME(m_ddr_a));
- save_item(NAME(m_port_b_in));
- save_item(NAME(m_port_b_out));
- save_item(NAME(m_ddr_b));
- save_item(NAME(m_port_c_in));
- save_item(NAME(m_port_c_out));
- save_item(NAME(m_ddr_c));
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
}
void lkage_state::machine_reset()
@@ -514,26 +499,13 @@ void lkage_state::machine_reset()
m_sound_nmi_enable = 0;
m_pending_nmi = 0;
- m_port_a_in = 0;
- m_port_a_out = 0;
- m_ddr_a = 0;
- m_port_b_in = 0;
- m_port_b_out = 0;
- m_ddr_b = 0;
- m_port_c_in = 0;
- m_port_c_out = 0;
- m_ddr_c = 0;
- m_mcu_sent = 0;
- m_main_sent = 0;
- m_from_main = 0;
- m_from_mcu = 0;
}
static MACHINE_CONFIG_START( lkage, lkage_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MAIN_CPU_CLOCK)
- MCFG_CPU_PROGRAM_MAP(lkage_map)
+ MCFG_CPU_PROGRAM_MAP(lkage_map_mcu)
MCFG_CPU_IO_MAP(lkage_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", lkage_state, irq0_line_hold)
@@ -541,8 +513,7 @@ static MACHINE_CONFIG_START( lkage, lkage_state )
MCFG_CPU_PROGRAM_MAP(lkage_sound_map)
/* IRQs are triggered by the YM2203 */
- MCFG_CPU_ADD("mcu", M68705,MCU_CLOCK)
- MCFG_CPU_PROGRAM_MAP(lkage_m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU,MCU_CLOCK)
/* video hardware */
@@ -583,7 +554,7 @@ static MACHINE_CONFIG_START( lkageb, lkage_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,MAIN_CPU_CLOCK)
- MCFG_CPU_PROGRAM_MAP(lkage_map)
+ MCFG_CPU_PROGRAM_MAP(lkage_map_boot)
MCFG_CPU_IO_MAP(lkage_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", lkage_state, irq0_line_hold)
@@ -633,7 +604,7 @@ ROM_START( lkage )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound CPU) */
ROM_LOAD( "a54-04.54", 0x0000, 0x8000, CRC(541faf9a) SHA1(b142ff3bd198f700697ec06ea92db3109ab5818e) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 68705 MCU code */
+ ROM_REGION( 0x10000, "bmcu:mcu", 0 ) /* 68705 MCU code */
ROM_LOAD( "a54-09.53", 0x0000, 0x0800, CRC(0e8b8846) SHA1(a4a105462b0127229bb7edfadd2e581c7e40f1cc) )
ROM_REGION( 0x4000, "user1", 0 ) /* data */
@@ -663,7 +634,7 @@ ROM_START( lkageo )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound CPU) */
ROM_LOAD( "a54-04.54", 0x0000, 0x8000, CRC(541faf9a) SHA1(b142ff3bd198f700697ec06ea92db3109ab5818e) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 68705 MCU code */
+ ROM_REGION( 0x10000, "bmcu:mcu", 0 ) /* 68705 MCU code */
ROM_LOAD( "a54-09.53", 0x0000, 0x0800, CRC(0e8b8846) SHA1(a4a105462b0127229bb7edfadd2e581c7e40f1cc) )
ROM_REGION( 0x4000, "user1", 0 ) /* data */
@@ -693,7 +664,7 @@ ROM_START( lkageoo )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound CPU) */
ROM_LOAD( "a54-04.54", 0x0000, 0x8000, CRC(541faf9a) SHA1(b142ff3bd198f700697ec06ea92db3109ab5818e) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 68705 MCU code */
+ ROM_REGION( 0x10000, "bmcu:mcu", 0 ) /* 68705 MCU code */
ROM_LOAD( "a54-09.53", 0x0000, 0x0800, CRC(0e8b8846) SHA1(a4a105462b0127229bb7edfadd2e581c7e40f1cc) )
ROM_REGION( 0x4000, "user1", 0 ) /* data */
@@ -876,7 +847,7 @@ ROM_START( bygone )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound CPU) */
ROM_LOAD( "a53_07.ic54", 0x0000, 0x8000, CRC(72f69a77) SHA1(dfc1050a4123b3c83ae733ece1b6fe2836beb901) )
- ROM_REGION( 0x10000, "mcu", 0 ) /* 68705 MCU code */
+ ROM_REGION( 0x10000, "bmcu:mcu", 0 ) /* 68705 MCU code */
ROM_LOAD( "a51_09.ic53", 0x0000, 0x0800, CRC(0e8b8846) SHA1(a4a105462b0127229bb7edfadd2e581c7e40f1cc) ) /* the same as lkage */
ROM_REGION( 0x4000, "user1", 0 ) /* data */
@@ -945,13 +916,6 @@ DRIVER_INIT_MEMBER(lkage_state,lkage)
m_sprite_dx=0;
}
-DRIVER_INIT_MEMBER(lkage_state,lkageb)
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0xf062, 0xf062, read8_delegate(FUNC(lkage_state::fake_mcu_r),this));
- m_maincpu->space(AS_PROGRAM).install_read_handler(0xf087, 0xf087, read8_delegate(FUNC(lkage_state::fake_status_r),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0xf062, 0xf062, write8_delegate(FUNC(lkage_state::fake_mcu_w),this));
- m_sprite_dx=0;
-}
DRIVER_INIT_MEMBER(lkage_state,bygone)
{
@@ -961,7 +925,7 @@ DRIVER_INIT_MEMBER(lkage_state,bygone)
GAME( 1984, lkage, 0, lkage, lkage, lkage_state, lkage, ROT0, "Taito Corporation", "The Legend of Kage", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1984, lkageo, lkage, lkage, lkage, lkage_state, lkage, ROT0, "Taito Corporation", "The Legend of Kage (older)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1984, lkageoo, lkage, lkage, lkage, lkage_state, lkage, ROT0, "Taito Corporation", "The Legend of Kage (oldest)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1984, lkageb, lkage, lkageb, lkageb, lkage_state, lkageb, ROT0, "bootleg", "The Legend of Kage (bootleg set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1984, lkageb2, lkage, lkageb, lkageb, lkage_state, lkageb, ROT0, "bootleg", "The Legend of Kage (bootleg set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1984, lkageb3, lkage, lkageb, lkageb, lkage_state, lkageb, ROT0, "bootleg", "The Legend of Kage (bootleg set 3)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, lkageb, lkage, lkageb, lkageb, lkage_state, lkage, ROT0, "bootleg", "The Legend of Kage (bootleg set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, lkageb2, lkage, lkageb, lkageb, lkage_state, lkage, ROT0, "bootleg", "The Legend of Kage (bootleg set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, lkageb3, lkage, lkageb, lkageb, lkage_state, lkage, ROT0, "bootleg", "The Legend of Kage (bootleg set 3)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1985, bygone, 0, lkage, bygone, lkage_state, bygone, ROT0, "Taito Corporation", "Bygone (prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/lsasquad.cpp b/src/mame/drivers/lsasquad.cpp
index 3bcdbb13a74..dd661a45ea5 100644
--- a/src/mame/drivers/lsasquad.cpp
+++ b/src/mame/drivers/lsasquad.cpp
@@ -185,7 +185,7 @@ static ADDRESS_MAP_START( lsasquad_map, AS_PROGRAM, 8, lsasquad_state )
AM_RANGE(0xea00, 0xea00) AM_WRITE(lsasquad_bankswitch_w)
AM_RANGE(0xec00, 0xec00) AM_READWRITE(lsasquad_sound_result_r,lsasquad_sound_command_w)
AM_RANGE(0xec01, 0xec01) AM_READ(lsasquad_sound_status_r)
- AM_RANGE(0xee00, 0xee00) AM_READWRITE(lsasquad_mcu_r,lsasquad_mcu_w)
+ AM_RANGE(0xee00, 0xee00) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( lsasquad_sound_map, AS_PROGRAM, 8, lsasquad_state )
@@ -200,16 +200,6 @@ static ADDRESS_MAP_START( lsasquad_sound_map, AS_PROGRAM, 8, lsasquad_state )
AM_RANGE(0xe000, 0xefff) AM_ROM /* space for diagnostic ROM? */
ADDRESS_MAP_END
-static ADDRESS_MAP_START( lsasquad_m68705_map, AS_PROGRAM, 8, lsasquad_state )
- ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_READWRITE(lsasquad_68705_port_a_r,lsasquad_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_READWRITE(lsasquad_68705_port_b_r,lsasquad_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_READ(lsasquad_mcu_status_r)
- AM_RANGE(0x0004, 0x0004) AM_WRITE(lsasquad_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_WRITE(lsasquad_68705_ddr_b_w)
- AM_RANGE(0x0010, 0x007f) AM_RAM
- AM_RANGE(0x0080, 0x07ff) AM_ROM
-ADDRESS_MAP_END
static ADDRESS_MAP_START( storming_map, AS_PROGRAM, 8, lsasquad_state )
@@ -392,7 +382,7 @@ static ADDRESS_MAP_START( daikaiju_map, AS_PROGRAM, 8, lsasquad_state )
AM_RANGE(0xea00, 0xea00) AM_WRITE(lsasquad_bankswitch_w)
AM_RANGE(0xec00, 0xec00) AM_WRITE(lsasquad_sound_command_w)
AM_RANGE(0xec01, 0xec01) AM_READ(lsasquad_sound_status_r)
- AM_RANGE(0xee00, 0xee00) AM_READWRITE(lsasquad_mcu_r, lsasquad_mcu_w)
+ AM_RANGE(0xee00, 0xee00) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( daikaiju_sound_map, AS_PROGRAM, 8, lsasquad_state )
@@ -549,16 +539,6 @@ MACHINE_START_MEMBER(lsasquad_state,lsasquad)
membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x2000);
- save_item(NAME(m_port_a_in));
- save_item(NAME(m_port_a_out));
- save_item(NAME(m_ddr_a));
- save_item(NAME(m_port_b_in));
- save_item(NAME(m_port_b_out));
- save_item(NAME(m_ddr_b));
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
save_item(NAME(m_sound_pending));
save_item(NAME(m_sound_nmi_enable));
@@ -574,17 +554,6 @@ MACHINE_RESET_MEMBER(lsasquad_state,lsasquad)
m_pending_nmi = 0;
m_sound_cmd = 0;
m_sound_result = 0;
-
- m_port_a_in = 0;
- m_port_a_out = 0;
- m_ddr_a = 0;
- m_port_b_in = 0;
- m_port_b_out = 0;
- m_ddr_b = 0;
- m_mcu_sent = 0;
- m_main_sent = 0;
- m_from_main = 0;
- m_from_mcu = 0;
}
/* Note: lsasquad clock values are not verified */
@@ -598,8 +567,8 @@ static MACHINE_CONFIG_START( lsasquad, lsasquad_state )
MCFG_CPU_ADD("audiocpu", Z80, MASTER_CLOCK / 8)
MCFG_CPU_PROGRAM_MAP(lsasquad_sound_map)
/* IRQs are triggered by the YM2203 */
- MCFG_CPU_ADD("mcu", M68705, MASTER_CLOCK / 8)
- MCFG_CPU_PROGRAM_MAP(lsasquad_m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, MASTER_CLOCK / 8)
+
MCFG_QUANTUM_TIME(attotime::from_hz(30000)) /* 500 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@@ -641,7 +610,7 @@ static MACHINE_CONFIG_DERIVED( storming, lsasquad )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(storming_map)
- MCFG_DEVICE_REMOVE("mcu")
+ MCFG_DEVICE_REMOVE("bmcu")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( daikaiju, lsasquad_state )
@@ -655,8 +624,7 @@ static MACHINE_CONFIG_START( daikaiju, lsasquad_state )
MCFG_CPU_PROGRAM_MAP(daikaiju_sound_map)
/* IRQs are triggered by the YM2203 */
- MCFG_CPU_ADD("mcu", M68705, MASTER_CLOCK / 8)
- MCFG_CPU_PROGRAM_MAP(lsasquad_m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, MASTER_CLOCK / 8)
MCFG_QUANTUM_TIME(attotime::from_hz(30000)) /* 500 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@@ -710,7 +678,7 @@ ROM_START( lsasquad )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
ROM_LOAD( "a64-04.44", 0x0000, 0x8000, CRC(c238406a) SHA1(bb8f9d952c4568edb375328a1f9f6681a1bb5907) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a64-05.35", 0x0000, 0x0800, CRC(572677b9) SHA1(e098d5d842bcc81221ba56652a7019505d8be082) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@@ -787,7 +755,7 @@ ROM_START( daikaiju )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
ROM_LOAD( "a74_04.ic44", 0x0000, 0x8000, CRC(98a6a703) SHA1(0c169a7a5f8b26606f67ee7f14bd487951536ac5) )
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a74_05.ic35", 0x0000, 0x0800, CRC(d66df06f) SHA1(6a61eb15aef7f3b7a66ec9d87c0bdd731d6cb079) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
diff --git a/src/mame/drivers/nycaptor.cpp b/src/mame/drivers/nycaptor.cpp
index eaff02007c6..e05984c5a80 100644
--- a/src/mame/drivers/nycaptor.cpp
+++ b/src/mame/drivers/nycaptor.cpp
@@ -311,7 +311,7 @@ static ADDRESS_MAP_START( nycaptor_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(nycaptor_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0xd000, 0xd000) AM_READWRITE(nycaptor_mcu_r, nycaptor_mcu_w)
+ AM_RANGE(0xd000, 0xd000) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(sub_cpu_halt_w)
AM_RANGE(0xd002, 0xd002) AM_READWRITE(nycaptor_generic_control_r, nycaptor_generic_control_w) /* bit 3 - memory bank at 0x8000-0xbfff */
AM_RANGE(0xd400, 0xd400) AM_READWRITE(from_snd_r, sound_command_w)
@@ -368,18 +368,6 @@ static ADDRESS_MAP_START( nycaptor_sound_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xe000, 0xefff) AM_NOP
ADDRESS_MAP_END
-static ADDRESS_MAP_START( nycaptor_m68705_map, AS_PROGRAM, 8, nycaptor_state )
- ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_READWRITE(nycaptor_68705_port_a_r, nycaptor_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_READWRITE(nycaptor_68705_port_b_r, nycaptor_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_READWRITE(nycaptor_68705_port_c_r, nycaptor_68705_port_c_w)
- AM_RANGE(0x0004, 0x0004) AM_WRITE(nycaptor_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_WRITE(nycaptor_68705_ddr_b_w)
- AM_RANGE(0x0006, 0x0006) AM_WRITE(nycaptor_68705_ddr_c_w)
- AM_RANGE(0x0010, 0x007f) AM_RAM
- AM_RANGE(0x0080, 0x07ff) AM_ROM
-ADDRESS_MAP_END
-
/* Cycle Shooting */
@@ -755,19 +743,7 @@ void nycaptor_state::machine_start()
save_item(NAME(m_palette_bank));
save_item(NAME(m_gfxctrl));
- save_item(NAME(m_port_a_in));
- save_item(NAME(m_port_a_out));
- save_item(NAME(m_ddr_a));
- save_item(NAME(m_port_b_in));
- save_item(NAME(m_port_b_out));
- save_item(NAME(m_ddr_b));
- save_item(NAME(m_port_c_in));
- save_item(NAME(m_port_c_out));
- save_item(NAME(m_ddr_c));
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
+
}
void nycaptor_state::machine_reset()
@@ -783,19 +759,6 @@ void nycaptor_state::machine_reset()
m_palette_bank = 0;
m_gfxctrl = 0;
- m_port_a_in = 0;
- m_port_a_out = 0;
- m_ddr_a = 0;
- m_port_b_in = 0;
- m_port_b_out = 0;
- m_ddr_b = 0;
- m_port_c_in = 0;
- m_port_c_out = 0;
- m_ddr_c = 0;
- m_mcu_sent = 0;
- m_main_sent = 0;
- m_from_main = 0;
- m_from_mcu = 0;
memset(m_vol_ctrl, 0, sizeof(m_vol_ctrl));
}
@@ -815,8 +778,7 @@ static MACHINE_CONFIG_START( nycaptor, nycaptor_state )
MCFG_CPU_PROGRAM_MAP(nycaptor_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(nycaptor_state, irq0_line_hold, 2*60) /* IRQ generated by ??? */
- MCFG_CPU_ADD("mcu", M68705,2000000)
- MCFG_CPU_PROGRAM_MAP(nycaptor_m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU,2000000)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper synchronization of the CPUs */
@@ -882,8 +844,7 @@ static MACHINE_CONFIG_START( cyclshtg, nycaptor_state )
MCFG_CPU_PERIODIC_INT_DRIVER(nycaptor_state, irq0_line_hold, 2*60)
#ifdef USE_MCU
- MCFG_CPU_ADD("mcu", M68705,2000000)
- MCFG_CPU_PROGRAM_MAP(nycaptor_m68705_map)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU,2000000)
#endif
MCFG_QUANTUM_TIME(attotime::from_hz(60))
@@ -1018,7 +979,7 @@ ROM_START( nycaptor )
ROM_LOAD( "a50_15", 0x0000, 0x4000, CRC(f8a604e5) SHA1(8fae920fd09584b5e5ccd0db8b8934b393a23d50) )
ROM_LOAD( "a50_16", 0x4000, 0x4000, CRC(fc24e11d) SHA1(ce1a1d7b809fa0f5f5e7a462047374b1b3f621c6) )
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a50_17", 0x0000, 0x0800, CRC(69fe08dc) SHA1(9bdac3e835f63bbb8806892169d89f43d447df21) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
@@ -1048,7 +1009,7 @@ ROM_START( cyclshtg )
ROM_LOAD( "a80_16.i26", 0x0000, 0x4000, CRC(ce171a48) SHA1(e5ae9bb22f58c8857737bc6f5317866819a4e4d1) )
ROM_LOAD( "a80_17.i25", 0x4000, 0x4000, CRC(a90b7bbc) SHA1(bd5c96861a59a1f84bb5032775b1c70efdb7066f) )
- ROM_REGION( 0x0800, "cpu3", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a80_18", 0x0000, 0x0800, NO_DUMP ) /* Missing */
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp
index 65520599436..ee1b1118165 100644
--- a/src/mame/drivers/slapfght.cpp
+++ b/src/mame/drivers/slapfght.cpp
@@ -290,11 +290,15 @@ static ADDRESS_MAP_START( tigerh_map, AS_PROGRAM, 8, slapfght_state )
AM_RANGE(0xe800, 0xe800) AM_WRITE(scrollx_lo_w)
AM_RANGE(0xe801, 0xe801) AM_WRITE(scrollx_hi_w)
AM_RANGE(0xe802, 0xe802) AM_WRITE(scrolly_w)
- AM_RANGE(0xe803, 0xe803) AM_READWRITE(tigerh_mcu_r, tigerh_mcu_w)
AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(fixram_w) AM_SHARE("fixvideoram")
AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(fixcol_w) AM_SHARE("fixcolorram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( tigerh_map_mcu, AS_PROGRAM, 8, slapfght_state )
+ AM_RANGE(0xe803, 0xe803) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ AM_IMPORT_FROM( tigerh_map )
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( tigerhb1_map, AS_PROGRAM, 8, slapfght_state )
AM_RANGE(0xe803, 0xe803) AM_READWRITE(tigerhb1_prot_r, tigerhb1_prot_w)
AM_IMPORT_FROM( tigerh_map )
@@ -317,11 +321,15 @@ static ADDRESS_MAP_START( slapfigh_map, AS_PROGRAM, 8, slapfght_state )
AM_RANGE(0xe800, 0xe800) AM_WRITE(scrollx_lo_w)
AM_RANGE(0xe801, 0xe801) AM_WRITE(scrollx_hi_w)
AM_RANGE(0xe802, 0xe802) AM_WRITE(scrolly_w)
- AM_RANGE(0xe803, 0xe803) AM_READWRITE(tigerh_mcu_r, tigerh_mcu_w)
AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(fixram_w) AM_SHARE("fixvideoram")
AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(fixcol_w) AM_SHARE("fixcolorram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( slapfigh_map_mcu, AS_PROGRAM, 8, slapfght_state )
+ AM_RANGE(0xe803, 0xe803) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, mcu_r, mcu_w)
+ AM_IMPORT_FROM( slapfigh_map )
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( slapfighb1_map, AS_PROGRAM, 8, slapfght_state )
AM_RANGE(0xe803, 0xe803) AM_NOP // no MCU
AM_IMPORT_FROM( slapfigh_map )
@@ -733,13 +741,7 @@ void slapfght_state::machine_start()
m_main_irq_enabled = false;
m_sound_nmi_enabled = false;
- m_mcu_sent = false;
- m_main_sent = false;
- m_from_main = 0;
- m_from_mcu = 0;
- m_from_mcu_latch = 0;
- m_to_mcu_latch = 0;
- m_old_portB = 0;
+
m_getstar_status = 0;
m_getstar_sequence_index = 0;
@@ -758,14 +760,6 @@ void slapfght_state::machine_start()
save_item(NAME(m_main_irq_enabled));
save_item(NAME(m_sound_nmi_enabled));
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
-
- save_item(NAME(m_from_mcu_latch));
- save_item(NAME(m_to_mcu_latch));
- save_item(NAME(m_old_portB));
save_item(NAME(m_getstar_status));
save_item(NAME(m_getstar_sequence_index));
@@ -791,7 +785,7 @@ void slapfght_state::machine_reset()
MACHINE_RESET_MEMBER(slapfght_state,getstar)
{
// don't boot the mcu since we don't have a dump yet
- m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+// m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
machine_reset();
}
@@ -978,7 +972,7 @@ static MACHINE_CONFIG_START( tigerh, slapfght_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_36MHz/6) // 6MHz
- MCFG_CPU_PROGRAM_MAP(tigerh_map)
+ MCFG_CPU_PROGRAM_MAP(tigerh_map_mcu)
MCFG_CPU_IO_MAP(tigerh_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq)
@@ -986,13 +980,7 @@ static MACHINE_CONFIG_START( tigerh, slapfght_state )
MCFG_CPU_PROGRAM_MAP(tigerh_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 360) // music speed, verified with pcb recording
- MCFG_CPU_ADD("mcu", M68705_NEW, XTAL_36MHz/12) // 3MHz
- MCFG_M68705_PORTA_R_CB(READ8(slapfght_state, tigerh_mcu_porta_r))
- MCFG_M68705_PORTA_W_CB(WRITE8(slapfght_state, tigerh_mcu_porta_w))
- MCFG_M68705_PORTB_W_CB(WRITE8(slapfght_state, tigerh_mcu_portb_w))
- MCFG_M68705_PORTC_R_CB(READ8(slapfght_state, tigerh_mcu_portc_r))
-
-
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU_TIGER, XTAL_36MHz/12) // 3MHz
MCFG_QUANTUM_PERFECT_CPU("maincpu")
@@ -1033,7 +1021,7 @@ static MACHINE_CONFIG_DERIVED( tigerhb1, tigerh )
MCFG_CPU_PROGRAM_MAP(tigerhb1_map)
MCFG_CPU_IO_MAP(tigerhb_io_map)
- MCFG_DEVICE_REMOVE("mcu")
+ MCFG_DEVICE_REMOVE("bmcu")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tigerhb2, tigerhb1 )
@@ -1048,7 +1036,7 @@ static MACHINE_CONFIG_START( slapfigh, slapfght_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL_36MHz/6) // 6MHz
- MCFG_CPU_PROGRAM_MAP(slapfigh_map)
+ MCFG_CPU_PROGRAM_MAP(slapfigh_map_mcu)
MCFG_CPU_IO_MAP(slapfigh_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq)
@@ -1056,11 +1044,8 @@ static MACHINE_CONFIG_START( slapfigh, slapfght_state )
MCFG_CPU_PROGRAM_MAP(tigerh_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 180)
- MCFG_CPU_ADD("mcu", M68705_NEW, XTAL_36MHz/12) // 3MHz
- MCFG_M68705_PORTA_R_CB(READ8(slapfght_state, tigerh_mcu_porta_r))
- MCFG_M68705_PORTA_W_CB(WRITE8(slapfght_state, tigerh_mcu_porta_w))
- MCFG_M68705_PORTB_W_CB(WRITE8(slapfght_state, slapfght_mcu_portb_w))
- MCFG_M68705_PORTC_R_CB(READ8(slapfght_state, slapfght_mcu_portc_r))
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU_SLAP, XTAL_36MHz/12) // 3MHz
+ MCFG_TAITO_M68705_EXTENSION_CB(WRITE8(slapfght_state, scroll_from_mcu_w))
MCFG_QUANTUM_PERFECT_CPU("maincpu")
@@ -1101,7 +1086,7 @@ static MACHINE_CONFIG_DERIVED( slapfighb1, slapfigh )
MCFG_CPU_PROGRAM_MAP(slapfighb1_map)
MCFG_CPU_IO_MAP(slapfighb1_io_map)
- MCFG_DEVICE_REMOVE("mcu")
+ MCFG_DEVICE_REMOVE("bmcu")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( slapfighb2, slapfighb1 )
@@ -1118,6 +1103,9 @@ static MACHINE_CONFIG_DERIVED( getstar, slapfigh )
MCFG_CPU_PROGRAM_MAP(getstar_map)
MCFG_CPU_IO_MAP(getstar_io_map)
+ MCFG_DEVICE_MODIFY("bmcu:mcu")
+ MCFG_DEVICE_DISABLE()
+
MCFG_MACHINE_RESET_OVERRIDE(slapfght_state, getstar)
MACHINE_CONFIG_END
@@ -1302,7 +1290,7 @@ ROM_START( tigerh )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a47_03.12d", 0x0000, 0x2000, CRC(d105260f) SHA1(f6a0e393e29354bb37fb723828f3267d030a45ea) )
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a47_14.6a", 0x0000, 0x0800, CRC(4042489f) SHA1(b977e0821b6b1aa5a0a0f349cd78150af1a231df) )
ROM_REGION( 0x04000, "gfx1", 0 )
@@ -1339,7 +1327,7 @@ ROM_START( tigerhj )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a47_03.12d", 0x0000, 0x2000, CRC(d105260f) SHA1(f6a0e393e29354bb37fb723828f3267d030a45ea) )
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a47_14.6a", 0x0000, 0x0800, CRC(4042489f) SHA1(b977e0821b6b1aa5a0a0f349cd78150af1a231df) )
ROM_REGION( 0x04000, "gfx1", 0 )
@@ -1561,7 +1549,7 @@ ROM_START( alcon )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a77_02.12d", 0x0000, 0x2000, CRC(87f4705a) SHA1(a90d5644ce268f3321047a4f96df96ac294d2f1b) )
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a77_13.6a", 0x0000, 0x0800, CRC(a70c81d9) SHA1(f155ffd25a946b0459216a8f80ded16e6e2f9258) )
ROM_REGION( 0x04000, "gfx1", 0 )
@@ -1595,7 +1583,7 @@ ROM_START( slapfigh )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a77_02.12d", 0x0000, 0x2000, CRC(87f4705a) SHA1(a90d5644ce268f3321047a4f96df96ac294d2f1b) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a77_13.6a", 0x0000, 0x0800, CRC(a70c81d9) SHA1(f155ffd25a946b0459216a8f80ded16e6e2f9258) )
ROM_REGION( 0x04000, "gfx1", 0 )
@@ -1637,7 +1625,7 @@ ROM_START( slapfigha )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "a76_03.12d", 0x0000, 0x2000, CRC(87f4705a) SHA1(a90d5644ce268f3321047a4f96df96ac294d2f1b) )
- ROM_REGION( 0x0800, "mcu", 0 )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 )
ROM_LOAD( "a76_14.6a", 0x0000, 0x0800, NO_DUMP ) /* A77 MCU not compatible with this set */
ROM_REGION( 0x04000, "gfx1", 0 )
@@ -1899,7 +1887,7 @@ ROM_START( grdian )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Region 3 - sound cpu code */
ROM_LOAD( "a68-03.12d", 0x0000, 0x2000, CRC(18daa44c) SHA1(1a3d22a186c591321d1b836ee30d89fba4771122) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "a68_14.6a", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x04000, "gfx1", 0 ) /* Region 1 - temporary for gfx */
@@ -1933,7 +1921,7 @@ ROM_START( getstarj )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Region 3 - sound cpu code */
ROM_LOAD( "a68-03.12d", 0x00000, 0x2000, CRC(18daa44c) SHA1(1a3d22a186c591321d1b836ee30d89fba4771122) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller */
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
ROM_LOAD( "68705.6a", 0x0000, 0x0800, NO_DUMP )
ROM_REGION( 0x04000, "gfx1", 0 ) /* Region 1 - temporary for gfx */
diff --git a/src/mame/includes/40love.h b/src/mame/includes/40love.h
index 0cd5f127251..c420887828d 100644
--- a/src/mame/includes/40love.h
+++ b/src/mame/includes/40love.h
@@ -1,7 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski
-#include "machine/buggychl.h"
+#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
@@ -18,7 +18,6 @@ public:
m_mcu_ram(*this, "mcu_ram"),
m_audiocpu(*this, "audiocpu"),
m_maincpu(*this, "maincpu"),
- m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@@ -75,8 +74,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_maincpu;
- optional_device<cpu_device> m_mcu;
- optional_device<buggychl_mcu_device> m_bmcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
diff --git a/src/mame/includes/bigevglf.h b/src/mame/includes/bigevglf.h
index c450bf05c5d..f8cc2b1591e 100644
--- a/src/mame/includes/bigevglf.h
+++ b/src/mame/includes/bigevglf.h
@@ -1,6 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski, Tomasz Slanina
#include "sound/msm5232.h"
+#include "machine/taito68705interface.h"
class bigevglf_state : public driver_device
{
@@ -11,7 +12,7 @@ public:
m_spriteram1(*this, "spriteram1"),
m_spriteram2(*this, "spriteram2"),
m_audiocpu(*this, "audiocpu"),
- m_mcu(*this, "mcu"),
+ m_bmcu(*this, "bmcu"),
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@@ -38,18 +39,6 @@ public:
uint8_t m_sound_state;
/* MCU related */
- uint8_t m_from_mcu;
- int m_mcu_sent;
- int m_main_sent;
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
- uint8_t m_port_c_in;
- uint8_t m_port_c_out;
- uint8_t m_ddr_c;
int m_mcu_coin_bit5;
/* misc */
@@ -59,7 +48,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
DECLARE_WRITE8_MEMBER(beg_banking_w);
DECLARE_WRITE8_MEMBER(beg_fromsound_w);
DECLARE_READ8_MEMBER(beg_fromsound_r);
diff --git a/src/mame/includes/bking.h b/src/mame/includes/bking.h
index 50b8e4467c2..03b13033fe3 100644
--- a/src/mame/includes/bking.h
+++ b/src/mame/includes/bking.h
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Mike Balfour, Zsolt Vasvari
-#include "machine/buggychl.h"
+#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
class bking_state : public driver_device
@@ -11,7 +11,6 @@ public:
: driver_device(mconfig, type, tag),
m_playfield_ram(*this, "playfield_ram"),
m_audiocpu(*this, "audiocpu"),
- m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
@@ -51,22 +50,12 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
- optional_device<buggychl_mcu_device> m_bmcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
-#if 0
- /* 68705 */
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
-#endif
DECLARE_READ8_MEMBER(bking_sndnmi_disable_r);
DECLARE_WRITE8_MEMBER(bking_sndnmi_enable_w);
DECLARE_WRITE8_MEMBER(bking_soundlatch_w);
diff --git a/src/mame/includes/bublbobl.h b/src/mame/includes/bublbobl.h
index 26168aca158..554508c3a19 100644
--- a/src/mame/includes/bublbobl.h
+++ b/src/mame/includes/bublbobl.h
@@ -2,6 +2,7 @@
// copyright-holders:Chris Moore, Nicola Salmoria
#include "machine/gen_latch.h"
+#include "machine/taito68705interface.h"
class bublbobl_state : public driver_device
{
@@ -17,13 +18,6 @@ public:
m_videoram(*this, "videoram"),
m_objectram(*this, "objectram"),
m_mcu_sharedram(*this, "mcu_sharedram"),
- m_mcu_sent(false),
- m_main_sent(false),
- m_from_main(0),
- m_from_mcu(0),
- m_from_mcu_latch(0),
- m_to_mcu_latch(0),
- m_old_portB(0),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"),
m_audiocpu(*this, "audiocpu"),
@@ -73,14 +67,6 @@ public:
/* Bobble Bobble */
int m_ic43_a;
int m_ic43_b;
- /* Tokio */
- bool m_mcu_sent;
- bool m_main_sent;
- uint8_t m_from_main;
- uint8_t m_from_mcu;
- uint8_t m_from_mcu_latch;
- uint8_t m_to_mcu_latch;
- uint8_t m_old_portB;
/* devices */
required_device<cpu_device> m_maincpu;
@@ -95,8 +81,6 @@ public:
DECLARE_WRITE8_MEMBER(tokio_bankswitch_w);
DECLARE_WRITE8_MEMBER(tokio_videoctrl_w);
DECLARE_WRITE8_MEMBER(bublbobl_nmitrigger_w);
- DECLARE_READ8_MEMBER(tokio_mcu_r);
- DECLARE_WRITE8_MEMBER(tokio_mcu_w);
DECLARE_READ8_MEMBER(tokiob_mcu_r);
DECLARE_WRITE8_MEMBER(bublbobl_sound_command_w);
@@ -132,20 +116,6 @@ public:
DECLARE_WRITE8_MEMBER(bublbobl_68705_port_b_w);
DECLARE_WRITE8_MEMBER(bublbobl_68705_ddr_b_w);
-
-
-
- DECLARE_CUSTOM_INPUT_MEMBER(tokio_mcu_sent_r);
- DECLARE_CUSTOM_INPUT_MEMBER(tokio_main_sent_r);
-
-
- DECLARE_READ8_MEMBER(tokio_mcu_porta_r);
- DECLARE_READ8_MEMBER(tokio_mcu_portc_r);
- DECLARE_WRITE8_MEMBER(tokio_mcu_porta_w);
- DECLARE_WRITE8_MEMBER(tokio_mcu_portb_w);
-
-
- DECLARE_DRIVER_INIT(tokiob);
DECLARE_DRIVER_INIT(tokio);
DECLARE_DRIVER_INIT(dland);
DECLARE_DRIVER_INIT(bublbobl);
diff --git a/src/mame/includes/buggychl.h b/src/mame/includes/buggychl.h
index 9f9b893bf7d..1941889a646 100644
--- a/src/mame/includes/buggychl.h
+++ b/src/mame/includes/buggychl.h
@@ -4,7 +4,7 @@
buggychl
*/
-#include "machine/buggychl.h"
+#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
@@ -20,7 +20,6 @@ public:
m_scrollh(*this, "scrollh"),
m_audiocpu(*this, "audiocpu"),
m_maincpu(*this, "maincpu"),
- m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@@ -53,8 +52,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_mcu;
- required_device<buggychl_mcu_device> m_bmcu;
+ required_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
diff --git a/src/mame/includes/flstory.h b/src/mame/includes/flstory.h
index a64e59db53d..9abe811a42e 100644
--- a/src/mame/includes/flstory.h
+++ b/src/mame/includes/flstory.h
@@ -3,6 +3,7 @@
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
+#include "machine/taito68705interface.h"
class flstory_state : public driver_device
{
@@ -15,7 +16,7 @@ public:
m_workram(*this, "workram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_mcu(*this, "mcu"),
+ m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@@ -46,26 +47,14 @@ public:
uint8_t m_snd_ctrl2;
uint8_t m_snd_ctrl3;
- /* protection */
- uint8_t m_from_main;
- uint8_t m_from_mcu;
- int m_mcu_sent;
- int m_main_sent;
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
- uint8_t m_port_c_in;
- uint8_t m_port_c_out;
- uint8_t m_ddr_c;
+ /* protection sims */
+ uint8_t m_from_mcu;
int m_mcu_select;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@@ -89,18 +78,6 @@ public:
DECLARE_WRITE8_MEMBER(nmi_enable_w);
DECLARE_READ8_MEMBER(rumba_mcu_r);
DECLARE_WRITE8_MEMBER(rumba_mcu_w);
- DECLARE_READ8_MEMBER(flstory_68705_port_a_r);
- DECLARE_WRITE8_MEMBER(flstory_68705_port_a_w);
- DECLARE_WRITE8_MEMBER(flstory_68705_ddr_a_w);
- DECLARE_READ8_MEMBER(flstory_68705_port_b_r);
- DECLARE_WRITE8_MEMBER(flstory_68705_port_b_w);
- DECLARE_WRITE8_MEMBER(flstory_68705_ddr_b_w);
- DECLARE_READ8_MEMBER(flstory_68705_port_c_r);
- DECLARE_WRITE8_MEMBER(flstory_68705_port_c_w);
- DECLARE_WRITE8_MEMBER(flstory_68705_ddr_c_w);
- DECLARE_WRITE8_MEMBER(flstory_mcu_w);
- DECLARE_READ8_MEMBER(flstory_mcu_r);
- DECLARE_READ8_MEMBER(flstory_mcu_status_r);
DECLARE_WRITE8_MEMBER(onna34ro_mcu_w);
DECLARE_READ8_MEMBER(onna34ro_mcu_r);
DECLARE_READ8_MEMBER(onna34ro_mcu_status_r);
diff --git a/src/mame/includes/lkage.h b/src/mame/includes/lkage.h
index e524e974885..913570792ab 100644
--- a/src/mame/includes/lkage.h
+++ b/src/mame/includes/lkage.h
@@ -2,6 +2,7 @@
// copyright-holders:Phil Stroffolino
#include "machine/gen_latch.h"
+#include "machine/taito68705interface.h"
class lkage_state : public driver_device
{
@@ -14,7 +15,7 @@ public:
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_mcu(*this, "mcu"),
+ m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch") { }
@@ -38,21 +39,6 @@ public:
int m_sound_nmi_enable;
int m_pending_nmi;
- /* mcu */
- uint8_t m_from_main;
- uint8_t m_from_mcu;
- int m_mcu_sent;
- int m_main_sent;
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
- uint8_t m_port_c_in;
- uint8_t m_port_c_out;
- uint8_t m_ddr_c;
-
/* lkageb fake mcu */
uint8_t m_mcu_val;
int m_mcu_ready; /* cpu data/mcu ready status */
@@ -60,7 +46,7 @@ public:
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
@@ -73,22 +59,10 @@ public:
DECLARE_READ8_MEMBER(fake_mcu_r);
DECLARE_WRITE8_MEMBER(fake_mcu_w);
DECLARE_READ8_MEMBER(fake_status_r);
- DECLARE_READ8_MEMBER(lkage_68705_port_a_r);
- DECLARE_WRITE8_MEMBER(lkage_68705_port_a_w);
- DECLARE_WRITE8_MEMBER(lkage_68705_ddr_a_w);
- DECLARE_READ8_MEMBER(lkage_68705_port_b_r);
- DECLARE_WRITE8_MEMBER(lkage_68705_port_b_w);
- DECLARE_WRITE8_MEMBER(lkage_68705_ddr_b_w);
- DECLARE_READ8_MEMBER(lkage_68705_port_c_r);
- DECLARE_WRITE8_MEMBER(lkage_68705_port_c_w);
- DECLARE_WRITE8_MEMBER(lkage_68705_ddr_c_w);
- DECLARE_WRITE8_MEMBER(lkage_mcu_w);
- DECLARE_READ8_MEMBER(lkage_mcu_r);
- DECLARE_READ8_MEMBER(lkage_mcu_status_r);
+
DECLARE_WRITE8_MEMBER(lkage_videoram_w);
DECLARE_DRIVER_INIT(bygone);
DECLARE_DRIVER_INIT(lkage);
- DECLARE_DRIVER_INIT(lkageb);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
diff --git a/src/mame/includes/lsasquad.h b/src/mame/includes/lsasquad.h
index 69246e90a14..b25a4cacedb 100644
--- a/src/mame/includes/lsasquad.h
+++ b/src/mame/includes/lsasquad.h
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
+#include "machine/taito68705interface.h"
class lsasquad_state : public driver_device
{
@@ -12,7 +13,7 @@ public:
m_priority_prom(*this, "prio_prom"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_mcu(*this, "mcu"),
+ m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { }
@@ -29,22 +30,11 @@ public:
int m_sound_cmd;
int m_sound_result;
- /* mcu */
- uint8_t m_from_main;
- uint8_t m_from_mcu;
- int m_mcu_sent;
- int m_main_sent;
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@@ -58,14 +48,7 @@ public:
DECLARE_READ8_MEMBER(lsasquad_sound_status_r);
DECLARE_READ8_MEMBER(daikaiju_sh_sound_command_r);
DECLARE_READ8_MEMBER(daikaiju_sound_status_r);
- DECLARE_READ8_MEMBER(lsasquad_68705_port_a_r);
- DECLARE_WRITE8_MEMBER(lsasquad_68705_port_a_w);
- DECLARE_WRITE8_MEMBER(lsasquad_68705_ddr_a_w);
- DECLARE_READ8_MEMBER(lsasquad_68705_port_b_r);
- DECLARE_WRITE8_MEMBER(lsasquad_68705_port_b_w);
- DECLARE_WRITE8_MEMBER(lsasquad_68705_ddr_b_w);
- DECLARE_WRITE8_MEMBER(lsasquad_mcu_w);
- DECLARE_READ8_MEMBER(lsasquad_mcu_r);
+
DECLARE_READ8_MEMBER(lsasquad_mcu_status_r);
DECLARE_READ8_MEMBER(daikaiju_mcu_status_r);
DECLARE_WRITE8_MEMBER(unk);
diff --git a/src/mame/includes/msisaac.h b/src/mame/includes/msisaac.h
index 2aff0d207a2..7c58a40259f 100644
--- a/src/mame/includes/msisaac.h
+++ b/src/mame/includes/msisaac.h
@@ -1,7 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski
-#include "machine/buggychl.h"
+#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
@@ -58,7 +58,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_maincpu;
- optional_device<buggychl_mcu_device> m_bmcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
diff --git a/src/mame/includes/nycaptor.h b/src/mame/includes/nycaptor.h
index 267d627439a..25a12fdac26 100644
--- a/src/mame/includes/nycaptor.h
+++ b/src/mame/includes/nycaptor.h
@@ -3,6 +3,7 @@
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
+#include "machine/taito68705interface.h"
class nycaptor_state : public driver_device
{
@@ -16,7 +17,7 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_subcpu(*this, "sub"),
- m_mcu(*this, "mcu"),
+ m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@@ -36,21 +37,6 @@ public:
uint8_t m_char_bank;
uint8_t m_palette_bank;
- /* mcu */
- uint8_t m_from_main;
- uint8_t m_from_mcu;
- int m_mcu_sent;
- int m_main_sent;
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
- uint8_t m_port_c_in;
- uint8_t m_port_c_out;
- uint8_t m_ddr_c;
-
/* misc */
int m_generic_control_reg;
int m_sound_nmi_enable;
@@ -64,7 +50,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_subcpu;
- optional_device<cpu_device> m_mcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@@ -88,17 +74,7 @@ public:
DECLARE_READ8_MEMBER(cyclshtg_mcu_status_r1);
DECLARE_WRITE8_MEMBER(cyclshtg_generic_control_w);
DECLARE_READ8_MEMBER(unk_r);
- DECLARE_READ8_MEMBER(nycaptor_68705_port_a_r);
- DECLARE_WRITE8_MEMBER(nycaptor_68705_port_a_w);
- DECLARE_WRITE8_MEMBER(nycaptor_68705_ddr_a_w);
- DECLARE_READ8_MEMBER(nycaptor_68705_port_b_r);
- DECLARE_WRITE8_MEMBER(nycaptor_68705_port_b_w);
- DECLARE_WRITE8_MEMBER(nycaptor_68705_ddr_b_w);
- DECLARE_READ8_MEMBER(nycaptor_68705_port_c_r);
- DECLARE_WRITE8_MEMBER(nycaptor_68705_port_c_w);
- DECLARE_WRITE8_MEMBER(nycaptor_68705_ddr_c_w);
- DECLARE_WRITE8_MEMBER(nycaptor_mcu_w);
- DECLARE_READ8_MEMBER(nycaptor_mcu_r);
+
DECLARE_READ8_MEMBER(nycaptor_mcu_status_r1);
DECLARE_READ8_MEMBER(nycaptor_mcu_status_r2);
DECLARE_WRITE8_MEMBER(nycaptor_videoram_w);
diff --git a/src/mame/includes/slapfght.h b/src/mame/includes/slapfght.h
index 9b3a66f37cf..a370a5e6186 100644
--- a/src/mame/includes/slapfght.h
+++ b/src/mame/includes/slapfght.h
@@ -8,7 +8,7 @@
#include "cpu/z80/z80.h"
#include "video/bufsprite.h"
-
+#include "machine/taito68705interface.h"
class slapfght_state : public driver_device
{
@@ -17,7 +17,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_mcu(*this, "mcu"),
+ m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
@@ -31,7 +31,7 @@ public:
// devices, memory pointers
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
@@ -61,15 +61,6 @@ public:
bool m_main_irq_enabled;
bool m_sound_nmi_enabled;
- bool m_mcu_sent;
- bool m_main_sent;
- uint8_t m_from_main;
- uint8_t m_from_mcu;
-
- uint8_t m_from_mcu_latch;
- uint8_t m_to_mcu_latch;
- uint8_t m_old_portB;
-
int m_getstar_status;
int m_getstar_sequence_index;
int m_getstar_status_state;
@@ -79,6 +70,7 @@ public:
uint8_t m_gs_e;
uint8_t m_tigerhb_cmd;
+ DECLARE_READ8_MEMBER(tigerh_mcu_status_r);
DECLARE_WRITE8_MEMBER(sound_reset_w);
DECLARE_WRITE8_MEMBER(irq_enable_w);
DECLARE_WRITE8_MEMBER(prg_bank_w);
@@ -94,19 +86,7 @@ public:
DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(palette_bank_w);
- DECLARE_WRITE8_MEMBER(tigerh_mcu_w);
- DECLARE_READ8_MEMBER(tigerh_mcu_r);
- DECLARE_READ8_MEMBER(tigerh_mcu_status_r);
-
- DECLARE_READ8_MEMBER(tigerh_mcu_porta_r);
- DECLARE_WRITE8_MEMBER(tigerh_mcu_porta_w);
-
- DECLARE_WRITE8_MEMBER(tigerh_mcu_portb_w);
- DECLARE_WRITE8_MEMBER(slapfght_mcu_portb_w);
-
- DECLARE_READ8_MEMBER(tigerh_mcu_portc_r);
- DECLARE_READ8_MEMBER(slapfght_mcu_portc_r);
-
+ DECLARE_WRITE8_MEMBER(scroll_from_mcu_w);
DECLARE_READ8_MEMBER(getstar_mcusim_r);
DECLARE_WRITE8_MEMBER(getstar_mcusim_w);
diff --git a/src/mame/machine/bigevglf.cpp b/src/mame/machine/bigevglf.cpp
index 0b2c801ecbf..458c1edb648 100644
--- a/src/mame/machine/bigevglf.cpp
+++ b/src/mame/machine/bigevglf.cpp
@@ -13,90 +13,14 @@
#include "includes/bigevglf.h"
-READ8_MEMBER(bigevglf_state::bigevglf_68705_port_a_r)
-{
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_68705_port_a_w)
-{
- m_port_a_out = data;
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_68705_ddr_a_w)
-{
- m_ddr_a = data;
-}
-
-READ8_MEMBER(bigevglf_state::bigevglf_68705_port_b_r)
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_68705_port_b_w)
-{
- if ((m_ddr_b & 0x02) && (~m_port_b_out & 0x02) && (data & 0x02)) /* positive going transition of the clock */
- {
- m_mcu->set_input_line(0, CLEAR_LINE);
- m_main_sent = 0;
-
- }
- if ((m_ddr_b & 0x04) && (~m_port_b_out & 0x04) && (data & 0x04) ) /* positive going transition of the clock */
- {
- m_from_mcu = m_port_a_out;
- m_mcu_sent = 0;
- }
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_68705_ddr_b_w)
-{
- m_ddr_b = data;
-}
-
-READ8_MEMBER(bigevglf_state::bigevglf_68705_port_c_r)
-{
- m_port_c_in = 0;
- if (m_main_sent)
- m_port_c_in |= 0x01;
- if (m_mcu_sent)
- m_port_c_in |= 0x02;
-
- return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_68705_port_c_w)
-{
- m_port_c_out = data;
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_68705_ddr_c_w)
-{
- m_ddr_c = data;
-}
-
-WRITE8_MEMBER(bigevglf_state::bigevglf_mcu_w)
-{
- m_port_a_in = data;
- m_main_sent = 1;
- m_mcu->set_input_line(0, ASSERT_LINE);
-}
-
-
-READ8_MEMBER(bigevglf_state::bigevglf_mcu_r)
-{
- m_mcu_sent = 1;
- return m_from_mcu;
-}
READ8_MEMBER(bigevglf_state::bigevglf_mcu_status_r)
{
int res = 0;
- if (!m_main_sent)
+ if (!m_bmcu->get_main_sent())
res |= 0x08;
- if (!m_mcu_sent)
+ if (m_bmcu->get_mcu_sent())
res |= 0x10;
return res;
diff --git a/src/mame/machine/bublbobl.cpp b/src/mame/machine/bublbobl.cpp
index 76a76af1f4d..1bfa9e97bdc 100644
--- a/src/mame/machine/bublbobl.cpp
+++ b/src/mame/machine/bublbobl.cpp
@@ -58,99 +58,6 @@ WRITE8_MEMBER(bublbobl_state::bublbobl_nmitrigger_w)
-CUSTOM_INPUT_MEMBER(bublbobl_state::tokio_mcu_sent_r)
-{
- if (m_mcu_sent) return 0;
- else return 1;
-}
-
-CUSTOM_INPUT_MEMBER(bublbobl_state::tokio_main_sent_r)
-{
- if (m_main_sent) return 0;
- else return 1;
-}
-
-
-READ8_MEMBER(bublbobl_state::tokio_mcu_r)
-{
- if (!m_mcu)
- return 0x00;
-
- m_mcu_sent = false;
-
-// printf("%s: tokio_mcu_r %02x\n", space.machine().describe_context(), m_from_mcu);
-
- return m_from_mcu;
-}
-
-WRITE8_MEMBER(bublbobl_state::tokio_mcu_w)
-{
- if (!m_mcu)
- return;
-
-// printf("%s: tokio_mcu_w %02x\n", space.machine().describe_context(), data);
-
- m_from_main = data;
- m_main_sent = true;
- m_mcu->set_input_line(0, ASSERT_LINE);
-
-}
-
-
-READ8_MEMBER(bublbobl_state::tokio_mcu_porta_r)
-{
-// printf("tokio_mcu_porta_r\n");
- return m_to_mcu_latch;
-}
-
-WRITE8_MEMBER(bublbobl_state::tokio_mcu_porta_w)
-{
-// printf("tokio_mcu_porta_w %02x\n", data);
- m_from_mcu_latch = data;
-}
-
-
-READ8_MEMBER(bublbobl_state::tokio_mcu_portc_r)
-{
- uint8_t ret = 0;
-
- if (!m_main_sent)
- ret |= 0x01;
- if (m_mcu_sent)
- ret |= 0x02;
-
- ret ^= 0x3; // inverted logic compared to tigerh
-
-// printf("%s: tokio_mcu_portc_r %02x\n", space.machine().describe_context(), ret);
-
- return ret;
-}
-
-
-WRITE8_MEMBER(bublbobl_state::tokio_mcu_portb_w)
-{
-// printf("tokio_mcu_portb_w %02x\n", data);
-
- if ((mem_mask & 0x02) && (~data & 0x02) && (m_old_portB & 0x02))
- {
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
-
- m_to_mcu_latch = m_from_main;
- m_main_sent = false;
- }
- if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04))
- {
- m_from_mcu = m_from_mcu_latch;
- m_mcu_sent = true;
- // printf("sent %02x\n", m_from_mcu);
- }
-
- m_old_portB = data;
-
-}
-
-
diff --git a/src/mame/machine/buggychl.cpp b/src/mame/machine/buggychl.cpp
deleted file mode 100644
index 843113992b5..00000000000
--- a/src/mame/machine/buggychl.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ernesto Corvi, Nicola Salmoria
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "machine/buggychl.h"
-
-
-const device_type BUGGYCHL_MCU = &device_creator<buggychl_mcu_device>;
-
-buggychl_mcu_device::buggychl_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, BUGGYCHL_MCU, "M68705 MCU Simulation (Buggy Challenge)", tag, owner, clock, "buggychl_mcu", __FILE__),
- m_port_a_in(0),
- m_port_a_out(0),
- m_ddr_a(0),
- m_port_b_in(0),
- m_port_b_out(0),
- m_ddr_b(0),
- m_port_c_in(0),
- m_port_c_out(0),
- m_ddr_c(0),
- m_from_main(0),
- m_from_mcu(0),
- m_mcu_sent(0),
- m_main_sent(0)
-{
-}
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void buggychl_mcu_device::device_config_complete()
-{
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void buggychl_mcu_device::device_start()
-{
- m_mcu = machine().device("mcu");
-
- save_item(NAME(m_from_main));
- save_item(NAME(m_from_mcu));
- save_item(NAME(m_mcu_sent));
- save_item(NAME(m_main_sent));
- save_item(NAME(m_port_a_in));
- save_item(NAME(m_port_a_out));
- save_item(NAME(m_ddr_a));
- save_item(NAME(m_port_b_in));
- save_item(NAME(m_port_b_out));
- save_item(NAME(m_ddr_b));
- save_item(NAME(m_port_c_in));
- save_item(NAME(m_port_c_out));
- save_item(NAME(m_ddr_c));
-}
-
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void buggychl_mcu_device::device_reset()
-{
- m_mcu_sent = 0;
- m_main_sent = 0;
- m_from_main = 0;
- m_from_mcu = 0;
- m_port_a_in = 0;
- m_port_a_out = 0;
- m_ddr_a = 0;
- m_port_b_in = 0;
- m_port_b_out = 0;
- m_ddr_b = 0;
- m_port_c_in = 0;
- m_port_c_out = 0;
- m_ddr_c = 0;
-}
-
-
-/***************************************************************************
-
- Buggy Challenge 68705 protection interface
-
- This is accurate. FairyLand Story seems to be identical.
-
-***************************************************************************/
-
-READ8_MEMBER( buggychl_mcu_device::buggychl_68705_port_a_r )
-{
- //logerror("%04x: 68705 port A read %02x\n", m_mcu->safe_pc(), m_port_a_in);
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_port_a_w )
-{
- //logerror("%04x: 68705 port A write %02x\n", m_mcu->safe_pc(), data);
- m_port_a_out = data;
-}
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_ddr_a_w )
-{
- m_ddr_a = data;
-}
-
-
-
-/*
- * Port B connections:
- * parts in [ ] are optional (not used by buggychl)
- *
- * all bits are logical 1 when read (+5V pullup)
- *
- * 0 n.c.
- * 1 W IRQ ack and enable latch which holds data from main Z80 memory
- * 2 W loads latch to Z80
- * 3 W to Z80 BUSRQ (put it on hold?)
- * 4 W n.c.
- * 5 W [selects Z80 memory access direction (0 = write 1 = read)]
- * 6 W [loads the latch which holds the low 8 bits of the address of
- * the main Z80 memory location to access]
- * 7 W [loads the latch which holds the high 8 bits of the address of
- * the main Z80 memory location to access]
- */
-
-
-READ8_MEMBER( buggychl_mcu_device::buggychl_68705_port_b_r )
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_port_b_w )
-{
- logerror("%04x: 68705 port B write %02x\n", m_mcu->safe_pc(), data);
-
- if ((m_ddr_b & 0x02) && (~data & 0x02) && (m_port_b_out & 0x02))
- {
- m_port_a_in = m_from_main;
- if (m_main_sent)
- m_mcu->execute().set_input_line(0, CLEAR_LINE);
- m_main_sent = 0;
- logerror("read command %02x from main cpu\n", m_port_a_in);
- }
- if ((m_ddr_b & 0x04) && (data & 0x04) && (~m_port_b_out & 0x04))
- {
- logerror("send command %02x to main cpu\n", m_port_a_out);
- m_from_mcu = m_port_a_out;
- m_mcu_sent = 1;
- }
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_ddr_b_w )
-{
- m_ddr_b = data;
-}
-
-
-/*
- * Port C connections:
- *
- * all bits are logical 1 when read (+5V pullup)
- *
- * 0 R 1 when pending command Z80->68705
- * 1 R 0 when pending command 68705->Z80
- */
-
-READ8_MEMBER( buggychl_mcu_device::buggychl_68705_port_c_r )
-{
- m_port_c_in = 0;
- if (m_main_sent)
- m_port_c_in |= 0x01;
- if (!m_mcu_sent)
- m_port_c_in |= 0x02;
- logerror("%04x: 68705 port C read %02x\n", m_mcu->safe_pc(), m_port_c_in);
- return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
-}
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_port_c_w )
-{
- logerror("%04x: 68705 port C write %02x\n", m_mcu->safe_pc(), data);
- m_port_c_out = data;
-}
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_ddr_c_w )
-{
- m_ddr_c = data;
-}
-
-
-WRITE8_MEMBER( buggychl_mcu_device::buggychl_mcu_w )
-{
- logerror("%04x: mcu_w %02x\n", m_mcu->safe_pc(), data);
- m_from_main = data;
- m_main_sent = 1;
- m_mcu->execute().set_input_line(0, ASSERT_LINE);
-}
-
-READ8_MEMBER( buggychl_mcu_device::buggychl_mcu_r )
-{
- logerror("%04x: mcu_r %02x\n", m_mcu->safe_pc(), m_from_mcu);
- m_mcu_sent = 0;
- return m_from_mcu;
-}
-
-READ8_MEMBER( buggychl_mcu_device::buggychl_mcu_status_r )
-{
- int res = 0;
-
- /* bit 0 = when 1, mcu is ready to receive data from main cpu */
- /* bit 1 = when 1, mcu has sent data to the main cpu */
- //logerror("%04x: mcu_status_r\n",m_mcu->safe_pc());
- if (!m_main_sent)
- res |= 0x01;
- if (m_mcu_sent)
- res |= 0x02;
-
- return res;
-}
-
-ADDRESS_MAP_START( buggychl_mcu_map, AS_PROGRAM, 8, buggychl_mcu_device )
- ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_68705_port_a_r, buggychl_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_68705_port_b_r, buggychl_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_68705_port_c_r, buggychl_68705_port_c_w)
- AM_RANGE(0x0004, 0x0004) AM_DEVWRITE("bmcu", buggychl_mcu_device, buggychl_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_DEVWRITE("bmcu", buggychl_mcu_device, buggychl_68705_ddr_b_w)
- AM_RANGE(0x0006, 0x0006) AM_DEVWRITE("bmcu", buggychl_mcu_device, buggychl_68705_ddr_c_w)
- AM_RANGE(0x0010, 0x007f) AM_RAM
- AM_RANGE(0x0080, 0x07ff) AM_ROM
-ADDRESS_MAP_END
diff --git a/src/mame/machine/buggychl.h b/src/mame/machine/buggychl.h
deleted file mode 100644
index ec76e77e467..00000000000
--- a/src/mame/machine/buggychl.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ernesto Corvi, Nicola Salmoria
-class buggychl_mcu_device : public device_t
-{
-public:
- buggychl_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- ~buggychl_mcu_device() {}
-
- DECLARE_WRITE8_MEMBER( buggychl_mcu_w );
- DECLARE_READ8_MEMBER( buggychl_mcu_r );
- DECLARE_READ8_MEMBER( buggychl_mcu_status_r );
- DECLARE_READ8_MEMBER( buggychl_68705_port_a_r );
- DECLARE_WRITE8_MEMBER( buggychl_68705_port_a_w );
- DECLARE_WRITE8_MEMBER( buggychl_68705_ddr_a_w );
- DECLARE_READ8_MEMBER( buggychl_68705_port_b_r );
- DECLARE_WRITE8_MEMBER( buggychl_68705_port_b_w );
- DECLARE_WRITE8_MEMBER( buggychl_68705_ddr_b_w );
- DECLARE_READ8_MEMBER( buggychl_68705_port_c_r );
- DECLARE_WRITE8_MEMBER( buggychl_68705_port_c_w );
- DECLARE_WRITE8_MEMBER( buggychl_68705_ddr_c_w );
-
-protected:
- // device-level overrides
- virtual void device_config_complete() override;
- virtual void device_start() override;
- virtual void device_reset() override;
-
-private:
- // internal state
- uint8_t m_port_a_in;
- uint8_t m_port_a_out;
- uint8_t m_ddr_a;
- uint8_t m_port_b_in;
- uint8_t m_port_b_out;
- uint8_t m_ddr_b;
- uint8_t m_port_c_in;
- uint8_t m_port_c_out;
- uint8_t m_ddr_c;
- uint8_t m_from_main;
- uint8_t m_from_mcu;
- int m_mcu_sent;
- int m_main_sent;
- device_t *m_mcu;
-};
-
-ADDRESS_MAP_EXTERN( buggychl_mcu_map, 8 );
-
-extern const device_type BUGGYCHL_MCU;
diff --git a/src/mame/machine/flstory.cpp b/src/mame/machine/flstory.cpp
index 79f65e86e11..4d71137380e 100644
--- a/src/mame/machine/flstory.cpp
+++ b/src/mame/machine/flstory.cpp
@@ -12,131 +12,6 @@
#include "emu.h"
#include "includes/flstory.h"
-/***************************************************************************
-
- Fairy Land Story 68705 protection interface
-
- The following is ENTIRELY GUESSWORK!!!
-
- It seems, however, to be identical to Buggy Challenge.
-
-***************************************************************************/
-
-READ8_MEMBER(flstory_state::flstory_68705_port_a_r)
-{
- //logerror("%04x: 68705 port A read %02x\n", space.device().safe_pc(), m_port_a_in);
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER(flstory_state::flstory_68705_port_a_w)
-{
- //logerror("%04x: 68705 port A write %02x\n", space.device().safe_pc(), data);
- m_port_a_out = data;
-}
-
-WRITE8_MEMBER(flstory_state::flstory_68705_ddr_a_w)
-{
- m_ddr_a = data;
-}
-
-
-
-/*
- * Port B connections:
- *
- * all bits are logical 1 when read (+5V pullup)
- *
- * 1 W when 1->0, enables latch which brings the command from main CPU (read from port A)
- * 2 W when 0->1, copies port A to the latch for the main CPU
- */
-
-READ8_MEMBER(flstory_state::flstory_68705_port_b_r)
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER(flstory_state::flstory_68705_port_b_w)
-{
- //logerror("%04x: 68705 port B write %02x\n",space.device().safe_pc(),data);
-
- if ((m_ddr_b & 0x02) && (~data & 0x02) && (m_port_b_out & 0x02))
- {
- m_port_a_in = m_from_main;
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
- m_main_sent = 0;
- logerror("read command %02x from main cpu\n", m_port_a_in);
- }
- if ((m_ddr_b & 0x04) && (data & 0x04) && (~m_port_b_out & 0x04))
- {
- logerror("send command %02x to main cpu\n", m_port_a_out);
- m_from_mcu = m_port_a_out;
- m_mcu_sent = 1;
- }
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER(flstory_state::flstory_68705_ddr_b_w)
-{
- m_ddr_b = data;
-}
-
-
-READ8_MEMBER(flstory_state::flstory_68705_port_c_r)
-{
- m_port_c_in = 0;
- if (m_main_sent)
- m_port_c_in |= 0x01;
-
- if (!m_mcu_sent)
- m_port_c_in |= 0x02;
-
- //logerror("%04x: 68705 port C read %02x\n", space.device().safe_pc(), port_c_in);
- return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
-}
-
-WRITE8_MEMBER(flstory_state::flstory_68705_port_c_w)
-{
- logerror("%04x: 68705 port C write %02x\n", space.device().safe_pc(), data);
- m_port_c_out = data;
-}
-
-WRITE8_MEMBER(flstory_state::flstory_68705_ddr_c_w)
-{
- m_ddr_c = data;
-}
-
-WRITE8_MEMBER(flstory_state::flstory_mcu_w)
-{
- logerror("%04x: mcu_w %02x\n", space.device().safe_pc(), data);
- m_from_main = data;
- m_main_sent = 1;
- m_mcu->set_input_line(0, ASSERT_LINE);
-}
-
-READ8_MEMBER(flstory_state::flstory_mcu_r)
-{
- logerror("%04x: mcu_r %02x\n",space.device().safe_pc(), m_from_mcu);
- m_mcu_sent = 0;
- return m_from_mcu;
-}
-
-READ8_MEMBER(flstory_state::flstory_mcu_status_r)
-{
- int res = 0;
-
- /* bit 0 = when 1, mcu is ready to receive data from main cpu */
- /* bit 1 = when 1, mcu has sent data to the main cpu */
- //logerror("%04x: mcu_status_r\n", space.device().safe_pc());
- if (!m_main_sent)
- res |= 0x01;
- if (m_mcu_sent)
- res |= 0x02;
-
- return res;
-}
-
WRITE8_MEMBER(flstory_state::onna34ro_mcu_w)
{
uint16_t score_adr = m_workram[0x29e] * 0x100 + m_workram[0x29d];
diff --git a/src/mame/machine/lkage.cpp b/src/mame/machine/lkage.cpp
deleted file mode 100644
index 3235f08e72c..00000000000
--- a/src/mame/machine/lkage.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Phil Stroffolino
-/***************************************************************************
-
- machine.c
-
- Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
- I/O ports)
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/lkage.h"
-
-
-/***************************************************************************
-
- Legend of Kage 68705 protection interface
-
- The following is ENTIRELY GUESSWORK!!!
- And moreover, the game seems to work anyway regardless of what the mcu returns.
-
-***************************************************************************/
-
-READ8_MEMBER(lkage_state::lkage_68705_port_a_r)
-{
- //logerror("%04x: 68705 port A read %02x\n", space.device().safe_pc(), m_port_a_in);
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER(lkage_state::lkage_68705_port_a_w)
-{
- //logerror("%04x: 68705 port A write %02x\n", space.device().safe_pc(), data);
- m_port_a_out = data;
-}
-
-WRITE8_MEMBER(lkage_state::lkage_68705_ddr_a_w)
-{
- m_ddr_a = data;
-}
-
-
-
-/*
- * Port B connections:
- *
- * all bits are logical 1 when read (+5V pullup)
- *
- * 1 W when 1->0, enables latch which brings the command from main CPU (read from port A)
- * 2 W when 0->1, copies port A to the latch for the main CPU
- */
-
-READ8_MEMBER(lkage_state::lkage_68705_port_b_r)
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER(lkage_state::lkage_68705_port_b_w)
-{
- //logerror("%04x: 68705 port B write %02x\n", space.device().safe_pc(), data);
-
- if ((m_ddr_b & 0x02) && (~data & 0x02) && (m_port_b_out & 0x02))
- {
- m_port_a_in = m_from_main;
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
-
- m_main_sent = 0;
- logerror("read command %02x from main cpu\n", m_port_a_in);
- }
-
- if ((m_ddr_b & 0x04) && (data & 0x04) && (~m_port_b_out & 0x04))
- {
- logerror("send command %02x to main cpu\n", m_port_a_out);
- m_from_mcu = m_port_a_out;
- m_mcu_sent = 1;
- }
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER(lkage_state::lkage_68705_ddr_b_w)
-{
- m_ddr_b = data;
-}
-
-
-
-READ8_MEMBER(lkage_state::lkage_68705_port_c_r)
-{
- m_port_c_in = 0;
- if (m_main_sent)
- m_port_c_in |= 0x01;
- if (!m_mcu_sent)
- m_port_c_in |= 0x02;
-
- //logerror("%04x: 68705 port C read %02x\n", space.device().safe_pc(), m_port_c_in);
- return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
-}
-
-WRITE8_MEMBER(lkage_state::lkage_68705_port_c_w)
-{
- logerror("%04x: 68705 port C write %02x\n", space.device().safe_pc(), data);
- m_port_c_out = data;
-}
-
-WRITE8_MEMBER(lkage_state::lkage_68705_ddr_c_w)
-{
- m_ddr_c = data;
-}
-
-
-WRITE8_MEMBER(lkage_state::lkage_mcu_w)
-{
- logerror("%04x: mcu_w %02x\n", space.device().safe_pc(), data);
- m_from_main = data;
- m_main_sent = 1;
- m_mcu->set_input_line(0, ASSERT_LINE);
-}
-
-READ8_MEMBER(lkage_state::lkage_mcu_r)
-{
- logerror("%04x: mcu_r %02x\n", space.device().safe_pc(), m_from_mcu);
- m_mcu_sent = 0;
- return m_from_mcu;
-}
-
-READ8_MEMBER(lkage_state::lkage_mcu_status_r)
-{
- int res = 0;
-
- /* bit 0 = when 1, mcu is ready to receive data from main cpu */
- /* bit 1 = when 1, mcu has sent data to the main cpu */
- //logerror("%04x: mcu_status_r\n", space.device().safe_pc());
- if (!m_main_sent)
- res |= 0x01;
- if (m_mcu_sent)
- res |= 0x02;
-
- return res;
-}
diff --git a/src/mame/machine/lsasquad.cpp b/src/mame/machine/lsasquad.cpp
index ebaecf016ad..b721f71c891 100644
--- a/src/mame/machine/lsasquad.cpp
+++ b/src/mame/machine/lsasquad.cpp
@@ -86,91 +86,6 @@ READ8_MEMBER(lsasquad_state::daikaiju_sound_status_r)
return m_sound_pending ^ 3;
}
-
-/***************************************************************************
-
- LSA Squad 68705 protection interface
-
- The following is ENTIRELY GUESSWORK!!!
-
-***************************************************************************/
-
-READ8_MEMBER(lsasquad_state::lsasquad_68705_port_a_r)
-{
- //logerror("%04x: 68705 port A read %02x\n", space.device().safe_pc(), m_port_a_in);
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER(lsasquad_state::lsasquad_68705_port_a_w)
-{
- //logerror("%04x: 68705 port A write %02x\n", space.device().safe_pc(), data);
- m_port_a_out = data;
-}
-
-WRITE8_MEMBER(lsasquad_state::lsasquad_68705_ddr_a_w)
-{
- m_ddr_a = data;
-}
-
-
-
-/*
- * Port B connections:
- *
- * all bits are logical 1 when read (+5V pullup)
- *
- * 1 W when 1->0, enables latch which brings the command from main CPU (read from port A)
- * 2 W when 0->1, copies port A to the latch for the main CPU
- */
-
-READ8_MEMBER(lsasquad_state::lsasquad_68705_port_b_r)
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER(lsasquad_state::lsasquad_68705_port_b_w)
-{
- //logerror("%04x: 68705 port B write %02x\n", space.device().safe_pc(), data);
-
- if ((m_ddr_b & 0x02) && (~data & 0x02) && (m_port_b_out & 0x02))
- {
- m_port_a_in = m_from_main;
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
- m_main_sent = 0;
- //logerror("read command %02x from main cpu\n", m_port_a_in);
- }
-
- if ((m_ddr_b & 0x04) && (data & 0x04) && (~m_port_b_out & 0x04))
- {
- //logerror("send command %02x to main cpu\n", m_port_a_out);
- m_from_mcu = m_port_a_out;
- m_mcu_sent = 1;
- }
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER(lsasquad_state::lsasquad_68705_ddr_b_w)
-{
- m_ddr_b = data;
-}
-
-WRITE8_MEMBER(lsasquad_state::lsasquad_mcu_w)
-{
- //logerror("%04x: mcu_w %02x\n", space.device().safe_pc(), data);
- m_from_main = data;
- m_main_sent = 1;
- m_mcu->set_input_line(0, ASSERT_LINE);
-}
-
-READ8_MEMBER(lsasquad_state::lsasquad_mcu_r)
-{
- //logerror("%04x: mcu_r %02x\n", space.device().safe_pc(), m_from_mcu);
- m_mcu_sent = 0;
- return m_from_mcu;
-}
-
READ8_MEMBER(lsasquad_state::lsasquad_mcu_status_r)
{
int res = ioport("MCU")->read();
@@ -178,10 +93,13 @@ READ8_MEMBER(lsasquad_state::lsasquad_mcu_status_r)
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
/* bit 1 = when 0, mcu has sent data to the main cpu */
//logerror("%04x: mcu_status_r\n",space.device().safe_pc());
- if (!m_main_sent)
- res |= 0x01;
- if (!m_mcu_sent)
- res |= 0x02;
+ if (m_bmcu)
+ {
+ if (!m_bmcu->get_main_sent())
+ res |= 0x01;
+ if (!m_bmcu->get_mcu_sent())
+ res |= 0x02;
+ }
return res;
}
@@ -193,10 +111,13 @@ READ8_MEMBER(lsasquad_state::daikaiju_mcu_status_r)
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
/* bit 1 = when 0, mcu has sent data to the main cpu */
//logerror("%04x: mcu_status_r\n",space.device().safe_pc());
- if (!m_main_sent)
- res |= 0x01;
- if (!m_mcu_sent)
- res |= 0x02;
+ if (m_bmcu)
+ {
+ if (!m_bmcu->get_main_sent())
+ res |= 0x01;
+ if (!m_bmcu->get_mcu_sent())
+ res |= 0x02;
+ }
res |= ((m_sound_pending & 0x02) ^ 2) << 3; //inverted flag
m_sound_pending &= ~0x02;
diff --git a/src/mame/machine/nycaptor.cpp b/src/mame/machine/nycaptor.cpp
index 8a3f61311bf..4bb6e21a394 100644
--- a/src/mame/machine/nycaptor.cpp
+++ b/src/mame/machine/nycaptor.cpp
@@ -12,105 +12,15 @@
#include "emu.h"
#include "includes/nycaptor.h"
-READ8_MEMBER(nycaptor_state::nycaptor_68705_port_a_r)
-{
- return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_68705_port_a_w)
-{
- m_port_a_out = data;
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_68705_ddr_a_w)
-{
- m_ddr_a = data;
-}
-
-/*
- * Port B connections:
- *
- * all bits are logical 1 when read (+5V pullup)
- *
- * 1 W when 1->0, enables latch which brings the command from main CPU (read from port A)
- * 2 W when 0->1, copies port A to the latch for the main CPU
- */
-
-READ8_MEMBER(nycaptor_state::nycaptor_68705_port_b_r)
-{
- return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_68705_port_b_w)
-{
- if (BIT(m_ddr_b, 1) && BIT(~data, 1) && BIT(m_port_b_out, 1))
- {
- m_port_a_in = m_from_main;
-
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
- m_main_sent = 0;
-
- }
-
- if (BIT(m_ddr_b, 2) && BIT(data, 2) && BIT(~m_port_b_out, 2))
- {
- m_from_mcu = m_port_a_out;
- m_mcu_sent = 1;
- }
-
- m_port_b_out = data;
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_68705_ddr_b_w)
-{
- m_ddr_b = data;
-}
-
-
-READ8_MEMBER(nycaptor_state::nycaptor_68705_port_c_r)
-{
- m_port_c_in = 0;
-
- if (m_main_sent)
- m_port_c_in |= 0x01;
- if (!m_mcu_sent)
- m_port_c_in |= 0x02;
-
- return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_68705_port_c_w)
-{
- m_port_c_out = data;
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_68705_ddr_c_w)
-{
- m_ddr_c = data;
-}
-
-WRITE8_MEMBER(nycaptor_state::nycaptor_mcu_w)
-{
- m_from_main = data;
- m_main_sent = 1;
- m_mcu->set_input_line(0, ASSERT_LINE);
-}
-
-READ8_MEMBER(nycaptor_state::nycaptor_mcu_r)
-{
- m_mcu_sent = 0;
- return m_from_mcu;
-}
READ8_MEMBER(nycaptor_state::nycaptor_mcu_status_r1)
{
/* bit 1 = when 1, mcu has sent data to the main cpu */
- return m_mcu_sent ? 2 : 0;
+ return m_bmcu->get_mcu_sent() ? 2 : 0;
}
READ8_MEMBER(nycaptor_state::nycaptor_mcu_status_r2)
{
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
- return m_main_sent ? 0 : 1;
+ return m_bmcu->get_main_sent() ? 0 : 1;
}
diff --git a/src/mame/machine/slapfght.cpp b/src/mame/machine/slapfght.cpp
index c8243414810..d362a1a76c6 100644
--- a/src/mame/machine/slapfght.cpp
+++ b/src/mame/machine/slapfght.cpp
@@ -12,26 +12,6 @@
#include "includes/slapfght.h"
-/***************************************************************************
-
- Tiger Heli MCU
-
-***************************************************************************/
-
-READ8_MEMBER(slapfght_state::tigerh_mcu_r)
-{
- m_mcu_sent = false;
- return m_from_mcu;
-}
-
-WRITE8_MEMBER(slapfght_state::tigerh_mcu_w)
-{
- m_from_main = data;
- m_main_sent = true;
- m_mcu->set_input_line(0, ASSERT_LINE);
-}
-
-
/**************************************************************************/
READ8_MEMBER(slapfght_state::tigerh_mcu_status_r)
@@ -39,115 +19,24 @@ READ8_MEMBER(slapfght_state::tigerh_mcu_status_r)
// d0 is vblank
uint8_t res = m_screen->vblank() ? 1 : 0;
- if (!m_main_sent)
- res |= 0x02;
- if (!m_mcu_sent)
- res |= 0x04;
-
- return res;
-}
-
-
-/***************************************************************************
-
- MCU port handlers (general)
-
-***************************************************************************/
-
-
-READ8_MEMBER(slapfght_state::tigerh_mcu_porta_r)
-{
- return m_to_mcu_latch;
-}
-
-WRITE8_MEMBER(slapfght_state::tigerh_mcu_porta_w)
-{
- m_from_mcu_latch = data;
-}
-
-
-/***************************************************************************
-
- MCU port handlers (Tiger Heli)
-
-***************************************************************************/
-
-WRITE8_MEMBER(slapfght_state::tigerh_mcu_portb_w)
-{
- if ((mem_mask & 0x02) && (~data & 0x02) && (m_old_portB & 0x02))
+ if (m_bmcu)
{
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
-
- m_to_mcu_latch = m_from_main;
- m_main_sent = false;
- }
- if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04))
- {
- m_from_mcu = m_from_mcu_latch;
- m_mcu_sent = true;
+ if (!m_bmcu->get_main_sent())
+ res |= 0x02;
+ if (!m_bmcu->get_mcu_sent())
+ res |= 0x04;
}
- m_old_portB = data;
-}
-
-READ8_MEMBER(slapfght_state::tigerh_mcu_portc_r)
-{
- uint8_t ret = 0;
-
- if (!m_main_sent)
- ret |= 0x01;
- if (m_mcu_sent)
- ret |= 0x02;
-
- return ret;
+ return res;
}
-/***************************************************************************
-
- MCU port handlers (Slap Fight)
-
-***************************************************************************/
-
-WRITE8_MEMBER(slapfght_state::slapfght_mcu_portb_w)
+WRITE8_MEMBER(slapfght_state::scroll_from_mcu_w)
{
- if ((mem_mask & 0x02) && (~data & 0x02) && (m_old_portB & 0x02))
- {
- if (m_main_sent)
- m_mcu->set_input_line(0, CLEAR_LINE);
-
- m_to_mcu_latch = m_from_main;
- m_main_sent = false;
- }
- if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04))
- {
- m_from_mcu = m_from_mcu_latch;
- m_mcu_sent = true;
- }
- if ((mem_mask & 0x08) && (~data & 0x08) && (m_old_portB & 0x08))
- {
- m_scrollx_lo = m_from_mcu_latch;
- }
- if ((mem_mask & 0x10) && (~data & 0x10) && (m_old_portB & 0x10))
+ switch (offset)
{
- m_scrollx_hi = m_from_mcu_latch;
+ case 0x00: m_scrollx_lo = data; break;
+ case 0x01: m_scrollx_hi = data; break;
}
-
- m_old_portB = data;
-}
-
-READ8_MEMBER(slapfght_state::slapfght_mcu_portc_r)
-{
- uint8_t ret = 0;
-
- if (!m_main_sent)
- ret |= 0x01;
- if (m_mcu_sent)
- ret |= 0x02;
-
- ret ^= 0x3; // inverted logic compared to tigerh
-
- return ret;
}
/***************************************************************************
diff --git a/src/mame/machine/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp
new file mode 100644
index 00000000000..3e2f5701bb8
--- /dev/null
+++ b/src/mame/machine/taito68705interface.cpp
@@ -0,0 +1,354 @@
+// license:BSD-3-Clause
+// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood
+#include "emu.h"
+#include "cpu/z80/z80.h"
+#include "machine/taito68705interface.h"
+
+/*
+ Most Taito 68705s share a similar (often identical) hookup.
+ This file encapsulates that.
+
+ used by:
+ buggychl.cpp - buggychl
+ bking.cpp - bking3
+ 40love.cpp - 40love
+ bublbobl.cpp - tokio
+ flstory.cpp - flstory
+ nycaptor.cpp - nycaptor
+ lsasquad.cpp - lsasquad
+ - daikaiju
+ lkage.cpp - lkage
+
+ and the following with slight changes:
+ slapfght.cpp - tigerh (inverted status bits read on portC)
+ - slapfght (extended outputs for scrolling)
+ bigevglf.cpp - writes to mcu aren't latched(?)f
+
+
+ not hooked up here, but possible (needs investigating)
+ pitnrun.cpp - have more functionality on portB, currently using 'instant timers' for latches
+ taitosj.cpp - ^^
+ changela.cpp - ^^
+ arkanoid.cpp - uses 68705 timers (they need to be moved to the 68705 core) and also some portB differences?
+ xain.cpp - not a Taito game (licensed to Taito?) but MCU hookup looks almost the same
+ renegade.cpp - ^^
+ matmania.cpp - ^^
+
+ 68705 sets in Taito drivers that are NOT suitable for hookup here?
+ bublbobl.cpp - bub68705 - this is a bootleg, not an official Taito hookup
+ mexico86.cpp - knightb, mexico86 - bootleg 68705s
+ retofinv.cpp - the current MCU dump is a bootleg at least
+ sqix.cpp - hotsmash - kaneko hookup, different from Taito ones.
+
+ there are other drivers (and games in existing drivers) that could hookup here, but currently lack MCU dumps.
+
+*/
+
+const device_type TAITO68705_MCU = &device_creator<taito68705_mcu_device>;
+const device_type TAITO68705_MCU_SLAP = &device_creator<taito68705_mcu_slap_device>;
+const device_type TAITO68705_MCU_TIGER = &device_creator<taito68705_mcu_tiger_device>;
+const device_type TAITO68705_MCU_BEG = &device_creator<taito68705_mcu_beg_device>;
+
+taito68705_mcu_device::taito68705_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, TAITO68705_MCU, "Taito M68705 MCU Interface", tag, owner, clock, "taito68705", __FILE__),
+ m_mcu_sent(false),
+ m_main_sent(false),
+ m_from_main(0),
+ m_from_mcu(0),
+ m_from_mcu_latch(0),
+ m_to_mcu_latch(0),
+ m_old_portB(0),
+ m_mcu(*this, "mcu")
+{
+}
+
+taito68705_mcu_device::taito68705_mcu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, u32 clock, const char *shortname, const char *source)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
+ m_mcu_sent(false),
+ m_main_sent(false),
+ m_from_main(0),
+ m_from_mcu(0),
+ m_from_mcu_latch(0),
+ m_to_mcu_latch(0),
+ m_old_portB(0),
+ m_mcu(*this, "mcu")
+{
+}
+
+
+
+
+static MACHINE_CONFIG_FRAGMENT( taito68705 )
+ MCFG_CPU_ADD("mcu", M68705_NEW, DERIVED_CLOCK(1,1))
+ MCFG_M68705_PORTA_R_CB(READ8(taito68705_mcu_device, mcu_porta_r))
+ MCFG_M68705_PORTA_W_CB(WRITE8(taito68705_mcu_device, mcu_porta_w))
+ MCFG_M68705_PORTB_W_CB(WRITE8(taito68705_mcu_device, mcu_portb_w))
+ MCFG_M68705_PORTC_R_CB(READ8(taito68705_mcu_device, mcu_portc_r))
+MACHINE_CONFIG_END
+
+machine_config_constructor taito68705_mcu_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( taito68705 );
+}
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void taito68705_mcu_device::device_config_complete()
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void taito68705_mcu_device::device_start()
+{
+ save_item(NAME(m_mcu_sent));
+ save_item(NAME(m_main_sent));
+ save_item(NAME(m_from_main));
+ save_item(NAME(m_from_mcu));
+ save_item(NAME(m_from_mcu_latch));
+ save_item(NAME(m_to_mcu_latch));
+ save_item(NAME(m_old_portB));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void taito68705_mcu_device::device_reset()
+{
+ m_mcu_sent = false;
+ m_main_sent = false;
+ m_from_main = 0;
+ m_from_mcu = 0;
+ m_from_mcu_latch = 0;
+ m_to_mcu_latch = 0;
+ m_old_portB = 0;
+
+ m_mcu->set_input_line(0, CLEAR_LINE);
+}
+
+
+/***************************************************************************
+
+ Buggy Challenge 68705 protection interface
+
+ This is accurate. FairyLand Story seems to be identical.
+
+***************************************************************************/
+
+
+/*
+ * Port B connections:
+ * parts in [ ] are optional (not used by buggychl)
+ *
+ * all bits are logical 1 when read (+5V pullup)
+ *
+ * 0 n.c.
+ * 1 W IRQ ack and enable latch which holds data from main Z80 memory
+ * 2 W loads latch to Z80
+ * 3 W to Z80 BUSRQ (put it on hold?)
+ * 4 W n.c.
+ * 5 W [selects Z80 memory access direction (0 = write 1 = read)]
+ * 6 W [loads the latch which holds the low 8 bits of the address of
+ * the main Z80 memory location to access]
+ * 7 W [loads the latch which holds the high 8 bits of the address of
+ * the main Z80 memory location to access]
+ */
+
+
+
+
+
+READ8_MEMBER(taito68705_mcu_device::mcu_r)
+{
+ m_mcu_sent = false;
+
+// logerror("%s: mcu_r %02x\n", space.machine().describe_context(), m_from_mcu);
+
+ return m_from_mcu;
+}
+
+WRITE8_MEMBER(taito68705_mcu_device::mcu_w)
+{
+// logerror("%s: mcu_w %02x\n", space.machine().describe_context(), data);
+
+ m_from_main = data;
+ m_main_sent = true;
+ m_mcu->set_input_line(0, ASSERT_LINE);
+
+}
+
+
+READ8_MEMBER(taito68705_mcu_device::mcu_porta_r)
+{
+// logerror("mcu_porta_r\n");
+ return m_to_mcu_latch;
+}
+
+WRITE8_MEMBER(taito68705_mcu_device::mcu_porta_w)
+{
+// logerror("mcu_porta_w %02x\n", data);
+ m_from_mcu_latch = data;
+}
+
+
+READ8_MEMBER(taito68705_mcu_device::mcu_portc_r)
+{
+ uint8_t ret = 0;
+
+ if (m_main_sent)
+ ret |= 0x01;
+ if (!m_mcu_sent)
+ ret |= 0x02;
+
+// logerror("%s: mcu_portc_r %02x\n", space.machine().describe_context(), ret);
+
+ return ret;
+}
+
+
+WRITE8_MEMBER(taito68705_mcu_device::mcu_portb_w)
+{
+// logerror("mcu_portb_w %02x\n", data);
+
+ if ((mem_mask & 0x02) && (~data & 0x02) && (m_old_portB & 0x02))
+ {
+ if (m_main_sent)
+ m_mcu->set_input_line(0, CLEAR_LINE);
+
+ m_to_mcu_latch = m_from_main;
+ m_main_sent = false;
+ }
+ if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04))
+ {
+ m_from_mcu = m_from_mcu_latch;
+ m_mcu_sent = true;
+ // logerror("sent %02x\n", m_from_mcu);
+ }
+
+ m_old_portB = data;
+
+}
+
+/* Status readbacks for MAIN cpu - these hook up in various ways depending on the host (provide 2 lines instead?) */
+
+READ8_MEMBER( taito68705_mcu_device::mcu_status_r )
+{
+ int res = 0;
+
+ /* bit 0 = when 1, mcu is ready to receive data from main cpu */
+ /* bit 1 = when 1, mcu has sent data to the main cpu */
+ //logerror("%s: mcu_status_r\n",machine().describe_context());
+ if (!m_main_sent)
+ res |= 0x01;
+ if (m_mcu_sent)
+ res |= 0x02;
+
+ return res;
+}
+
+CUSTOM_INPUT_MEMBER(taito68705_mcu_device::mcu_sent_r)
+{
+ if (!m_mcu_sent) return 0;
+ else return 1;
+}
+
+CUSTOM_INPUT_MEMBER(taito68705_mcu_device::main_sent_r)
+{
+ if (!m_main_sent) return 0;
+ else return 1;
+}
+
+/* The Slap Fight interface has some extensions, handle them here */
+
+taito68705_mcu_slap_device::taito68705_mcu_slap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : taito68705_mcu_device(mconfig, TAITO68705_MCU_SLAP, "Taito M68705 MCU Interface (Slap Fight)", tag, owner, clock, "taito68705slap", __FILE__),
+ m_extension_cb_w(*this)
+{
+}
+
+WRITE8_MEMBER(taito68705_mcu_slap_device::mcu_portb_w)
+{
+ if ((mem_mask & 0x08) && (~data & 0x08) && (m_old_portB & 0x08))
+ {
+ m_extension_cb_w(0,m_from_mcu_latch, 0xff); // m_scrollx_lo
+ }
+ if ((mem_mask & 0x10) && (~data & 0x10) && (m_old_portB & 0x10))
+ {
+ m_extension_cb_w(1,m_from_mcu_latch, 0xff); // m_scrollx_hi
+ }
+
+ taito68705_mcu_device::mcu_portb_w(space,offset,data);
+}
+
+void taito68705_mcu_slap_device::device_start()
+{
+ taito68705_mcu_device::device_start();
+ m_extension_cb_w.resolve_safe();
+}
+
+
+/* The Tiger Heli interface has some extensions, handle them here */
+
+taito68705_mcu_tiger_device::taito68705_mcu_tiger_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : taito68705_mcu_device(mconfig, TAITO68705_MCU_TIGER, "Taito M68705 MCU Interface (Tiger Heli)", tag, owner, clock, "taito68705tiger", __FILE__)
+{
+}
+
+READ8_MEMBER(taito68705_mcu_tiger_device::mcu_portc_r)
+{
+ uint8_t ret = taito68705_mcu_device::mcu_portc_r(space,offset);
+
+ // Tiger Heli has these status bits inverted MCU-side
+ ret ^= 0x3;
+
+ return ret;
+}
+
+
+/* Big Event Golf has some things switched around, handle them here */
+
+taito68705_mcu_beg_device::taito68705_mcu_beg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : taito68705_mcu_device(mconfig, TAITO68705_MCU_BEG, "Taito M68705 MCU Interface (Big Event Golf)", tag, owner, clock, "taito68705bigevglf", __FILE__)
+{
+}
+
+WRITE8_MEMBER(taito68705_mcu_beg_device::mcu_portb_w)
+{
+ // transitions are reversed
+ if ((mem_mask & 0x02) && (data & 0x02) && (~m_old_portB & 0x02) ) /* positive going transition of the clock */
+ {
+ //if (m_main_sent)
+ m_mcu->set_input_line(0, CLEAR_LINE);
+
+ //m_to_mcu_latch = m_from_main; // this is weird, no latching?!
+ m_main_sent = false;
+ }
+ if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04) ) /* positive going transition of the clock */
+ {
+ m_from_mcu = m_from_mcu_latch;
+ m_mcu_sent = true;
+ // logerror("sent %02x\n", m_from_mcu);
+ }
+
+ m_old_portB = data;
+}
+
+WRITE8_MEMBER(taito68705_mcu_beg_device::mcu_w)
+{
+// logerror("%s: mcu_w %02x\n", space.machine().describe_context(), data);
+
+ m_to_mcu_latch = data; // this is weird, no latching?!
+ m_main_sent = true;
+ m_mcu->set_input_line(0, ASSERT_LINE);
+
+}
+
+
diff --git a/src/mame/machine/taito68705interface.h b/src/mame/machine/taito68705interface.h
new file mode 100644
index 00000000000..c0ad508ef69
--- /dev/null
+++ b/src/mame/machine/taito68705interface.h
@@ -0,0 +1,86 @@
+// license:BSD-3-Clause
+// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood
+
+#include "cpu/m6805/m6805.h"
+
+class taito68705_mcu_device : public device_t
+{
+public:
+ taito68705_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ taito68705_mcu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, u32 clock, const char *shortname, const char *source);
+
+ ~taito68705_mcu_device() {}
+
+ virtual DECLARE_WRITE8_MEMBER( mcu_w );
+ DECLARE_READ8_MEMBER( mcu_r );
+ DECLARE_READ8_MEMBER( mcu_porta_r );
+ virtual DECLARE_READ8_MEMBER( mcu_portc_r );
+ DECLARE_WRITE8_MEMBER( mcu_porta_w );
+ virtual DECLARE_WRITE8_MEMBER( mcu_portb_w );
+
+ DECLARE_READ8_MEMBER( mcu_status_r );
+ DECLARE_CUSTOM_INPUT_MEMBER( mcu_sent_r );
+ DECLARE_CUSTOM_INPUT_MEMBER( main_sent_r );
+
+ bool get_main_sent() { return m_main_sent; };
+ bool get_mcu_sent() { return m_mcu_sent; };
+
+
+protected:
+ // device-level overrides
+ virtual machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_config_complete() override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // internal state
+ bool m_mcu_sent;
+ bool m_main_sent;
+ uint8_t m_from_main;
+ uint8_t m_from_mcu;
+ uint8_t m_from_mcu_latch;
+ uint8_t m_to_mcu_latch;
+ uint8_t m_old_portB;
+
+ required_device<cpu_device> m_mcu;
+};
+
+extern const device_type TAITO68705_MCU;
+
+#define MCFG_TAITO_M68705_EXTENSION_CB(_devcb) \
+ taito68705_mcu_slap_device::set_extension_cb(*device, DEVCB_##_devcb);
+
+class taito68705_mcu_slap_device : public taito68705_mcu_device
+{
+public:
+ taito68705_mcu_slap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual DECLARE_WRITE8_MEMBER( mcu_portb_w ) override;
+
+ template<class _Object> static devcb_base &set_extension_cb(device_t &device, _Object object) { return downcast<taito68705_mcu_slap_device &>(device).m_extension_cb_w.set_callback(object); }
+
+ devcb_write8 m_extension_cb_w;
+
+protected:
+ virtual void device_start() override;
+};
+
+extern const device_type TAITO68705_MCU_SLAP;
+
+class taito68705_mcu_tiger_device : public taito68705_mcu_device
+{
+public:
+ taito68705_mcu_tiger_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual DECLARE_READ8_MEMBER( mcu_portc_r ) override;
+};
+
+extern const device_type TAITO68705_MCU_TIGER;
+
+class taito68705_mcu_beg_device : public taito68705_mcu_device
+{
+public:
+ taito68705_mcu_beg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual DECLARE_WRITE8_MEMBER(mcu_w) override;
+ virtual DECLARE_WRITE8_MEMBER(mcu_portb_w) override;
+};
+
+extern const device_type TAITO68705_MCU_BEG;