Merge pull request #1886 from mamehaze/281216

Taito 68705 refactoring
This commit is contained in:
R. Belmont 2017-01-01 12:01:04 -05:00 committed by GitHub
commit 94de598e97
33 changed files with 639 additions and 1625 deletions

View File

@ -3550,8 +3550,8 @@ files {
MAME_DIR .. "src/mame/video/bublbobl.cpp",
MAME_DIR .. "src/mame/drivers/buggychl.cpp",
MAME_DIR .. "src/mame/includes/buggychl.h",
MAME_DIR .. "src/mame/machine/buggychl.cpp",
MAME_DIR .. "src/mame/machine/buggychl.h",
MAME_DIR .. "src/mame/machine/taito68705interface.cpp",
MAME_DIR .. "src/mame/machine/taito68705interface.h",
MAME_DIR .. "src/mame/video/buggychl.cpp",
MAME_DIR .. "src/mame/drivers/capr1.cpp",
MAME_DIR .. "src/mame/drivers/caprcyc.cpp",
@ -3612,7 +3612,6 @@ files {
MAME_DIR .. "src/mame/drivers/lgp.cpp",
MAME_DIR .. "src/mame/drivers/lkage.cpp",
MAME_DIR .. "src/mame/includes/lkage.h",
MAME_DIR .. "src/mame/machine/lkage.cpp",
MAME_DIR .. "src/mame/video/lkage.cpp",
MAME_DIR .. "src/mame/drivers/lsasquad.cpp",
MAME_DIR .. "src/mame/includes/lsasquad.h",

View File

@ -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 )

View File

@ -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 )

View File

@ -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 */

View File

@ -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 )

View File

@ -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 */

View File

@ -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 )

View File

@ -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 )

View File

@ -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 )

View File

@ -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 )

View File

@ -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 */

View File

@ -1,7 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski
#include "machine/buggychl.h"
#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
@ -18,7 +18,6 @@ public:
m_mcu_ram(*this, "mcu_ram"),
m_audiocpu(*this, "audiocpu"),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@ -75,8 +74,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_mcu;
optional_device<buggychl_mcu_device> m_bmcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;

View File

