diff options
Diffstat (limited to 'src/mame/drivers/dec0.cpp')
-rw-r--r-- | src/mame/drivers/dec0.cpp | 224 |
1 files changed, 6 insertions, 218 deletions
diff --git a/src/mame/drivers/dec0.cpp b/src/mame/drivers/dec0.cpp index 105f03a1b83..f06acb827e0 100644 --- a/src/mame/drivers/dec0.cpp +++ b/src/mame/drivers/dec0.cpp @@ -26,16 +26,11 @@ * Midnight Resistance (USA set) * Midnight Resistance (Japanese set) * Boulderdash (World set) - * Bandit (USA set) Heavy Barrel, Bad Dudes, Robocop, Birdie Try & Hippodrome use the 'MEC-M1' motherboard and varying game boards. Sly Spy, Midnight Resistance and Boulderdash use the same graphics chips but are different pcbs. - Bandit (USA) is almost certainly a field test prototype, the software runs - on a Heavy Barrel board including the original Heavy Barrel MCU (which is effectively - not used). There is also Japanese version known to run on a DE-0321-1 top board. - There are Secret Agent (bootleg) and Robocop (bootleg) sets to add. Thanks to Gouky & Richard Bush for information along the way, especially @@ -340,7 +335,6 @@ Notes: #include "cpu/m6502/m6502.h" #include "cpu/z80/z80.h" #include "cpu/m6805/m68705.h" -#include "machine/upd4701.h" #include "sound/2203intf.h" #include "sound/3812intf.h" #include "sound/okim6295.h" @@ -392,6 +386,7 @@ WRITE16_MEMBER(dec0_state::dec0_control_w) } } + WRITE16_MEMBER(dec0_automat_state::automat_control_w) { switch (offset << 1) @@ -460,23 +455,8 @@ void dec0_state::dec0_map(address_map &map) map(0x30c018, 0x30c019).nopr(); // clr.w for irq ack map(0x310000, 0x3107ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x314000, 0x3147ff).ram().w(m_palette, FUNC(palette_device::write16_ext)).share("palette_ext"); - - map(0x318000, 0x31bfff).ram().share("ram"); // Bandit uses 318000/31c000 which are mirrors but exact mirror patten is unclear - map(0x31c000, 0x31c7ff).ram().share("spriteram"); - map(0xff8000, 0xffbfff).ram().share("ram"); /* Main ram */ - map(0xffc000, 0xffc7ff).ram().share("spriteram"); -} - -void dec0_state::dec0_tb_map(address_map &map) -{ - dec0_map(map); - map(0x300010, 0x300017).r("tb0", FUNC(upd4701_device::read_xy)).umask16(0x00ff); - map(0x300018, 0x30001f).r("tb1", FUNC(upd4701_device::read_xy)).umask16(0x00ff); - map(0x300001, 0x300001).w("tb0", FUNC(upd4701_device::reset_x_w)); - map(0x300009, 0x300009).w("tb0", FUNC(upd4701_device::reset_y_w)); - map(0x300011, 0x300011).w("tb1", FUNC(upd4701_device::reset_x_w)); - map(0x300019, 0x300019).w("tb1", FUNC(upd4701_device::reset_y_w)); + map(0xffc000, 0xffc7ff).ram().share("spriteram"); /* Sprites */ } void dec0_state::robocop_map(address_map &map) @@ -696,9 +676,9 @@ void dec0_state::midresb_map(address_map &map) void dec0_state::dec0_s_map(address_map &map) { - map(0x0000, 0x07ff).ram(); - map(0x0800, 0x0801).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); - map(0x1000, 0x1001).rw("ym2", FUNC(ym3812_device::read), FUNC(ym3812_device::write)); + map(0x0000, 0x05ff).ram(); + map(0x0800, 0x0801).w("ym1", FUNC(ym2203_device::write)); + map(0x1000, 0x1001).w("ym2", FUNC(ym3812_device::write)); map(0x3000, 0x3000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); map(0x3800, 0x3800).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x8000, 0xffff).rom(); @@ -984,20 +964,6 @@ static INPUT_PORTS_START( rotary_ports ) PORT_BIT( 0xffff, 0x0000, IPT_POSITIONAL ) PORT_POSITIONS(12) PORT_WRAPS PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_REMAP_TABLE(rotary_table) PORT_PLAYER(2) PORT_REVERSE PORT_FULL_TURN_COUNT(12) INPUT_PORTS_END -static INPUT_PORTS_START( trackball_ports ) - PORT_START("track_0") - PORT_BIT( 0x0fff, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(24) PORT_RESET PORT_REVERSE PORT_PLAYER(1) - - PORT_START("track_1") - PORT_BIT( 0x0fff, 0, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(24) PORT_RESET PORT_PLAYER(1) - - PORT_START("track_2") - PORT_BIT( 0x0fff, 0, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(24) PORT_RESET PORT_REVERSE PORT_PLAYER(2) - - PORT_START("track_3") - PORT_BIT( 0x0fff, 0, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(24) PORT_RESET PORT_PLAYER(2) -INPUT_PORTS_END - static INPUT_PORTS_START( rotary_null ) PORT_START("AN0") PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1006,7 +972,6 @@ static INPUT_PORTS_START( rotary_null ) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END - static INPUT_PORTS_START( hbarrel ) PORT_INCLUDE( dec0 ) @@ -1064,101 +1029,6 @@ static INPUT_PORTS_START( hbarrel ) PORT_INCLUDE( rotary_ports ) INPUT_PORTS_END -static INPUT_PORTS_START( bandit ) - PORT_INCLUDE( dec0 ) - - PORT_MODIFY("INPUTS") - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Fire") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Bomb") - PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Fire") - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Bomb") - PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED ) - -#if 0 - PORT_DIPNAME( 0x0001, 0x0001, "UNK_0" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0002, 0x0002, "UNK_1" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0004, 0x0004, "UNK_2" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0008, 0x0008, "UNK_3" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0010, 0x0010, "UNK_4" ) // Gun - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0020, 0x0020, "UNK_5" ) // Missile - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0040, 0x0040, "UNK_6" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0080, 0x0080, "UNK_7" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) -#endif - PORT_MODIFY("SYSTEM") - PORT_BIT( 0x0003, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("DSW") - PORT_DIPNAME( 0x0001, 0x0001, "Analog controls?" ) // ? - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0002, 0x0002, "L/R control related (keep off)" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0004, 0x0004, "DSUNK_2" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0008, 0x0000, "Road select (debug)" ) // Debug mode - PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0020, 0x0020, "DSUNK_5" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0040, 0x0040, "DSUNK_6" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0080, 0x0000, "Enable enemies" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - - PORT_DIPNAME( 0x0100, 0x0100, "DSUNK_8" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0200, 0x0200, "DSUNK_9" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0400, 0x0400, "DSUNK_A" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPNAME( 0x0800, 0x0800, "DSUNK_B" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPNAME( 0x1000, 0x1000, "DSUNK_C" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPNAME( 0x2000, 0x2000, "DSUNK_D" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPNAME( 0x4000, 0x4000, "DSUNK_E" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPNAME( 0x8000, 0x8000, "DSUNK_F" ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - - PORT_INCLUDE( rotary_null ) - PORT_INCLUDE( trackball_ports ) -INPUT_PORTS_END - static INPUT_PORTS_START( birdtry ) PORT_INCLUDE( dec0 ) @@ -1222,7 +1092,7 @@ static INPUT_PORTS_START( birdtry ) */ PORT_INCLUDE( rotary_null ) - PORT_INCLUDE( trackball_ports ) +// TODO: trackball inputs INPUT_PORTS_END static INPUT_PORTS_START( baddudes ) @@ -1795,7 +1665,6 @@ void dec0_state::dec0(machine_config &config) ym1.add_route(1, "mono", 0.90); ym1.add_route(2, "mono", 0.90); ym1.add_route(3, "mono", 0.35); - ym1.irq_handler().set_inputline(m_audiocpu, 0); // Schematics show both ym2203 and ym3812 can trigger IRQ, but Bandit is only game to program 2203 to do so ym3812_device &ym2(YM3812(config, "ym2", XTAL(12'000'000) / 4)); ym2.irq_handler().set_inputline(m_audiocpu, 0); @@ -2029,31 +1898,6 @@ void dec0_state::hbarrel(machine_config &config) m_screen->set_screen_update(FUNC(dec0_state::screen_update_hbarrel)); } -void dec0_state::bandit(machine_config &config) -{ - dec0(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_tb_map); - - upd4701_device &tb0(UPD4701A(config, "tb0")); - tb0.set_portx_tag("track_0"); - tb0.set_porty_tag("track_1"); - - upd4701_device &tb1(UPD4701A(config, "tb1")); - tb1.set_portx_tag("track_2"); - tb1.set_porty_tag("track_3"); - - i8751_device &mcu(I8751(config, m_mcu, XTAL(8'000'000))); - mcu.port_in_cb<0>().set(FUNC(dec0_state::dec0_mcu_port0_r)); - mcu.port_out_cb<0>().set(FUNC(dec0_state::dec0_mcu_port0_w)); - mcu.port_out_cb<1>().set(FUNC(dec0_state::dec0_mcu_port1_w)); - mcu.port_out_cb<2>().set(FUNC(dec0_state::dec0_mcu_port2_w)); - mcu.port_out_cb<3>().set(FUNC(dec0_state::dec0_mcu_port3_w)); - - /* video hardware */ - m_screen->set_screen_update(FUNC(dec0_state::screen_update_bandit)); -} - void dec0_state::baddudes(machine_config &config) { dec0(config); @@ -2081,16 +1925,6 @@ void dec0_state::birdtry(machine_config &config) { dec0(config); - m_maincpu->set_addrmap(AS_PROGRAM, &dec0_state::dec0_tb_map); - - upd4701_device &tb0(UPD4701A(config, "tb0")); - tb0.set_portx_tag("track_0"); - tb0.set_porty_tag("track_1"); - - upd4701_device &tb1(UPD4701A(config, "tb1")); - tb1.set_portx_tag("track_2"); - tb1.set_porty_tag("track_3"); - /* video hardware */ m_screen->set_screen_update(FUNC(dec0_state::screen_update_birdtry)); } @@ -3002,51 +2836,6 @@ ROM_START( automat ) ROM_LOAD( "19.bin", 0x70000, 0x08000, CRC(118e7fc7) SHA1(fa6d8eef9da873579e19a9bf982643e061b8ca26) ) ROM_END -ROM_START( bandit ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ - ROM_LOAD16_BYTE( "4.4", 0x00000, 0x10000, CRC(01a29133) SHA1(6a8e9b959828f82333ca17dbc751a9fbafae6935) ) - ROM_LOAD16_BYTE( "1.1", 0x00001, 0x10000, CRC(dc61b11f) SHA1(3178a1247d2ef4d30f9c6c55b53db658214d2861) ) - ROM_LOAD16_BYTE( "5.5", 0x20000, 0x10000, CRC(7dbfa088) SHA1(7046d84f0a00f86cfa0c4d77e43118adda111001) ) - ROM_LOAD16_BYTE( "2.2", 0x20001, 0x10000, CRC(3e81e138) SHA1(b2eb57900fe110d64852a5c4c9d12c060ecb54e5) ) - ROM_LOAD16_BYTE( "6.6", 0x40000, 0x10000, CRC(b12e33cc) SHA1(b551cc09d25bb8ae198415f75ac2a150f2789849) ) - ROM_LOAD16_BYTE( "3.3", 0x40001, 0x10000, CRC(30bf52cf) SHA1(f45d3028d0e4e8c8f2c5968b52399a4e7eb9255f) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 Sound */ - ROM_LOAD( "7.7", 0x8000, 0x8000, CRC(69259ca4) SHA1(ce014836c71e269569279a09abef20cf03d46e31) ) - - ROM_REGION( 0x1000, "mcu", 0 ) /* i8751 microcontroller */ - ROM_LOAD( "hb31.9a", 0x0000, 0x1000, CRC(239d726f) SHA1(969f38ae981ffde6053ece93cc51614d492edbbb) ) - - ROM_REGION( 0x20000, "gfx1", 0 ) /* chars */ - ROM_LOAD( "25.25", 0x00000, 0x10000, CRC(4047ff81) SHA1(56a82c7694e6dbbdb9b42ed134120a76f848f7a5) ) - ROM_LOAD( "26.26", 0x10000, 0x10000, CRC(3a0a2f1e) SHA1(f06b44e4a8c29ee2c0a6e8f786fbee144138ba72) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) /* tiles */ - ROM_LOAD( "18.18", 0x00000, 0x10000, CRC(ac38e585) SHA1(c1a6fb083c096d119351883dea121ee6358d9298) ) - ROM_LOAD( "20.20", 0x20000, 0x10000, CRC(2194f737) SHA1(fbe2f7d0d6b80bf62fb9c38f9f2a001a728f3b7c) ) - ROM_LOAD( "22.22", 0x40000, 0x10000, CRC(fcc6cb4d) SHA1(548bd8688b255cdd1eef82e4fbec3d88e1d0ab53) ) - ROM_LOAD( "24.24", 0x60000, 0x10000, CRC(aa3c33b6) SHA1(f7770daedb5c1d5dd5099f1378c5c292c68a6a12) ) - - ROM_REGION( 0x40000, "gfx3", 0 ) /* tiles */ - ROM_LOAD( "29.29", 0x00000, 0x10000, CRC(32218c8a) SHA1(33e922ffd7000a03a8fa8bbe61483cd8e916ebd6) ) - ROM_LOAD( "30.30", 0x10000, 0x10000, CRC(6a5fe9a9) SHA1(a750373e9fb1a0ad81d63a19bbac7a6079d3372f) ) - ROM_LOAD( "27.27", 0x20000, 0x10000, CRC(62970304) SHA1(57606bedfd83429629593bbea50fb25db1f2d874) ) - ROM_LOAD( "28.28", 0x30000, 0x10000, CRC(e018459f) SHA1(136ce96523988173425fa791742dab62ecaef5c9) ) - - ROM_REGION( 0x80000, "gfx4", 0 ) /* sprites */ - ROM_LOAD( "15.15", 0x00000, 0x10000, CRC(84c03235) SHA1(3b5a8e24dd0aba1d1530d37685aaa46a35b0249a) ) - ROM_LOAD( "16.16", 0x10000, 0x10000, CRC(eaa35477) SHA1(08763d7937a6fa76f6029974d5b909ba05c69d81) ) - ROM_LOAD( "11.11", 0x20000, 0x10000, CRC(c9e6b57f) SHA1(9c12e0e7e25d48c7679ea65c3dfeaca9fdfdcbb3) ) - ROM_LOAD( "12.12", 0x30000, 0x10000, CRC(317f7e4a) SHA1(7d20722e75d69ef4f408e1995a29338c452b63c9) ) - - ROM_LOAD( "13.13", 0x40000, 0x10000, CRC(0c063bec) SHA1(e9808d20dc9e450c6a880ca1d8383246aff1ab36) ) - ROM_LOAD( "14.14", 0x50000, 0x10000, CRC(2ebf06d3) SHA1(6381f978c0e719bf80d2c16a8355a0892473720a) ) - ROM_LOAD( "9.9", 0x60000, 0x10000, CRC(046f9d58) SHA1(a3078c13d27f365f900be3b55d1a917a8cd712f8) ) - ROM_LOAD( "10.10", 0x70000, 0x10000, CRC(3d2d704e) SHA1(3dcf3dd8cc91c5629e014bc6e2ccce234cf549a5) ) - - ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ - ROM_LOAD( "8.8", 0x0000, 0x10000, CRC(b0e79b9f) SHA1(6613c41234b8305d8959d06d6b4e9127bfc5eebe) ) -ROM_END ROM_START( hippodrm ) ROM_REGION( 0x60000, "maincpu", 0 ) /* 4*64k for 68000 code */ @@ -3980,7 +3769,6 @@ GAME( 1988, robocop, 0, robocop, robocop, dec0_state, empty_init GAME( 1988, robocopw, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East Corporation", "Robocop (World revision 3)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, robocopj, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East Corporation", "Robocop (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, robocopu, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East USA", "Robocop (US revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, bandit, 0, bandit, bandit, dec0_state, init_hbarrel, ROT90, "Data East USA", "Bandit (US)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1988, robocopu0, robocop, robocop, robocop, dec0_state, empty_init, ROT0, "Data East USA", "Robocop (US revision 0)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, hippodrm, 0, hippodrm, hippodrm, dec0_state, init_hippodrm, ROT0, "Data East USA", "Hippodrome (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1989, ffantasy, hippodrm, hippodrm, ffantasy, dec0_state, init_hippodrm, ROT0, "Data East Corporation", "Fighting Fantasy (Japan revision 3)", MACHINE_SUPPORTS_SAVE ) |