From 878f436343577cd50c2ce39c3c01b2b465588831 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 16:20:38 +0000 Subject: taito refactoring pt1. --- scripts/target/mame/arcade.lua | 4 +- src/mame/drivers/40love.cpp | 16 +- src/mame/drivers/bking.cpp | 74 +-------- src/mame/drivers/buggychl.cpp | 15 +- src/mame/includes/40love.h | 8 +- src/mame/includes/bking.h | 8 +- src/mame/includes/buggychl.h | 8 +- src/mame/includes/msisaac.h | 4 +- src/mame/machine/buggychl.cpp | 234 ---------------------------- src/mame/machine/buggychl.h | 48 ------ src/mame/machine/taito68705interface.cpp | 257 +++++++++++++++++++++++++++++++ src/mame/machine/taito68705interface.h | 50 ++++++ 12 files changed, 338 insertions(+), 388 deletions(-) delete mode 100644 src/mame/machine/buggychl.cpp delete mode 100644 src/mame/machine/buggychl.h create mode 100644 src/mame/machine/taito68705interface.cpp create mode 100644 src/mame/machine/taito68705interface.h diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index edcb0af980f..6912a9dc593 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -3546,8 +3546,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", 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/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/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/includes/40love.h b/src/mame/includes/40love.h index 0cd5f127251..3d9fc5ede9a 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,7 @@ public: m_mcu_ram(*this, "mcu_ram"), m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), - m_mcu(*this, "mcu"), + //m_mcu(*this, "mcu"), m_bmcu(*this, "bmcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), @@ -75,8 +75,8 @@ public: /* devices */ required_device m_audiocpu; required_device m_maincpu; - optional_device m_mcu; - optional_device m_bmcu; + //optional_device m_mcu; + optional_device m_bmcu; required_device m_msm; required_device m_gfxdecode; required_device m_palette; diff --git a/src/mame/includes/bking.h b/src/mame/includes/bking.h index 50b8e4467c2..985826eefca 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,7 @@ public: : driver_device(mconfig, type, tag), m_playfield_ram(*this, "playfield_ram"), m_audiocpu(*this, "audiocpu"), - m_mcu(*this, "mcu"), + //m_mcu(*this, "mcu"), m_bmcu(*this, "bmcu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), @@ -51,8 +51,8 @@ public: /* devices */ required_device m_audiocpu; - optional_device m_mcu; - optional_device m_bmcu; + //optional_device m_mcu; + optional_device m_bmcu; required_device m_gfxdecode; required_device m_screen; required_device m_palette; diff --git a/src/mame/includes/buggychl.h b/src/mame/includes/buggychl.h index 9f9b893bf7d..a8c663a85b4 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,7 @@ public: m_scrollh(*this, "scrollh"), m_audiocpu(*this, "audiocpu"), m_maincpu(*this, "maincpu"), - m_mcu(*this, "mcu"), + // m_mcu(*this, "mcu"), m_bmcu(*this, "bmcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), @@ -53,8 +53,8 @@ public: /* devices */ required_device m_audiocpu; required_device m_maincpu; - required_device m_mcu; - required_device m_bmcu; + //required_device m_mcu; + required_device m_bmcu; required_device m_msm; required_device m_gfxdecode; required_device m_screen; 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 m_audiocpu; required_device m_maincpu; - optional_device m_bmcu; + optional_device m_bmcu; required_device m_msm; required_device m_gfxdecode; required_device m_palette; 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(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/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp new file mode 100644 index 00000000000..5cebd83e8cd --- /dev/null +++ b/src/mame/machine/taito68705interface.cpp @@ -0,0 +1,257 @@ +// license:BSD-3-Clause +// copyright-holders:Ernesto Corvi, Nicola Salmoria +#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 +*/ + +const device_type TAITO68705_MCU = &device_creator; + +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_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), + m_mcu(*this, "mcu") +{ +} + +ADDRESS_MAP_START( taito68705_mcu_map, AS_PROGRAM, 8, taito68705_mcu_device ) + ADDRESS_MAP_GLOBAL_MASK(0x7ff) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(buggychl_68705_port_a_r, buggychl_68705_port_a_w) + AM_RANGE(0x0001, 0x0001) AM_READWRITE(buggychl_68705_port_b_r, buggychl_68705_port_b_w) + AM_RANGE(0x0002, 0x0002) AM_READWRITE(buggychl_68705_port_c_r, buggychl_68705_port_c_w) + AM_RANGE(0x0004, 0x0004) AM_WRITE(buggychl_68705_ddr_a_w) + AM_RANGE(0x0005, 0x0005) AM_WRITE(buggychl_68705_ddr_b_w) + AM_RANGE(0x0006, 0x0006) AM_WRITE(buggychl_68705_ddr_c_w) + AM_RANGE(0x0010, 0x007f) AM_RAM + AM_RANGE(0x0080, 0x07ff) AM_ROM +ADDRESS_MAP_END + + +static MACHINE_CONFIG_FRAGMENT( taito68705 ) + MCFG_CPU_ADD("mcu", M68705, DERIVED_CLOCK(1,1)) + MCFG_CPU_PROGRAM_MAP(taito68705_mcu_map) +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_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 taito68705_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; + + m_mcu->set_input_line(0, CLEAR_LINE); +} + + +/*************************************************************************** + + Buggy Challenge 68705 protection interface + + This is accurate. FairyLand Story seems to be identical. + +***************************************************************************/ + +READ8_MEMBER( taito68705_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( taito68705_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( taito68705_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( taito68705_mcu_device::buggychl_68705_port_b_r ) +{ + return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b); +} + +WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_port_b_w ) +{ + logerror("%s: 68705 port B write %02x\n", machine().describe_context(), 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( taito68705_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( taito68705_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("$s: 68705 port C read %02x\n", machine().describe_context(), m_port_c_in); + return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c); +} + +WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_port_c_w ) +{ + logerror("%s: 68705 port C write %02x\n", machine().describe_context(), data); + m_port_c_out = data; +} + +WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_ddr_c_w ) +{ + m_ddr_c = data; +} + + +WRITE8_MEMBER( taito68705_mcu_device::mcu_w ) +{ + logerror("%s: mcu_w %02x\n", machine().describe_context(), data); + m_from_main = data; + m_main_sent = 1; + m_mcu->set_input_line(0, ASSERT_LINE); +} + +READ8_MEMBER( taito68705_mcu_device::mcu_r ) +{ + logerror("%s: mcu_r %02x\n", machine().describe_context(), m_from_mcu); + m_mcu_sent = 0; + return m_from_mcu; +} + +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; +} + diff --git a/src/mame/machine/taito68705interface.h b/src/mame/machine/taito68705interface.h new file mode 100644 index 00000000000..270cd0bc9c7 --- /dev/null +++ b/src/mame/machine/taito68705interface.h @@ -0,0 +1,50 @@ +// license:BSD-3-Clause +// copyright-holders:Ernesto Corvi, Nicola Salmoria + +#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() {} + + DECLARE_WRITE8_MEMBER( mcu_w ); + DECLARE_READ8_MEMBER( mcu_r ); + DECLARE_READ8_MEMBER( 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 machine_config_constructor device_mconfig_additions() const override; + 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; + required_device m_mcu; +}; + +extern const device_type TAITO68705_MCU; -- cgit v1.2.3 From 6bc1260b03cd8ee28d351c12307f47559be90a37 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 18:17:03 +0000 Subject: refactored new taito68705interface to use newer 68705 code (with integrated peripherals) and refactored some drivers to use it --- src/mame/drivers/bublbobl.cpp | 64 ++++---- src/mame/drivers/slapfght.cpp | 70 ++++---- src/mame/includes/40love.h | 2 - src/mame/includes/bking.h | 11 -- src/mame/includes/bublbobl.h | 32 +--- src/mame/includes/buggychl.h | 2 - src/mame/includes/slapfght.h | 30 +--- src/mame/machine/bublbobl.cpp | 93 ----------- src/mame/machine/slapfght.cpp | 131 ++------------- src/mame/machine/taito68705interface.cpp | 270 +++++++++++++++++-------------- src/mame/machine/taito68705interface.h | 74 ++++++--- 11 files changed, 279 insertions(+), 500 deletions(-) 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/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 3d9fc5ede9a..c420887828d 100644 --- a/src/mame/includes/40love.h +++ b/src/mame/includes/40love.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,7 +74,6 @@ public: /* devices */ required_device m_audiocpu; required_device m_maincpu; - //optional_device m_mcu; optional_device m_bmcu; required_device m_msm; required_device m_gfxdecode; diff --git a/src/mame/includes/bking.h b/src/mame/includes/bking.h index 985826eefca..03b13033fe3 100644 --- a/src/mame/includes/bking.h +++ b/src/mame/includes/bking.h @@ -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 m_audiocpu; - //optional_device m_mcu; optional_device m_bmcu; required_device m_gfxdecode; required_device m_screen; required_device m_palette; required_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 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 a8c663a85b4..1941889a646 100644 --- a/src/mame/includes/buggychl.h +++ b/src/mame/includes/buggychl.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,7 +52,6 @@ public: /* devices */ required_device m_audiocpu; required_device m_maincpu; - //required_device m_mcu; required_device m_bmcu; required_device m_msm; required_device m_gfxdecode; 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 m_maincpu; required_device m_audiocpu; - optional_device m_mcu; + optional_device m_bmcu; required_device m_gfxdecode; required_device m_screen; required_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/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/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 index 5cebd83e8cd..08423f814a8 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Nicola Salmoria +// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood #include "emu.h" #include "cpu/z80/z80.h" #include "machine/taito68705interface.h" @@ -12,45 +12,52 @@ buggychl.cpp - buggychl bking.cpp - bking3 40love.cpp - 40love + bublbobl.cpp - tokio + slapfght.cpp - tigerh + + and the following with slight changes: + slapfght.cpp - slapfght */ const device_type TAITO68705_MCU = &device_creator; +const device_type TAITO68705_MCU_SLAP = &device_creator; +const device_type TAITO68705_MCU_TIGER = &device_creator; 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_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(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_mcu_sent(0), - m_main_sent(0), + m_from_mcu_latch(0), + m_to_mcu_latch(0), + m_old_portB(0), m_mcu(*this, "mcu") { } -ADDRESS_MAP_START( taito68705_mcu_map, AS_PROGRAM, 8, taito68705_mcu_device ) - ADDRESS_MAP_GLOBAL_MASK(0x7ff) - AM_RANGE(0x0000, 0x0000) AM_READWRITE(buggychl_68705_port_a_r, buggychl_68705_port_a_w) - AM_RANGE(0x0001, 0x0001) AM_READWRITE(buggychl_68705_port_b_r, buggychl_68705_port_b_w) - AM_RANGE(0x0002, 0x0002) AM_READWRITE(buggychl_68705_port_c_r, buggychl_68705_port_c_w) - AM_RANGE(0x0004, 0x0004) AM_WRITE(buggychl_68705_ddr_a_w) - AM_RANGE(0x0005, 0x0005) AM_WRITE(buggychl_68705_ddr_b_w) - AM_RANGE(0x0006, 0x0006) AM_WRITE(buggychl_68705_ddr_c_w) - AM_RANGE(0x0010, 0x007f) AM_RAM - AM_RANGE(0x0080, 0x07ff) AM_ROM -ADDRESS_MAP_END + static MACHINE_CONFIG_FRAGMENT( taito68705 ) - MCFG_CPU_ADD("mcu", M68705, DERIVED_CLOCK(1,1)) - MCFG_CPU_PROGRAM_MAP(taito68705_mcu_map) + MCFG_CPU_ADD("mcu", M68705_NEW, DERIVED_CLOCK(1,1)) // 3 Mhz + 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 @@ -75,19 +82,13 @@ void taito68705_mcu_device::device_config_complete() void taito68705_mcu_device::device_start() { - 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_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)); } //------------------------------------------------- @@ -96,19 +97,13 @@ void taito68705_mcu_device::device_start() void taito68705_mcu_device::device_reset() { - m_mcu_sent = 0; - m_main_sent = 0; + m_mcu_sent = false; + m_main_sent = false; 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; + m_from_mcu_latch = 0; + m_to_mcu_latch = 0; + m_old_portB = 0; m_mcu->set_input_line(0, CLEAR_LINE); } @@ -122,24 +117,6 @@ void taito68705_mcu_device::device_reset() ***************************************************************************/ -READ8_MEMBER( taito68705_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( taito68705_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( taito68705_mcu_device::buggychl_68705_ddr_a_w ) -{ - m_ddr_a = data; -} - - /* * Port B connections: @@ -160,86 +137,82 @@ WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_ddr_a_w ) */ -READ8_MEMBER( taito68705_mcu_device::buggychl_68705_port_b_r ) + + + +READ8_MEMBER(taito68705_mcu_device::mcu_r) { - return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b); + 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::buggychl_68705_port_b_w ) +WRITE8_MEMBER(taito68705_mcu_device::mcu_w) { - logerror("%s: 68705 port B write %02x\n", machine().describe_context(), data); +// logerror("%s: mcu_w %02x\n", space.machine().describe_context(), 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_from_main = data; + m_main_sent = true; + m_mcu->set_input_line(0, ASSERT_LINE); - m_port_b_out = data; } -WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_ddr_b_w ) + +READ8_MEMBER(taito68705_mcu_device::mcu_porta_r) { - m_ddr_b = data; +// 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; +} -/* - * 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( taito68705_mcu_device::buggychl_68705_port_c_r ) +READ8_MEMBER(taito68705_mcu_device::mcu_portc_r) { - m_port_c_in = 0; + uint8_t ret = 0; + if (m_main_sent) - m_port_c_in |= 0x01; + ret |= 0x01; if (!m_mcu_sent) - m_port_c_in |= 0x02; - logerror("$s: 68705 port C read %02x\n", machine().describe_context(), m_port_c_in); - return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c); -} + ret |= 0x02; -WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_port_c_w ) -{ - logerror("%s: 68705 port C write %02x\n", machine().describe_context(), data); - m_port_c_out = data; -} +// logerror("%s: mcu_portc_r %02x\n", space.machine().describe_context(), ret); -WRITE8_MEMBER( taito68705_mcu_device::buggychl_68705_ddr_c_w ) -{ - m_ddr_c = data; + return ret; } -WRITE8_MEMBER( taito68705_mcu_device::mcu_w ) +WRITE8_MEMBER(taito68705_mcu_device::mcu_portb_w) { - logerror("%s: mcu_w %02x\n", machine().describe_context(), data); - m_from_main = data; - m_main_sent = 1; - m_mcu->set_input_line(0, ASSERT_LINE); -} +// 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; -READ8_MEMBER( taito68705_mcu_device::mcu_r ) -{ - logerror("%s: mcu_r %02x\n", machine().describe_context(), m_from_mcu); - m_mcu_sent = 0; - return m_from_mcu; } +/* 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; @@ -255,3 +228,60 @@ READ8_MEMBER( taito68705_mcu_device::mcu_status_r ) 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; +} diff --git a/src/mame/machine/taito68705interface.h b/src/mame/machine/taito68705interface.h index 270cd0bc9c7..1cf57621274 100644 --- a/src/mame/machine/taito68705interface.h +++ b/src/mame/machine/taito68705interface.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Ernesto Corvi, Nicola Salmoria +// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood #include "cpu/m6805/m6805.h" @@ -7,20 +7,24 @@ 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() {} 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_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 ); + 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 @@ -29,22 +33,44 @@ protected: 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; + 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 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 static devcb_base &set_extension_cb(device_t &device, _Object object) { return downcast(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; -- cgit v1.2.3 From a6466114d5853269306240ad268691874c66c33a Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 18:30:34 +0000 Subject: c+p tidy (nw) --- src/mame/machine/taito68705interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/machine/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp index 08423f814a8..816a076522d 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -53,7 +53,7 @@ taito68705_mcu_device::taito68705_mcu_device(const machine_config &mconfig, devi static MACHINE_CONFIG_FRAGMENT( taito68705 ) - MCFG_CPU_ADD("mcu", M68705_NEW, DERIVED_CLOCK(1,1)) // 3 Mhz + 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)) -- cgit v1.2.3 From 0e3dcf9645b8afdfd94a182f97928c93793330ac Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 20:29:01 +0000 Subject: use common MCU hookup for flstory too --- src/mame/drivers/flstory.cpp | 60 ++++----------- src/mame/includes/flstory.h | 33 ++------ src/mame/machine/flstory.cpp | 125 ------------------------------- src/mame/machine/taito68705interface.cpp | 5 +- 4 files changed, 21 insertions(+), 202 deletions(-) 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/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 m_maincpu; required_device m_audiocpu; - optional_device m_mcu; + optional_device m_bmcu; required_device m_msm; required_device m_gfxdecode; required_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/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/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp index 816a076522d..a5e26e04959 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -13,10 +13,11 @@ bking.cpp - bking3 40love.cpp - 40love bublbobl.cpp - tokio - slapfght.cpp - tigerh + flstory.cpp - flstory and the following with slight changes: - slapfght.cpp - slapfght + slapfght.cpp - tigerh (inverted status bits read on portC) + - slapfght (extended outputs for scrolling) */ const device_type TAITO68705_MCU = &device_creator; -- cgit v1.2.3 From faa93d6a658a7f5e25ac7e21f1c0a316754d110a Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 20:52:55 +0000 Subject: hook up nycaptor with the generic hookup --- src/mame/drivers/nycaptor.cpp | 51 ++--------------- src/mame/includes/nycaptor.h | 32 ++--------- src/mame/machine/nycaptor.cpp | 94 +------------------------------- src/mame/machine/taito68705interface.cpp | 1 + 4 files changed, 13 insertions(+), 165 deletions(-) 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/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 m_maincpu; required_device m_audiocpu; required_device m_subcpu; - optional_device m_mcu; + optional_device m_bmcu; required_device m_msm; required_device m_gfxdecode; required_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/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/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp index a5e26e04959..e4fde473646 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -14,6 +14,7 @@ 40love.cpp - 40love bublbobl.cpp - tokio flstory.cpp - flstory + nycaptor.cpp - nycaptor and the following with slight changes: slapfght.cpp - tigerh (inverted status bits read on portC) -- cgit v1.2.3 From e8d7b39a9410c1cc6b09e549dc24316d0ec2f76e Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 21:09:22 +0000 Subject: use generic code for lsasquad too --- src/mame/drivers/lsasquad.cpp | 48 +++----------- src/mame/includes/lsasquad.h | 25 ++------ src/mame/machine/lsasquad.cpp | 107 ++++--------------------------- src/mame/machine/taito68705interface.cpp | 2 + 4 files changed, 28 insertions(+), 154 deletions(-) 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/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 m_maincpu; required_device m_audiocpu; - optional_device m_mcu; + optional_device m_bmcu; required_device m_gfxdecode; required_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/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/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp index e4fde473646..d0949dd2847 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -15,6 +15,8 @@ bublbobl.cpp - tokio flstory.cpp - flstory nycaptor.cpp - nycaptor + lsasquad.cpp - lsasquad + - daikaiju and the following with slight changes: slapfght.cpp - tigerh (inverted status bits read on portC) -- cgit v1.2.3 From 9893cff3ac7c611e986666757ef8a7ea606a51a6 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 22:07:31 +0000 Subject: use generic code for lkage.cpp --- scripts/target/mame/arcade.lua | 1 - src/mame/drivers/lkage.cpp | 80 +++++++---------------- src/mame/includes/lkage.h | 34 ++-------- src/mame/machine/lkage.cpp | 141 ----------------------------------------- 4 files changed, 26 insertions(+), 230 deletions(-) delete mode 100644 src/mame/machine/lkage.cpp diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 6912a9dc593..1072566b32b 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -3608,7 +3608,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/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/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 m_maincpu; required_device m_audiocpu; - optional_device m_mcu; + optional_device m_bmcu; required_device m_gfxdecode; required_device m_palette; required_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/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; -} -- cgit v1.2.3 From c56c0d6372f47e8f77a3b478f448c0b1ec17f59b Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 28 Dec 2016 22:50:35 +0000 Subject: some notes on what can / can't be hooked up and what needs looking at --- src/mame/machine/taito68705interface.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/mame/machine/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp index d0949dd2847..bbba0f8e002 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -17,10 +17,30 @@ 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) + + 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 - ^^ + bigevglf.cpp - can probably be hooked up + + 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; -- cgit v1.2.3 From 2bf764c9a172679f5a042b81c39830672416b4cb Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 29 Dec 2016 04:16:26 +0000 Subject: big event golf hookup doesn't seem identical (or isn't hooked up 100% properly) but can use the common device too (nw) --- src/mame/drivers/bigevglf.cpp | 52 +++------------------ src/mame/includes/bigevglf.h | 17 ++----- src/mame/machine/bigevglf.cpp | 80 +------------------------------- src/mame/machine/taito68705interface.cpp | 45 +++++++++++++++++- src/mame/machine/taito68705interface.h | 12 ++++- 5 files changed, 67 insertions(+), 139 deletions(-) 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/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 m_audiocpu; - optional_device m_mcu; + optional_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/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/taito68705interface.cpp b/src/mame/machine/taito68705interface.cpp index bbba0f8e002..3e2f5701bb8 100644 --- a/src/mame/machine/taito68705interface.cpp +++ b/src/mame/machine/taito68705interface.cpp @@ -22,6 +22,8 @@ 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 @@ -31,7 +33,6 @@ xain.cpp - not a Taito game (licensed to Taito?) but MCU hookup looks almost the same renegade.cpp - ^^ matmania.cpp - ^^ - bigevglf.cpp - can probably be hooked up 68705 sets in Taito drivers that are NOT suitable for hookup here? bublbobl.cpp - bub68705 - this is a bootleg, not an official Taito hookup @@ -46,6 +47,7 @@ const device_type TAITO68705_MCU = &device_creator; const device_type TAITO68705_MCU_SLAP = &device_creator; const device_type TAITO68705_MCU_TIGER = &device_creator; +const device_type TAITO68705_MCU_BEG = &device_creator; 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__), @@ -309,3 +311,44 @@ READ8_MEMBER(taito68705_mcu_tiger_device::mcu_portc_r) 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 index 1cf57621274..c0ad508ef69 100644 --- a/src/mame/machine/taito68705interface.h +++ b/src/mame/machine/taito68705interface.h @@ -11,7 +11,7 @@ public: ~taito68705_mcu_device() {} - DECLARE_WRITE8_MEMBER( mcu_w ); + virtual DECLARE_WRITE8_MEMBER( mcu_w ); DECLARE_READ8_MEMBER( mcu_r ); DECLARE_READ8_MEMBER( mcu_porta_r ); virtual DECLARE_READ8_MEMBER( mcu_portc_r ); @@ -74,3 +74,13 @@ public: }; 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; -- cgit v1.2.3