@ -1,6 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski, Tomasz Slanina
#include "sound/msm5232.h"
#include "machine/taito68705interface.h"
class bigevglf_state : public driver_device
{
@ -11,7 +12,7 @@ public:
m_spriteram1(*this, "spriteram1"),
m_spriteram2(*this, "spriteram2"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@ -38,18 +39,6 @@ public:
uint8_t m_sound_state;
/* MCU related */
uint8_t m_from_mcu;
int m_mcu_sent;
int m_main_sent;
uint8_t m_port_a_in;
uint8_t m_port_a_out;
uint8_t m_ddr_a;
uint8_t m_port_b_in;
uint8_t m_port_b_out;
uint8_t m_ddr_b;
uint8_t m_port_c_in;
uint8_t m_port_c_out;
uint8_t m_ddr_c;
int m_mcu_coin_bit5;
/* misc */
@ -59,7 +48,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
optional_device<taito68705_mcu_device> m_bmcu;
DECLARE_WRITE8_MEMBER(beg_banking_w);
DECLARE_WRITE8_MEMBER(beg_fromsound_w);
DECLARE_READ8_MEMBER(beg_fromsound_r);

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Mike Balfour, Zsolt Vasvari
#include "machine/buggychl.h"
#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
class bking_state : public driver_device
@ -11,7 +11,6 @@ public:
: driver_device(mconfig, type, tag),
m_playfield_ram(*this, "playfield_ram"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
@ -51,22 +50,12 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
optional_device<buggychl_mcu_device> m_bmcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
#if 0
/* 68705 */
uint8_t m_port_a_in;
uint8_t m_port_a_out;
uint8_t m_ddr_a;
uint8_t m_port_b_in;
uint8_t m_port_b_out;
uint8_t m_ddr_b;
#endif
DECLARE_READ8_MEMBER(bking_sndnmi_disable_r);
DECLARE_WRITE8_MEMBER(bking_sndnmi_enable_w);
DECLARE_WRITE8_MEMBER(bking_soundlatch_w);

View File

@ -2,6 +2,7 @@
// copyright-holders:Chris Moore, Nicola Salmoria
#include "machine/gen_latch.h"
#include "machine/taito68705interface.h"
class bublbobl_state : public driver_device
{
@ -17,13 +18,6 @@ public:
m_videoram(*this, "videoram"),
m_objectram(*this, "objectram"),
m_mcu_sharedram(*this, "mcu_sharedram"),
m_mcu_sent(false),
m_main_sent(false),
m_from_main(0),
m_from_mcu(0),
m_from_mcu_latch(0),
m_to_mcu_latch(0),
m_old_portB(0),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"),
m_audiocpu(*this, "audiocpu"),
@ -73,14 +67,6 @@ public:
/* Bobble Bobble */
int m_ic43_a;
int m_ic43_b;
/* Tokio */
bool m_mcu_sent;
bool m_main_sent;
uint8_t m_from_main;
uint8_t m_from_mcu;
uint8_t m_from_mcu_latch;
uint8_t m_to_mcu_latch;
uint8_t m_old_portB;
/* devices */
required_device<cpu_device> m_maincpu;
@ -95,8 +81,6 @@ public:
DECLARE_WRITE8_MEMBER(tokio_bankswitch_w);
DECLARE_WRITE8_MEMBER(tokio_videoctrl_w);
DECLARE_WRITE8_MEMBER(bublbobl_nmitrigger_w);
DECLARE_READ8_MEMBER(tokio_mcu_r);
DECLARE_WRITE8_MEMBER(tokio_mcu_w);
DECLARE_READ8_MEMBER(tokiob_mcu_r);
DECLARE_WRITE8_MEMBER(bublbobl_sound_command_w);
@ -132,20 +116,6 @@ public:
DECLARE_WRITE8_MEMBER(bublbobl_68705_port_b_w);
DECLARE_WRITE8_MEMBER(bublbobl_68705_ddr_b_w);
DECLARE_CUSTOM_INPUT_MEMBER(tokio_mcu_sent_r);
DECLARE_CUSTOM_INPUT_MEMBER(tokio_main_sent_r);
DECLARE_READ8_MEMBER(tokio_mcu_porta_r);
DECLARE_READ8_MEMBER(tokio_mcu_portc_r);
DECLARE_WRITE8_MEMBER(tokio_mcu_porta_w);
DECLARE_WRITE8_MEMBER(tokio_mcu_portb_w);
DECLARE_DRIVER_INIT(tokiob);
DECLARE_DRIVER_INIT(tokio);
DECLARE_DRIVER_INIT(dland);
DECLARE_DRIVER_INIT(bublbobl);

View File

@ -4,7 +4,7 @@
buggychl
*/
#include "machine/buggychl.h"
#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
@ -20,7 +20,6 @@ public:
m_scrollh(*this, "scrollh"),
m_audiocpu(*this, "audiocpu"),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
@ -53,8 +52,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_mcu;
required_device<buggychl_mcu_device> m_bmcu;
required_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;

View File

@ -3,6 +3,7 @@
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
#include "machine/taito68705interface.h"
class flstory_state : public driver_device
{
@ -15,7 +16,7 @@ public:
m_workram(*this, "workram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@ -46,26 +47,14 @@ public:
uint8_t m_snd_ctrl2;
uint8_t m_snd_ctrl3;
/* protection */
uint8_t m_from_main;
uint8_t m_from_mcu;
int m_mcu_sent;
int m_main_sent;
uint8_t m_port_a_in;
uint8_t m_port_a_out;
uint8_t m_ddr_a;
uint8_t m_port_b_in;
uint8_t m_port_b_out;
uint8_t m_ddr_b;
uint8_t m_port_c_in;
uint8_t m_port_c_out;
uint8_t m_ddr_c;
/* protection sims */
uint8_t m_from_mcu;
int m_mcu_select;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@ -89,18 +78,6 @@ public:
DECLARE_WRITE8_MEMBER(nmi_enable_w);
DECLARE_READ8_MEMBER(rumba_mcu_r);
DECLARE_WRITE8_MEMBER(rumba_mcu_w);
DECLARE_READ8_MEMBER(flstory_68705_port_a_r);
DECLARE_WRITE8_MEMBER(flstory_68705_port_a_w);
DECLARE_WRITE8_MEMBER(flstory_68705_ddr_a_w);
DECLARE_READ8_MEMBER(flstory_68705_port_b_r);
DECLARE_WRITE8_MEMBER(flstory_68705_port_b_w);
DECLARE_WRITE8_MEMBER(flstory_68705_ddr_b_w);
DECLARE_READ8_MEMBER(flstory_68705_port_c_r);
DECLARE_WRITE8_MEMBER(flstory_68705_port_c_w);
DECLARE_WRITE8_MEMBER(flstory_68705_ddr_c_w);
DECLARE_WRITE8_MEMBER(flstory_mcu_w);
DECLARE_READ8_MEMBER(flstory_mcu_r);
DECLARE_READ8_MEMBER(flstory_mcu_status_r);
DECLARE_WRITE8_MEMBER(onna34ro_mcu_w);
DECLARE_READ8_MEMBER(onna34ro_mcu_r);
DECLARE_READ8_MEMBER(onna34ro_mcu_status_r);

View File

@ -2,6 +2,7 @@
// copyright-holders:Phil Stroffolino
#include "machine/gen_latch.h"
#include "machine/taito68705interface.h"
class lkage_state : public driver_device
{
@ -14,7 +15,7 @@ public:
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch") { }
@ -38,21 +39,6 @@ public:
int m_sound_nmi_enable;
int m_pending_nmi;
/* mcu */
uint8_t m_from_main;
uint8_t m_from_mcu;
int m_mcu_sent;
int m_main_sent;
uint8_t m_port_a_in;
uint8_t m_port_a_out;
uint8_t m_ddr_a;
uint8_t m_port_b_in;
uint8_t m_port_b_out;
uint8_t m_ddr_b;
uint8_t m_port_c_in;
uint8_t m_port_c_out;
uint8_t m_ddr_c;
/* lkageb fake mcu */
uint8_t m_mcu_val;
int m_mcu_ready; /* cpu data/mcu ready status */
@ -60,7 +46,7 @@ public:
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
@ -73,22 +59,10 @@ public:
DECLARE_READ8_MEMBER(fake_mcu_r);
DECLARE_WRITE8_MEMBER(fake_mcu_w);
DECLARE_READ8_MEMBER(fake_status_r);
DECLARE_READ8_MEMBER(lkage_68705_port_a_r);
DECLARE_WRITE8_MEMBER(lkage_68705_port_a_w);
DECLARE_WRITE8_MEMBER(lkage_68705_ddr_a_w);
DECLARE_READ8_MEMBER(lkage_68705_port_b_r);
DECLARE_WRITE8_MEMBER(lkage_68705_port_b_w);
DECLARE_WRITE8_MEMBER(lkage_68705_ddr_b_w);
DECLARE_READ8_MEMBER(lkage_68705_port_c_r);
DECLARE_WRITE8_MEMBER(lkage_68705_port_c_w);
DECLARE_WRITE8_MEMBER(lkage_68705_ddr_c_w);
DECLARE_WRITE8_MEMBER(lkage_mcu_w);
DECLARE_READ8_MEMBER(lkage_mcu_r);
DECLARE_READ8_MEMBER(lkage_mcu_status_r);
DECLARE_WRITE8_MEMBER(lkage_videoram_w);
DECLARE_DRIVER_INIT(bygone);
DECLARE_DRIVER_INIT(lkage);
DECLARE_DRIVER_INIT(lkageb);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
#include "machine/taito68705interface.h"
class lsasquad_state : public driver_device
{
@ -12,7 +13,7 @@ public:
m_priority_prom(*this, "prio_prom"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { }
@ -29,22 +30,11 @@ public:
int m_sound_cmd;
int m_sound_result;
/* mcu */
uint8_t m_from_main;
uint8_t m_from_mcu;
int m_mcu_sent;
int m_main_sent;
uint8_t m_port_a_in;
uint8_t m_port_a_out;
uint8_t m_ddr_a;
uint8_t m_port_b_in;
uint8_t m_port_b_out;
uint8_t m_ddr_b;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@ -58,14 +48,7 @@ public:
DECLARE_READ8_MEMBER(lsasquad_sound_status_r);
DECLARE_READ8_MEMBER(daikaiju_sh_sound_command_r);
DECLARE_READ8_MEMBER(daikaiju_sound_status_r);
DECLARE_READ8_MEMBER(lsasquad_68705_port_a_r);
DECLARE_WRITE8_MEMBER(lsasquad_68705_port_a_w);
DECLARE_WRITE8_MEMBER(lsasquad_68705_ddr_a_w);
DECLARE_READ8_MEMBER(lsasquad_68705_port_b_r);
DECLARE_WRITE8_MEMBER(lsasquad_68705_port_b_w);
DECLARE_WRITE8_MEMBER(lsasquad_68705_ddr_b_w);
DECLARE_WRITE8_MEMBER(lsasquad_mcu_w);
DECLARE_READ8_MEMBER(lsasquad_mcu_r);
DECLARE_READ8_MEMBER(lsasquad_mcu_status_r);
DECLARE_READ8_MEMBER(daikaiju_mcu_status_r);
DECLARE_WRITE8_MEMBER(unk);

View File

@ -1,7 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski
#include "machine/buggychl.h"
#include "machine/taito68705interface.h"
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
@ -58,7 +58,7 @@ public:
/* devices */
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_maincpu;
optional_device<buggychl_mcu_device> m_bmcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;

View File

@ -3,6 +3,7 @@
#include "machine/gen_latch.h"
#include "sound/msm5232.h"
#include "machine/taito68705interface.h"
class nycaptor_state : public driver_device
{
@ -16,7 +17,7 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_subcpu(*this, "sub"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@ -36,21 +37,6 @@ public:
uint8_t m_char_bank;
uint8_t m_palette_bank;
/* mcu */
uint8_t m_from_main;
uint8_t m_from_mcu;
int m_mcu_sent;
int m_main_sent;
uint8_t m_port_a_in;
uint8_t m_port_a_out;
uint8_t m_ddr_a;
uint8_t m_port_b_in;
uint8_t m_port_b_out;
uint8_t m_ddr_b;
uint8_t m_port_c_in;
uint8_t m_port_c_out;
uint8_t m_ddr_c;
/* misc */
int m_generic_control_reg;
int m_sound_nmi_enable;
@ -64,7 +50,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<cpu_device> m_subcpu;
optional_device<cpu_device> m_mcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@ -88,17 +74,7 @@ public:
DECLARE_READ8_MEMBER(cyclshtg_mcu_status_r1);
DECLARE_WRITE8_MEMBER(cyclshtg_generic_control_w);
DECLARE_READ8_MEMBER(unk_r);
DECLARE_READ8_MEMBER(nycaptor_68705_port_a_r);
DECLARE_WRITE8_MEMBER(nycaptor_68705_port_a_w);
DECLARE_WRITE8_MEMBER(nycaptor_68705_ddr_a_w);
DECLARE_READ8_MEMBER(nycaptor_68705_port_b_r);
DECLARE_WRITE8_MEMBER(nycaptor_68705_port_b_w);
DECLARE_WRITE8_MEMBER(nycaptor_68705_ddr_b_w);
DECLARE_READ8_MEMBER(nycaptor_68705_port_c_r);
DECLARE_WRITE8_MEMBER(nycaptor_68705_port_c_w);
DECLARE_WRITE8_MEMBER(nycaptor_68705_ddr_c_w);
DECLARE_WRITE8_MEMBER(nycaptor_mcu_w);
DECLARE_READ8_MEMBER(nycaptor_mcu_r);
DECLARE_READ8_MEMBER(nycaptor_mcu_status_r1);
DECLARE_READ8_MEMBER(nycaptor_mcu_status_r2);
DECLARE_WRITE8_MEMBER(nycaptor_videoram_w);

View File

@ -8,7 +8,7 @@
#include "cpu/z80/z80.h"
#include "video/bufsprite.h"
#include "machine/taito68705interface.h"
class slapfght_state : public driver_device
{
@ -17,7 +17,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
@ -31,7 +31,7 @@ public:
// devices, memory pointers
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
@ -61,15 +61,6 @@ public:
bool m_main_irq_enabled;
bool m_sound_nmi_enabled;
bool m_mcu_sent;
bool m_main_sent;
uint8_t m_from_main;
uint8_t m_from_mcu;
uint8_t m_from_mcu_latch;
uint8_t m_to_mcu_latch;
uint8_t m_old_portB;
int m_getstar_status;
int m_getstar_sequence_index;
int m_getstar_status_state;
@ -79,6 +70,7 @@ public:
uint8_t m_gs_e;
uint8_t m_tigerhb_cmd;
DECLARE_READ8_MEMBER(tigerh_mcu_status_r);
DECLARE_WRITE8_MEMBER(sound_reset_w);
DECLARE_WRITE8_MEMBER(irq_enable_w);
DECLARE_WRITE8_MEMBER(prg_bank_w);
@ -94,19 +86,7 @@ public:
DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(palette_bank_w);
DECLARE_WRITE8_MEMBER(tigerh_mcu_w);
DECLARE_READ8_MEMBER(tigerh_mcu_r);
DECLARE_READ8_MEMBER(tigerh_mcu_status_r);
DECLARE_READ8_MEMBER(tigerh_mcu_porta_r);
DECLARE_WRITE8_MEMBER(tigerh_mcu_porta_w);
DECLARE_WRITE8_MEMBER(tigerh_mcu_portb_w);
DECLARE_WRITE8_MEMBER(slapfght_mcu_portb_w);
DECLARE_READ8_MEMBER(tigerh_mcu_portc_r);
DECLARE_READ8_MEMBER(slapfght_mcu_portc_r);
DECLARE_WRITE8_MEMBER(scroll_from_mcu_w);
DECLARE_READ8_MEMBER(getstar_mcusim_r);
DECLARE_WRITE8_MEMBER(getstar_mcusim_w);

View File

@ -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;

View File

@ -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;
}

View File

@ -1,234 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Ernesto Corvi, Nicola Salmoria
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/buggychl.h"
const device_type BUGGYCHL_MCU = &device_creator<buggychl_mcu_device>;
buggychl_mcu_device::buggychl_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, BUGGYCHL_MCU, "M68705 MCU Simulation (Buggy Challenge)", tag, owner, clock, "buggychl_mcu", __FILE__),
m_port_a_in(0),
m_port_a_out(0),
m_ddr_a(0),
m_port_b_in(0),
m_port_b_out(0),
m_ddr_b(0),
m_port_c_in(0),
m_port_c_out(0),
m_ddr_c(0),
m_from_main(0),
m_from_mcu(0),
m_mcu_sent(0),
m_main_sent(0)
{
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void buggychl_mcu_device::device_config_complete()
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void buggychl_mcu_device::device_start()
{
m_mcu = machine().device("mcu");
save_item(NAME(m_from_main));
save_item(NAME(m_from_mcu));
save_item(NAME(m_mcu_sent));
save_item(NAME(m_main_sent));
save_item(NAME(m_port_a_in));
save_item(NAME(m_port_a_out));
save_item(NAME(m_ddr_a));
save_item(NAME(m_port_b_in));
save_item(NAME(m_port_b_out));
save_item(NAME(m_ddr_b));
save_item(NAME(m_port_c_in));
save_item(NAME(m_port_c_out));
save_item(NAME(m_ddr_c));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void buggychl_mcu_device::device_reset()
{
m_mcu_sent = 0;
m_main_sent = 0;
m_from_main = 0;
m_from_mcu = 0;
m_port_a_in = 0;
m_port_a_out = 0;
m_ddr_a = 0;
m_port_b_in = 0;
m_port_b_out = 0;
m_ddr_b = 0;
m_port_c_in = 0;
m_port_c_out = 0;
m_ddr_c = 0;
}
/***************************************************************************
Buggy Challenge 68705 protection interface
This is accurate. FairyLand Story seems to be identical.
***************************************************************************/
READ8_MEMBER( buggychl_mcu_device::buggychl_68705_port_a_r )
{
//logerror("%04x: 68705 port A read %02x\n", m_mcu->safe_pc(), m_port_a_in);
return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_port_a_w )
{
//logerror("%04x: 68705 port A write %02x\n", m_mcu->safe_pc(), data);
m_port_a_out = data;
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_ddr_a_w )
{
m_ddr_a = data;
}
/*
* Port B connections:
* parts in [ ] are optional (not used by buggychl)
*
* all bits are logical 1 when read (+5V pullup)
*
* 0 n.c.
* 1 W IRQ ack and enable latch which holds data from main Z80 memory
* 2 W loads latch to Z80
* 3 W to Z80 BUSRQ (put it on hold?)
* 4 W n.c.
* 5 W [selects Z80 memory access direction (0 = write 1 = read)]
* 6 W [loads the latch which holds the low 8 bits of the address of
* the main Z80 memory location to access]
* 7 W [loads the latch which holds the high 8 bits of the address of
* the main Z80 memory location to access]
*/
READ8_MEMBER( buggychl_mcu_device::buggychl_68705_port_b_r )
{
return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_port_b_w )
{
logerror("%04x: 68705 port B write %02x\n", m_mcu->safe_pc(), data);
if ((m_ddr_b & 0x02) && (~data & 0x02) && (m_port_b_out & 0x02))
{
m_port_a_in = m_from_main;
if (m_main_sent)
m_mcu->execute().set_input_line(0, CLEAR_LINE);
m_main_sent = 0;
logerror("read command %02x from main cpu\n", m_port_a_in);
}
if ((m_ddr_b & 0x04) && (data & 0x04) && (~m_port_b_out & 0x04))
{
logerror("send command %02x to main cpu\n", m_port_a_out);
m_from_mcu = m_port_a_out;
m_mcu_sent = 1;
}
m_port_b_out = data;
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_ddr_b_w )
{
m_ddr_b = data;
}
/*
* Port C connections:
*
* all bits are logical 1 when read (+5V pullup)
*
* 0 R 1 when pending command Z80->68705
* 1 R 0 when pending command 68705->Z80
*/
READ8_MEMBER( buggychl_mcu_device::buggychl_68705_port_c_r )
{
m_port_c_in = 0;
if (m_main_sent)
m_port_c_in |= 0x01;
if (!m_mcu_sent)
m_port_c_in |= 0x02;
logerror("%04x: 68705 port C read %02x\n", m_mcu->safe_pc(), m_port_c_in);
return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_port_c_w )
{
logerror("%04x: 68705 port C write %02x\n", m_mcu->safe_pc(), data);
m_port_c_out = data;
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_68705_ddr_c_w )
{
m_ddr_c = data;
}
WRITE8_MEMBER( buggychl_mcu_device::buggychl_mcu_w )
{
logerror("%04x: mcu_w %02x\n", m_mcu->safe_pc(), data);
m_from_main = data;
m_main_sent = 1;
m_mcu->execute().set_input_line(0, ASSERT_LINE);
}
READ8_MEMBER( buggychl_mcu_device::buggychl_mcu_r )
{
logerror("%04x: mcu_r %02x\n", m_mcu->safe_pc(), m_from_mcu);
m_mcu_sent = 0;
return m_from_mcu;
}
READ8_MEMBER( buggychl_mcu_device::buggychl_mcu_status_r )
{
int res = 0;
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
/* bit 1 = when 1, mcu has sent data to the main cpu */
//logerror("%04x: mcu_status_r\n",m_mcu->safe_pc());
if (!m_main_sent)
res |= 0x01;
if (m_mcu_sent)
res |= 0x02;
return res;
}
ADDRESS_MAP_START( buggychl_mcu_map, AS_PROGRAM, 8, buggychl_mcu_device )
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
AM_RANGE(0x0000, 0x0000) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_68705_port_a_r, buggychl_68705_port_a_w)
AM_RANGE(0x0001, 0x0001) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_68705_port_b_r, buggychl_68705_port_b_w)
AM_RANGE(0x0002, 0x0002) AM_DEVREADWRITE("bmcu", buggychl_mcu_device, buggychl_68705_port_c_r, buggychl_68705_port_c_w)
AM_RANGE(0x0004, 0x0004) AM_DEVWRITE("bmcu", buggychl_mcu_device, buggychl_68705_ddr_a_w)
AM_RANGE(0x0005, 0x0005) AM_DEVWRITE("bmcu", buggychl_mcu_device, buggychl_68705_ddr_b_w)
AM_RANGE(0x0006, 0x0006) AM_DEVWRITE("bmcu", buggychl_mcu_device, buggychl_68705_ddr_c_w)
AM_RANGE(0x0010, 0x007f) AM_RAM
AM_RANGE(0x0080, 0x07ff) AM_ROM
ADDRESS_MAP_END

View File

@ -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;

View File

@ -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];

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
if (m_bmcu)
{
if (!m_bmcu->get_main_sent())
res |= 0x02;
if (!m_bmcu->get_mcu_sent())
res |= 0x04;
}
return res;
}
/***************************************************************************
MCU port handlers (general)
***************************************************************************/
READ8_MEMBER(slapfght_state::tigerh_mcu_porta_r)
WRITE8_MEMBER(slapfght_state::scroll_from_mcu_w)
{
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))
switch (offset)
{
if (m_main_sent)
m_mcu->set_input_line(0, CLEAR_LINE);
m_to_mcu_latch = m_from_main;
m_main_sent = false;
case 0x00: m_scrollx_lo = data; break;
case 0x01: m_scrollx_hi = data; break;
}
if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04))
{
m_from_mcu = m_from_mcu_latch;
m_mcu_sent = true;
}
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;
}
/***************************************************************************
MCU port handlers (Slap Fight)
***************************************************************************/
WRITE8_MEMBER(slapfght_state::slapfght_mcu_portb_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))
{
m_scrollx_hi = m_from_mcu_latch;
}
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;
}
/***************************************************************************

View File

@ -0,0 +1,354 @@
// license:BSD-3-Clause
// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/taito68705interface.h"
/*
Most Taito 68705s share a similar (often identical) hookup.
This file encapsulates that.
used by:
buggychl.cpp - buggychl
bking.cpp - bking3
40love.cpp - 40love
bublbobl.cpp - tokio
flstory.cpp - flstory
nycaptor.cpp - nycaptor
lsasquad.cpp - lsasquad
- daikaiju
lkage.cpp - lkage
and the following with slight changes:
slapfght.cpp - tigerh (inverted status bits read on portC)
- slapfght (extended outputs for scrolling)
bigevglf.cpp - writes to mcu aren't latched(?)f
not hooked up here, but possible (needs investigating)
pitnrun.cpp - have more functionality on portB, currently using 'instant timers' for latches
taitosj.cpp - ^^
changela.cpp - ^^
arkanoid.cpp - uses 68705 timers (they need to be moved to the 68705 core) and also some portB differences?
xain.cpp - not a Taito game (licensed to Taito?) but MCU hookup looks almost the same
renegade.cpp - ^^
matmania.cpp - ^^
68705 sets in Taito drivers that are NOT suitable for hookup here?
bublbobl.cpp - bub68705 - this is a bootleg, not an official Taito hookup
mexico86.cpp - knightb, mexico86 - bootleg 68705s
retofinv.cpp - the current MCU dump is a bootleg at least
sqix.cpp - hotsmash - kaneko hookup, different from Taito ones.
there are other drivers (and games in existing drivers) that could hookup here, but currently lack MCU dumps.
*/
const device_type TAITO68705_MCU = &device_creator<taito68705_mcu_device>;
const device_type TAITO68705_MCU_SLAP = &device_creator<taito68705_mcu_slap_device>;
const device_type TAITO68705_MCU_TIGER = &device_creator<taito68705_mcu_tiger_device>;
const device_type TAITO68705_MCU_BEG = &device_creator<taito68705_mcu_beg_device>;
taito68705_mcu_device::taito68705_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, TAITO68705_MCU, "Taito M68705 MCU Interface", tag, owner, clock, "taito68705", __FILE__),
m_mcu_sent(false),
m_main_sent(false),
m_from_main(0),
m_from_mcu(0),
m_from_mcu_latch(0),
m_to_mcu_latch(0),
m_old_portB(0),
m_mcu(*this, "mcu")
{
}
taito68705_mcu_device::taito68705_mcu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, u32 clock, const char *shortname, const char *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
m_mcu_sent(false),
m_main_sent(false),
m_from_main(0),
m_from_mcu(0),
m_from_mcu_latch(0),
m_to_mcu_latch(0),
m_old_portB(0),
m_mcu(*this, "mcu")
{
}
static MACHINE_CONFIG_FRAGMENT( taito68705 )
MCFG_CPU_ADD("mcu", M68705_NEW, DERIVED_CLOCK(1,1))
MCFG_M68705_PORTA_R_CB(READ8(taito68705_mcu_device, mcu_porta_r))
MCFG_M68705_PORTA_W_CB(WRITE8(taito68705_mcu_device, mcu_porta_w))
MCFG_M68705_PORTB_W_CB(WRITE8(taito68705_mcu_device, mcu_portb_w))
MCFG_M68705_PORTC_R_CB(READ8(taito68705_mcu_device, mcu_portc_r))
MACHINE_CONFIG_END
machine_config_constructor taito68705_mcu_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( taito68705 );
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void taito68705_mcu_device::device_config_complete()
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void taito68705_mcu_device::device_start()
{
save_item(NAME(m_mcu_sent));
save_item(NAME(m_main_sent));
save_item(NAME(m_from_main));
save_item(NAME(m_from_mcu));
save_item(NAME(m_from_mcu_latch));
save_item(NAME(m_to_mcu_latch));
save_item(NAME(m_old_portB));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void taito68705_mcu_device::device_reset()
{
m_mcu_sent = false;
m_main_sent = false;
m_from_main = 0;
m_from_mcu = 0;
m_from_mcu_latch = 0;
m_to_mcu_latch = 0;
m_old_portB = 0;
m_mcu->set_input_line(0, CLEAR_LINE);
}
/***************************************************************************
Buggy Challenge 68705 protection interface
This is accurate. FairyLand Story seems to be identical.
***************************************************************************/
/*
* Port B connections:
* parts in [ ] are optional (not used by buggychl)
*
* all bits are logical 1 when read (+5V pullup)
*
* 0 n.c.
* 1 W IRQ ack and enable latch which holds data from main Z80 memory
* 2 W loads latch to Z80
* 3 W to Z80 BUSRQ (put it on hold?)
* 4 W n.c.
* 5 W [selects Z80 memory access direction (0 = write 1 = read)]
* 6 W [loads the latch which holds the low 8 bits of the address of
* the main Z80 memory location to access]
* 7 W [loads the latch which holds the high 8 bits of the address of
* the main Z80 memory location to access]
*/
READ8_MEMBER(taito68705_mcu_device::mcu_r)
{
m_mcu_sent = false;
// logerror("%s: mcu_r %02x\n", space.machine().describe_context(), m_from_mcu);
return m_from_mcu;
}
WRITE8_MEMBER(taito68705_mcu_device::mcu_w)
{
// logerror("%s: mcu_w %02x\n", space.machine().describe_context(), data);
m_from_main = data;
m_main_sent = true;
m_mcu->set_input_line(0, ASSERT_LINE);
}
READ8_MEMBER(taito68705_mcu_device::mcu_porta_r)
{
// logerror("mcu_porta_r\n");
return m_to_mcu_latch;
}
WRITE8_MEMBER(taito68705_mcu_device::mcu_porta_w)
{
// logerror("mcu_porta_w %02x\n", data);
m_from_mcu_latch = data;
}
READ8_MEMBER(taito68705_mcu_device::mcu_portc_r)
{
uint8_t ret = 0;
if (m_main_sent)
ret |= 0x01;
if (!m_mcu_sent)
ret |= 0x02;
// logerror("%s: mcu_portc_r %02x\n", space.machine().describe_context(), ret);
return ret;
}
WRITE8_MEMBER(taito68705_mcu_device::mcu_portb_w)
{
// logerror("mcu_portb_w %02x\n", data);
if ((mem_mask & 0x02) && (~data & 0x02) && (m_old_portB & 0x02))
{
if (m_main_sent)
m_mcu->set_input_line(0, CLEAR_LINE);
m_to_mcu_latch = m_from_main;
m_main_sent = false;
}
if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04))
{
m_from_mcu = m_from_mcu_latch;
m_mcu_sent = true;
// logerror("sent %02x\n", m_from_mcu);
}
m_old_portB = data;
}
/* Status readbacks for MAIN cpu - these hook up in various ways depending on the host (provide 2 lines instead?) */
READ8_MEMBER( taito68705_mcu_device::mcu_status_r )
{
int res = 0;
/* bit 0 = when 1, mcu is ready to receive data from main cpu */
/* bit 1 = when 1, mcu has sent data to the main cpu */
//logerror("%s: mcu_status_r\n",machine().describe_context());
if (!m_main_sent)
res |= 0x01;
if (m_mcu_sent)
res |= 0x02;
return res;
}
CUSTOM_INPUT_MEMBER(taito68705_mcu_device::mcu_sent_r)
{
if (!m_mcu_sent) return 0;
else return 1;
}
CUSTOM_INPUT_MEMBER(taito68705_mcu_device::main_sent_r)
{
if (!m_main_sent) return 0;
else return 1;
}
/* The Slap Fight interface has some extensions, handle them here */
taito68705_mcu_slap_device::taito68705_mcu_slap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: taito68705_mcu_device(mconfig, TAITO68705_MCU_SLAP, "Taito M68705 MCU Interface (Slap Fight)", tag, owner, clock, "taito68705slap", __FILE__),
m_extension_cb_w(*this)
{
}
WRITE8_MEMBER(taito68705_mcu_slap_device::mcu_portb_w)
{
if ((mem_mask & 0x08) && (~data & 0x08) && (m_old_portB & 0x08))
{
m_extension_cb_w(0,m_from_mcu_latch, 0xff); // m_scrollx_lo
}
if ((mem_mask & 0x10) && (~data & 0x10) && (m_old_portB & 0x10))
{
m_extension_cb_w(1,m_from_mcu_latch, 0xff); // m_scrollx_hi
}
taito68705_mcu_device::mcu_portb_w(space,offset,data);
}
void taito68705_mcu_slap_device::device_start()
{
taito68705_mcu_device::device_start();
m_extension_cb_w.resolve_safe();
}
/* The Tiger Heli interface has some extensions, handle them here */
taito68705_mcu_tiger_device::taito68705_mcu_tiger_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: taito68705_mcu_device(mconfig, TAITO68705_MCU_TIGER, "Taito M68705 MCU Interface (Tiger Heli)", tag, owner, clock, "taito68705tiger", __FILE__)
{
}
READ8_MEMBER(taito68705_mcu_tiger_device::mcu_portc_r)
{
uint8_t ret = taito68705_mcu_device::mcu_portc_r(space,offset);
// Tiger Heli has these status bits inverted MCU-side
ret ^= 0x3;
return ret;
}
/* Big Event Golf has some things switched around, handle them here */
taito68705_mcu_beg_device::taito68705_mcu_beg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: taito68705_mcu_device(mconfig, TAITO68705_MCU_BEG, "Taito M68705 MCU Interface (Big Event Golf)", tag, owner, clock, "taito68705bigevglf", __FILE__)
{
}
WRITE8_MEMBER(taito68705_mcu_beg_device::mcu_portb_w)
{
// transitions are reversed
if ((mem_mask & 0x02) && (data & 0x02) && (~m_old_portB & 0x02) ) /* positive going transition of the clock */
{
//if (m_main_sent)
m_mcu->set_input_line(0, CLEAR_LINE);
//m_to_mcu_latch = m_from_main; // this is weird, no latching?!
m_main_sent = false;
}
if ((mem_mask & 0x04) && (data & 0x04) && (~m_old_portB & 0x04) ) /* positive going transition of the clock */
{
m_from_mcu = m_from_mcu_latch;
m_mcu_sent = true;
// logerror("sent %02x\n", m_from_mcu);
}
m_old_portB = data;
}
WRITE8_MEMBER(taito68705_mcu_beg_device::mcu_w)
{
// logerror("%s: mcu_w %02x\n", space.machine().describe_context(), data);
m_to_mcu_latch = data; // this is weird, no latching?!
m_main_sent = true;
m_mcu->set_input_line(0, ASSERT_LINE);
}

View File

@ -0,0 +1,86 @@
// license:BSD-3-Clause
// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood
#include "cpu/m6805/m6805.h"
class taito68705_mcu_device : public device_t
{
public:
taito68705_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
taito68705_mcu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, u32 clock, const char *shortname, const char *source);
~taito68705_mcu_device() {}
virtual DECLARE_WRITE8_MEMBER( mcu_w );
DECLARE_READ8_MEMBER( mcu_r );
DECLARE_READ8_MEMBER( mcu_porta_r );
virtual DECLARE_READ8_MEMBER( mcu_portc_r );
DECLARE_WRITE8_MEMBER( mcu_porta_w );
virtual DECLARE_WRITE8_MEMBER( mcu_portb_w );
DECLARE_READ8_MEMBER( mcu_status_r );
DECLARE_CUSTOM_INPUT_MEMBER( mcu_sent_r );
DECLARE_CUSTOM_INPUT_MEMBER( main_sent_r );
bool get_main_sent() { return m_main_sent; };
bool get_mcu_sent() { return m_mcu_sent; };
protected:
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const override;
virtual void device_config_complete() override;
virtual void device_start() override;
virtual void device_reset() override;
// internal state
bool m_mcu_sent;
bool m_main_sent;
uint8_t m_from_main;
uint8_t m_from_mcu;
uint8_t m_from_mcu_latch;
uint8_t m_to_mcu_latch;
uint8_t m_old_portB;
required_device<cpu_device> m_mcu;
};
extern const device_type TAITO68705_MCU;
#define MCFG_TAITO_M68705_EXTENSION_CB(_devcb) \
taito68705_mcu_slap_device::set_extension_cb(*device, DEVCB_##_devcb);
class taito68705_mcu_slap_device : public taito68705_mcu_device
{
public:
taito68705_mcu_slap_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual DECLARE_WRITE8_MEMBER( mcu_portb_w ) override;
template<class _Object> static devcb_base &set_extension_cb(device_t &device, _Object object) { return downcast<taito68705_mcu_slap_device &>(device).m_extension_cb_w.set_callback(object); }
devcb_write8 m_extension_cb_w;
protected:
virtual void device_start() override;
};
extern const device_type TAITO68705_MCU_SLAP;
class taito68705_mcu_tiger_device : public taito68705_mcu_device
{
public:
taito68705_mcu_tiger_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual DECLARE_READ8_MEMBER( mcu_portc_r ) override;
};
extern const device_type TAITO68705_MCU_TIGER;
class taito68705_mcu_beg_device : public taito68705_mcu_device
{
public:
taito68705_mcu_beg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual DECLARE_WRITE8_MEMBER(mcu_w) override;
virtual DECLARE_WRITE8_MEMBER(mcu_portb_w) override;
};
extern const device_type TAITO68705_MCU_BEG;