summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers
diff options
context:
space:
mode:
authorGravatarGravatar David Haywood <mamehaze@users.noreply.github.com>2016-03-03 18:38:56 +0000
committerGravatarGravatar David Haywood <mamehaze@users.noreply.github.com>2016-03-03 18:38:56 +0000
commit4fbd1d7babedb9423cd2462548fc8935aee5aaf7 (patch)
tree5b5cb9fe417a03e33155d4b2fd72844775089366 /src/mame/drivers
parentccc12869fdf38e2373d2b34c0adb4359dcc3bb89 (diff)
remove all drivers by 'insideoutboy' due to unresolved licensing, replaced with skeleton drivers (rom loading only)
Diffstat (limited to 'src/mame/drivers')
-rw-r--r--src/mame/drivers/carjmbre.cpp218
-rw-r--r--src/mame/drivers/flower.cpp218
-rw-r--r--src/mame/drivers/marinedt.cpp668
-rw-r--r--src/mame/drivers/popper.cpp360
-rw-r--r--src/mame/drivers/sprcros2.cpp301
5 files changed, 78 insertions, 1687 deletions
diff --git a/src/mame/drivers/carjmbre.cpp b/src/mame/drivers/carjmbre.cpp
index 3c387d19531..e32fc2b77de 100644
--- a/src/mame/drivers/carjmbre.cpp
+++ b/src/mame/drivers/carjmbre.cpp
@@ -1,5 +1,8 @@
-// license:???
-// copyright-holders:insideoutboy, Nicola Salmoria
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
/***************************************************************************
Car Jamboree
@@ -28,216 +31,25 @@
8910 SW
8910
-Notes:
-
-- some sprite glitches from sprite number/colour changes happening on
- different frames, possibly original behaviour. eg cars changing colour
- just before exploding, animals displaying as the wrong sprite for one
- frame when entering the arena
-
-- colours look wrong, maybe address bitswap?
-
-- background colour calculation is a guess
-
***************************************************************************/
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/ay8910.h"
-#include "includes/carjmbre.h"
-
-/*************************************
- *
- * Memory maps
- *
- *************************************/
-WRITE8_MEMBER(carjmbre_state::nmi_mask_w)
+class carjmbre_state : public driver_device
{
- m_nmi_mask = data & 1;
-}
-
-
-static ADDRESS_MAP_START( carjmbre_map, AS_PROGRAM, 8, carjmbre_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0x87ff) AM_RAM
-// AM_RANGE(0x8800, 0x8800) AM_READNOP // watchdog?
- AM_RANGE(0x8803, 0x8803) AM_WRITE(nmi_mask_w)
- AM_RANGE(0x8805, 0x8805) AM_WRITE(carjmbre_bgcolor_w) // guessed
- AM_RANGE(0x8806, 0x8806) AM_WRITE(carjmbre_8806_w) // video related?
- AM_RANGE(0x8807, 0x8807) AM_WRITE(carjmbre_flipscreen_w)
-// AM_RANGE(0x8fc1, 0x8fc1) AM_WRITENOP // overrun during initial screen clear
-// AM_RANGE(0x8fe1, 0x8fe1) AM_WRITENOP // overrun during initial screen clear
- AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(carjmbre_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x9800, 0x985f) AM_MIRROR(0x80) AM_WRITEONLY AM_SHARE("spriteram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
- AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2")
- AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_WRITE(soundlatch_byte_w)
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( carjmbre_sound_map, AS_PROGRAM, 8, carjmbre_state )
- AM_RANGE(0x0000, 0x0fff) AM_MIRROR(0x1000) AM_ROM
- AM_RANGE(0x2000, 0x27ff) AM_RAM
-ADDRESS_MAP_END
-
-
-static ADDRESS_MAP_START( carjmbre_sound_io_map, AS_IO, 8, carjmbre_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r)
- AM_RANGE(0x10, 0x10) AM_WRITENOP //?? written on init/0xff sound command reset
- AM_RANGE(0x20, 0x21) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
- AM_RANGE(0x22, 0x22) AM_WRITENOP //?? written before and after 0x21 with same value
- AM_RANGE(0x24, 0x24) AM_READNOP //??
- AM_RANGE(0x30, 0x31) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
- AM_RANGE(0x32, 0x32) AM_WRITENOP //?? written before and after 0x31 with same value
-ADDRESS_MAP_END
+public:
+ carjmbre_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ {}
+};
-/*************************************
- *
- * Input ports
- *
- *************************************/
static INPUT_PORTS_START( carjmbre )
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) //coin error if held high for 1s
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) //or if many coins inserted quickly
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY
-
- PORT_START("P2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
-
- PORT_START("DSW")
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2")
- PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:3")
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x18, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4,5")
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x08, "4" )
- PORT_DIPSETTING( 0x10, "5" )
- PORT_DIPSETTING( 0x18, "Free") // 250 (cheat)
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:6")
- PORT_DIPSETTING( 0x00, "10k, then every 100k" )
- PORT_DIPSETTING( 0x20, "20k, then every 100k" )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:7")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:8")
- PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
INPUT_PORTS_END
-/*************************************
- *
- * Graphics definitions
- *
- *************************************/
-
-static const gfx_layout carjmbre_charlayout =
-{
- 8,8,
- RGN_FRAC(2,4),
- 2,
- { RGN_FRAC(0,4), RGN_FRAC(2,4) },
- { STEP8(0,1) },
- { STEP8(0,8) },
- 8*8
-};
-
-static const gfx_layout carjmbre_spritelayout =
-{
- 16,16,
- RGN_FRAC(1,4),
- 2,
- { RGN_FRAC(2,4), RGN_FRAC(0,4) },
- { STEP8(0,1), STEP8(256*16*8,1) },
- { STEP16(0,8) },
- 16*8
-};
-
-static GFXDECODE_START( carjmbre )
- GFXDECODE_ENTRY( "gfx1", 0, carjmbre_charlayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, carjmbre_spritelayout, 0, 16 )
-GFXDECODE_END
-
-
-/*************************************
- *
- * Machine driver
- *
- *************************************/
-
-void carjmbre_state::machine_reset()
-{
- m_flipscreen = 0;
- m_bgcolor = 0;
-}
-
-INTERRUPT_GEN_MEMBER(carjmbre_state::vblank_irq)
-{
- if(m_nmi_mask)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
static MACHINE_CONFIG_START( carjmbre, carjmbre_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6)
- MCFG_CPU_PROGRAM_MAP(carjmbre_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", carjmbre_state, vblank_irq)
-
-
- MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6/2)
- MCFG_CPU_PROGRAM_MAP(carjmbre_sound_map)
- MCFG_CPU_IO_MAP(carjmbre_sound_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", carjmbre_state, irq0_line_hold)
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(carjmbre_state, screen_update_carjmbre)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", carjmbre)
- MCFG_PALETTE_ADD("palette", 64)
- MCFG_PALETTE_INIT_OWNER(carjmbre_state, carjmbre)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("ay1", AY8910, XTAL_18_432MHz/6/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12)
-
- MCFG_SOUND_ADD("ay2", AY8910, XTAL_18_432MHz/6/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.12)
MACHINE_CONFIG_END
-/*************************************
- *
- * ROM definition
- *
- *************************************/
-
ROM_START( carjmbre )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "c1", 0x0000, 0x1000, CRC(62b21739) SHA1(710e5c52f27603aa8f864f6f28d7272f21271d60) )
@@ -267,10 +79,4 @@ ROM_START( carjmbre )
ROM_LOAD( "c.d18", 0x0020, 0x0020, CRC(7b9ed1b0) SHA1(ec5e1f56e5a2fc726083866c08ac0e1de0ed6ace) )
ROM_END
-/*************************************
- *
- * Game driver
- *
- *************************************/
-
-GAME( 1983, carjmbre, 0, carjmbre, carjmbre, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Car Jamboree", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, carjmbre, 0, carjmbre, carjmbre, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Car Jamboree", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/flower.cpp b/src/mame/drivers/flower.cpp
index 06891e9c4a2..26197104508 100644
--- a/src/mame/drivers/flower.cpp
+++ b/src/mame/drivers/flower.cpp
@@ -1,12 +1,13 @@
-// license:???
-// copyright-holders:insideoutboy, David Haywood, Stephh
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
/*
Flower (c)1986 Komax (USA license)
(c)1986 Sega/Alpha (Sega game number 834-5998)
- - Driver by InsideOutBoy, further improvements by MAME team
-
There is a PCB picture that shows two stickers, the first says
"Flower (c) 1986 Clarue" while the second one is an original
serial number tag also showing "Clarue". GFX ROM contents also
@@ -74,215 +75,22 @@ CHIP # POSITION TYPE
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "includes/flower.h"
-
-
-WRITE8_MEMBER(flower_state::flower_maincpu_irq_ack)
-{
- m_maincpu->set_input_line(0, CLEAR_LINE);
-}
-WRITE8_MEMBER(flower_state::flower_subcpu_irq_ack)
+class flower_state : public driver_device
{
- m_subcpu->set_input_line(0, CLEAR_LINE);
-}
+public:
+ flower_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ { }
+};
-WRITE8_MEMBER(flower_state::flower_soundcpu_irq_ack)
-{
- m_audiocpu->set_input_line(0, CLEAR_LINE);
-}
-WRITE8_MEMBER(flower_state::flower_coin_counter_w)
-{
- machine().bookkeeping().coin_counter_w(0, data & 1);
-}
-
-WRITE8_MEMBER(flower_state::flower_coin_lockout_w)
-{
- machine().bookkeeping().coin_lockout_global_w(~data & 1);
-}
-WRITE8_MEMBER(flower_state::sound_command_w)
-{
- soundlatch_byte_w(space, 0, data);
-
- if (*m_sn_nmi_enable & 1)
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
-static ADDRESS_MAP_START( flower_cpu1_2, AS_PROGRAM, 8, flower_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0xa000, 0xa000) AM_WRITE(flower_coin_lockout_w)
- AM_RANGE(0xa001, 0xa001) AM_WRITE(flower_flipscreen_w)
- AM_RANGE(0xa002, 0xa002) AM_WRITE(flower_maincpu_irq_ack)
- AM_RANGE(0xa003, 0xa003) AM_WRITE(flower_subcpu_irq_ack)
- AM_RANGE(0xa004, 0xa004) AM_WRITE(flower_coin_counter_w)
- AM_RANGE(0xa005, 0xa005) AM_WRITENOP // subcpu nmi (unused)
- AM_RANGE(0xa100, 0xa100) AM_READ_PORT("IN0CPU1")
- AM_RANGE(0xa101, 0xa101) AM_READ_PORT("IN1CPU1")
- AM_RANGE(0xa102, 0xa102) AM_READ_PORT("IN0CPU0")
- AM_RANGE(0xa103, 0xa103) AM_READ_PORT("IN1CPU0")
- AM_RANGE(0xa400, 0xa400) AM_WRITE(sound_command_w)
- AM_RANGE(0xc000, 0xddff) AM_RAM AM_SHARE("mainram1")
- AM_RANGE(0xde00, 0xdfff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(flower_textram_w) AM_SHARE("textram")
- AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE("mainram2") // only cleared?
- AM_RANGE(0xf000, 0xf1ff) AM_RAM_WRITE(flower_bg0ram_w) AM_SHARE("bg0ram")
- AM_RANGE(0xf200, 0xf200) AM_RAM AM_SHARE("bg0_scroll")
- AM_RANGE(0xf800, 0xf9ff) AM_RAM_WRITE(flower_bg1ram_w) AM_SHARE("bg1ram")
- AM_RANGE(0xfa00, 0xfa00) AM_RAM AM_SHARE("bg1_scroll")
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( flower_sound_cpu, AS_PROGRAM, 8, flower_state )
- AM_RANGE(0x0000, 0x3fff) AM_ROM
- AM_RANGE(0x4000, 0x4000) AM_WRITE(flower_soundcpu_irq_ack)
- AM_RANGE(0x4001, 0x4001) AM_WRITEONLY AM_SHARE("sn_nmi_enable")
- AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_byte_r)
- AM_RANGE(0x8000, 0x803f) AM_DEVWRITE("flower", flower_sound_device, sound1_w)
- AM_RANGE(0xa000, 0xa03f) AM_DEVWRITE("flower", flower_sound_device, sound2_w)
- AM_RANGE(0xc000, 0xc7ff) AM_RAM
-ADDRESS_MAP_END
-
-
-INPUT_CHANGED_MEMBER(flower_state::coin_inserted)
-{
- m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE);
-}
static INPUT_PORTS_START( flower )
- PORT_START("IN0CPU0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, flower_state,coin_inserted, 0)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
- PORT_DIPNAME( 0x08, 0x08, "Energy Decrease" ) PORT_DIPLOCATION("SW2:4")
- PORT_DIPSETTING( 0x08, "Slow" )
- PORT_DIPSETTING( 0x00, "Fast" )
- PORT_DIPNAME( 0x10, 0x10, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "Keep Weapons When Destroyed" ) PORT_DIPLOCATION("SW2:6") // check code at 0x74a2
- PORT_DIPSETTING( 0x20, DEF_STR( No ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7") // "Enemy Bullets"
- PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
- PORT_DIPNAME( 0x80, 0x80, "Shot Range" ) PORT_DIPLOCATION("SW2:8") // check code at 0x75f9
- PORT_DIPSETTING( 0x80, "Short" )
- PORT_DIPSETTING( 0x00, "Long" )
-
- PORT_START("IN1CPU0")
- PORT_DIPNAME( 0x07, 0x05, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2,3")
- PORT_DIPSETTING( 0x07, "1" )
- PORT_DIPSETTING( 0x06, "2" )
- PORT_DIPSETTING( 0x05, "3" )
- PORT_DIPSETTING( 0x04, "4" )
- PORT_DIPSETTING( 0x03, "5" )
- PORT_DIPSETTING( 0x02, "6" )
- PORT_DIPSETTING( 0x01, "7" )
- PORT_DIPSETTING( 0x00, "Infinite (Cheat)")
- PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,5")
- PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:6") // check code at 0x759f
- PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:7")
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:8")
- PORT_DIPSETTING( 0x80, "30k, then every 50k" )
- PORT_DIPSETTING( 0x00, "50k, then every 80k" )
-
- PORT_START("IN0CPU1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Laser")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Missile")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Cutter")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN1CPU1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Laser")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Missile")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Cutter")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
-static const gfx_layout flower_charlayout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 2,
- { 0, 4 },
- { STEP4(0,1), STEP4(8,1) },
- { STEP8(0,16) },
- 8*8*2
-};
-
-static const gfx_layout flower_tilelayout =
-{
- 16,16,
- RGN_FRAC(1,2),
- 4,
- { 0, 4, RGN_FRAC(1,2), RGN_FRAC(1,2)+4 },
- { STEP4(0,1), STEP4(8,1), STEP4(8*8*2,1), STEP4(8*8*2+8,1) },
- { STEP8(0,16), STEP8(8*8*4,16) },
- 16*16*2
-};
-
-static GFXDECODE_START( flower )
- GFXDECODE_ENTRY( "gfx1", 0, flower_charlayout, 0, 64 )
- GFXDECODE_ENTRY( "gfx2", 0, flower_tilelayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx3", 0, flower_tilelayout, 0, 16 )
-GFXDECODE_END
-
-
static MACHINE_CONFIG_START( flower, flower_state )
-
- /* basic machine hardware */
- // clock divider (of all cpus) is unknown. /6 (3.072 MHz) is too slow
- // cpus are Z80 "A" type, official maximum speed of 4 MHz, but 4.6 MHz has been proven to work in practice
- MCFG_CPU_ADD("maincpu", Z80,XTAL_18_432MHz/4)
- MCFG_CPU_PROGRAM_MAP(flower_cpu1_2)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", flower_state, irq0_line_hold)
-
- MCFG_CPU_ADD("subcpu", Z80,XTAL_18_432MHz/4)
- MCFG_CPU_PROGRAM_MAP(flower_cpu1_2)
- MCFG_CPU_PERIODIC_INT_DRIVER(flower_state, irq0_line_hold, 120) // controls game speed? irqsource and frequency unknown
-
- MCFG_CPU_ADD("audiocpu", Z80,XTAL_18_432MHz/4)
- MCFG_CPU_PROGRAM_MAP(flower_sound_cpu)
- MCFG_CPU_PERIODIC_INT_DRIVER(flower_state, irq0_line_hold, 90) // controls music speed. irqsource and frequency unknown, same as subcpu perhaps?
-
- // tight sync, slowdowns otherwise
-// MCFG_QUANTUM_PERFECT_CPU("maincpu")
- MCFG_QUANTUM_TIME(attotime::from_hz(6000))
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60) // ?
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(34*8, 33*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(flower_state, screen_update_flower)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", flower)
- MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", 256)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("flower", FLOWER, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -373,5 +181,5 @@ ROM_START( flowerj ) /* Sega/Alpha version. Sega game number 834-5998 */
ROM_END
-GAME( 1986, flower, 0, flower, flower, driver_device, 0, ROT0, "Clarue (Komax license)", "Flower (US)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1986, flowerj, flower, flower, flower, driver_device, 0, ROT0, "Clarue (Sega / Alpha Denshi Co. license)", "Flower (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
+GAME( 1986, flower, 0, flower, flower, driver_device, 0, ROT0, "Clarue (Komax license)", "Flower (US)", MACHINE_IS_SKELETON )
+GAME( 1986, flowerj, flower, flower, flower, driver_device, 0, ROT0, "Clarue (Sega / Alpha Denshi Co. license)", "Flower (Japan)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/marinedt.cpp b/src/mame/drivers/marinedt.cpp
index 0f8e24b6199..73139b4b655 100644
--- a/src/mame/drivers/marinedt.cpp
+++ b/src/mame/drivers/marinedt.cpp
@@ -1,22 +1,9 @@
-// license:???
-// copyright-holders:insideoutboy
-/*
----------------------------
-Marine Date by TAITO (1981)
-MAME driver by insideoutboy
----------------------------
-a static underwater scene with obstacles in it, like seaweed,
-crabs and other stuff. You have a limited number of "strokes"
-per screen as well as a timer to work against. Your goal is
-to *bounce* yourself around the screen using *Strokes* on the
-trackball to try to reach a *female* octopus before you run out
-of strokes or time. You sort of bounce yourself around the screen
-like a billiard ball would bounce, but once in a while bubbles
-and other stuff will come up from underneath you and carry you
-away from where you are trying to get. When you reach your goal
-you get another more difficult screen, etc.
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
--------------------------------------------------------------------------
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
+/*
Marine Date
Taito 1981
@@ -108,657 +95,26 @@ Notes:
Top and Middle PCBs are plugged in with the solder-sides together.
Lower PCB is plugged in with components facing up.
-------------------------------------------------------------------------
-
-todo:
-in cocktail mopde p1 is flipped
-after inking the shark on the far right octi was moved to goal?
-for the colours, goal has to be black otherwise it would register
- as a hit, is goal pen 0 or 6?
-rom writes when finishing a game
- worth looking at before the collision is correct?
-playing dot hit when eaten by a shark?
-dont use any ints, s/b UINT8?
-enemy sprite not disabled at end of game
-tilemap
-palette may only be around 4 colours
- is 14 the palette?
-how do you know if you've got any ink left?
-prom 14 is the top bits? 4 bpp? or so?
-why is level 37 chosen?
-should it be 30fps?
- check other taito games of the time
-look at other taito 1981 games for ideas on the ports
- bking
- jhunt?
-"Marine Deto" or "Marine Date"
- look in the roms for all the text
-simplify gfx decode
-why does the player sprite need 4 colours?
- check if more than 1 are used
-check service test ram wipes for confirmation of ram spots
- anything after trackball test?
-obj1 to obj2 draw order
-2nd trackball
-flip/cocktail issues
-
-done:
-timer?
- you get 200 for each shot, don't think it's actually a timer
-have I been using x/y consistently, i.e. non rotated or rotated origin?
- yes, seems to be best using xy raw (i.e. non-rotated)
-p2 ink doesn't always light up in test mode
- after p1 ink pressed, p2 ink doesn't light up
- this is correct behavior if DSW set as Upright mode
*/
#include "emu.h"
-#include "cpu/z80/z80.h"
class marinedt_state : public driver_device
{
public:
marinedt_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_tx_tileram(*this, "tx_tileram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- /* memory pointers */
- required_shared_ptr<UINT8> m_tx_tileram;
-
- /* video-related */
- std::unique_ptr<bitmap_ind16> m_tile;
- std::unique_ptr<bitmap_ind16> m_obj1;
- std::unique_ptr<bitmap_ind16> m_obj2;
- tilemap_t *m_tx_tilemap;
-
- UINT8 m_obj1_a;
- UINT8 m_obj1_x;
- UINT8 m_obj1_y;
- UINT8 m_obj2_a;
- UINT8 m_obj2_x;
- UINT8 m_obj2_y;
- UINT8 m_pd;
- UINT8 m_pf;
- UINT8 m_music;
- UINT8 m_sound;
- UINT8 m_coll;
- UINT8 m_cx;
- UINT8 m_cyr;
- UINT8 m_cyq;
- UINT8 m_collh;
- UINT8 m_cxh;
- UINT8 m_cyrh;
- UINT8 m_cyqh;
- DECLARE_WRITE8_MEMBER(tx_tileram_w);
- DECLARE_READ8_MEMBER(marinedt_port1_r);
- DECLARE_READ8_MEMBER(marinedt_coll_r);
- DECLARE_READ8_MEMBER(marinedt_obj1_x_r);
- DECLARE_READ8_MEMBER(marinedt_obj1_yr_r);
- DECLARE_READ8_MEMBER(marinedt_obj1_yq_r);
- DECLARE_WRITE8_MEMBER(marinedt_obj1_a_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj1_x_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj1_y_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj2_a_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj2_x_w);
- DECLARE_WRITE8_MEMBER(marinedt_obj2_y_w);
- DECLARE_WRITE8_MEMBER(marinedt_music_w);
- DECLARE_WRITE8_MEMBER(marinedt_sound_w);
- DECLARE_WRITE8_MEMBER(marinedt_pd_w);
- DECLARE_WRITE8_MEMBER(marinedt_pf_w);
- TILE_GET_INFO_MEMBER(get_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- DECLARE_PALETTE_INIT(marinedt);
- UINT32 screen_update_marinedt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
+ : driver_device(mconfig, type, tag)
+ { }
};
-WRITE8_MEMBER(marinedt_state::tx_tileram_w)
-{
- m_tx_tileram[offset] = data;
- m_tx_tilemap->mark_tile_dirty(offset);
-}
-
-READ8_MEMBER(marinedt_state::marinedt_port1_r)
-{
- //might need to be reversed for cocktail stuff
-
- /* x/y multiplexed */
- return ioport(((m_pf & 0x08) >> 3) ? "TRACKY" : "TRACKX")->read();
-}
-
-READ8_MEMBER(marinedt_state::marinedt_coll_r)
-{
- //76543210
- //x------- obj1 to obj2 collision
- //-xxx---- unused
- //----x--- obj1 to playfield collision
- //-----xxx unused
-
- return m_coll | m_collh;
-}
-
-//are these returning only during a collision?
-//I'd imagine they are returning the pf char where the collision took place?
-//what about where there is lots of collisions?
-//maybe the first on a scanline basis
-READ8_MEMBER(marinedt_state::marinedt_obj1_x_r)
-{
- //76543210
- //xxxx---- unknown
- //----xxxx x pos in tile ram
-
- UINT8 *RAM = memregion("maincpu")->base();
-
- if (RAM[0x430e])
- --m_cx;
- else
- ++m_cx;
-
- //figure out why inc/dec based on 430e?
- return m_cx | (m_cxh << 4);
-}
-
-READ8_MEMBER(marinedt_state::marinedt_obj1_yr_r)
-{
- //76543210
- //xxxx---- unknown
- //----xxxx row in current screen quarter
-
-
- //has to be +1 if cx went over?
- if (m_cx == 0x10)
- m_cyr++;
-
- return m_cyr | (m_cyrh << 4);
-}
-
-READ8_MEMBER(marinedt_state::marinedt_obj1_yq_r)
-{
- //76543210
- //xx------ unknown
- //--xx---- screen quarter when flipped?
- //----xx-- unknown
- //------xx screen quarter
-
- return m_cyq | (m_cyqh << 4);
-}
-
-WRITE8_MEMBER(marinedt_state::marinedt_obj1_a_w){ m_obj1_a = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj1_x_w){ m_obj1_x = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj1_y_w){ m_obj1_y = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj2_a_w){ m_obj2_a = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj2_x_w){ m_obj2_x = data; }
-WRITE8_MEMBER(marinedt_state::marinedt_obj2_y_w){ m_obj2_y = data; }
-
-WRITE8_MEMBER(marinedt_state::marinedt_music_w){ m_music = data; }
-
-WRITE8_MEMBER(marinedt_state::marinedt_sound_w)
-{
- //76543210
- //xx------ ??
- //--x----- jet sound
- //---x---- foam
- //----x--- ink
- //-----x-- collision
- //------x- dots hit
- //-------x ??
-
- m_sound = data;
-}
-
-WRITE8_MEMBER(marinedt_state::marinedt_pd_w)
-{
- //76543210
- //xxx----- ?? unused
- //---x---- ?? the rest should be used based on the table
- //----x--- ??
- //-----x-- ??
- //------x- obj2 enable
- //-------x obj1 enable
-
- m_pd = data;
-}
-
-/*
-upright
-marinedt_pf_w: 00 // upright
-marinedt_pf_w: 01 // ??
-
-cocktail
-marinedt_pf_w: 02 // cocktail
-marinedt_pf_w: 03 // ??
-
-marinedt_pf_w: 01 // upright
-marinedt_pf_w: 05 // flip sprite?
-
-marinedt_pf_w: 07 // cocktail
-marinedt_pf_w: 03 // non-flip sprite?
-*/
-WRITE8_MEMBER(marinedt_state::marinedt_pf_w)
-{
- //76543210
- //xxxx---- ?? unused (will need to understand table of written values)
- //----x--- xy trackball select
- //-----x-- ?? flip screen/controls
- //------x- ?? upright/cocktail
- //-------x ?? service mode (coin lockout??)
-
-
- //if ((m_pf & 0x07) != (data & 0x07))
- // osd_printf_debug("marinedt_pf_w: %02x\n", data & 0x07);
-
- if ((m_pf & 0x02) != (data & 0x02))
- {
- if (data & 0x02)
- osd_printf_debug("tile flip\n");
- else
- osd_printf_debug("tile non-flip\n");
-
- if (data & 0x02)
- m_tx_tilemap->set_flip(TILEMAP_FLIPX | TILEMAP_FLIPY);
- else
- m_tx_tilemap->set_flip(0);
- }
-
- m_pf = data;
-
- //if (data & 0xf0)
- // logerror("pf:%02x %d\n", m_pf);
- //logerror("pd:%02x %d\n", m_pd, m_screen->frame_number());
-
-}
-
-static ADDRESS_MAP_START( marinedt_map, AS_PROGRAM, 8, marinedt_state )
- AM_RANGE(0x0000, 0x37ff) AM_ROM
- AM_RANGE(0x4000, 0x43ff) AM_RAM
- AM_RANGE(0x4400, 0x47ff) AM_RAM //unused, vram mirror?
- AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(tx_tileram_w) AM_SHARE("tx_tileram")
- AM_RANGE(0x4c00, 0x4c00) AM_WRITENOP //?? maybe off by one error
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( marinedt_io_map, AS_IO, 8, marinedt_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW0") //dips coinage
- AM_RANGE(0x01, 0x01) AM_READ(marinedt_port1_r) //trackball xy muxed
- AM_RANGE(0x02, 0x02) AM_READWRITE(marinedt_obj1_x_r, marinedt_obj1_a_w)
- AM_RANGE(0x03, 0x03) AM_READ_PORT("IN0") AM_WRITE(marinedt_obj1_x_w)
- AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1") AM_WRITE(marinedt_obj1_y_w)
- AM_RANGE(0x05, 0x05) AM_WRITE(marinedt_music_w)
- AM_RANGE(0x06, 0x06) AM_READWRITE(marinedt_obj1_yr_r, marinedt_sound_w)
- AM_RANGE(0x08, 0x08) AM_WRITE(marinedt_obj2_a_w)
- AM_RANGE(0x09, 0x09) AM_WRITE(marinedt_obj2_x_w)
- AM_RANGE(0x0a, 0x0a) AM_READWRITE(marinedt_obj1_yq_r, marinedt_obj2_y_w)
- AM_RANGE(0x0d, 0x0d) AM_WRITE(marinedt_pd_w)
- AM_RANGE(0x0e, 0x0e) AM_READWRITE(marinedt_coll_r, watchdog_reset_w)
- AM_RANGE(0x0f, 0x0f) AM_WRITE(marinedt_pf_w)
-ADDRESS_MAP_END
-
-
static INPUT_PORTS_START( marinedt )
- PORT_START("DSW0")
- PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x0f, DEF_STR( 9C_1C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 8C_1C ) )
- PORT_DIPSETTING( 0x0d, DEF_STR( 7C_1C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0x0b, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x09, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 1C_8C ) )
- PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Coin_B ) )
- PORT_DIPSETTING( 0xf0, DEF_STR( 9C_1C ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( 8C_1C ) )
- PORT_DIPSETTING( 0xd0, DEF_STR( 7C_1C ) )
- PORT_DIPSETTING( 0xc0, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0xb0, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0xa0, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x90, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x30, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x50, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x60, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x70, DEF_STR( 1C_8C ) )
-
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 )
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Bonus_Life ) )
- PORT_DIPSETTING( 0x01, "5000" )
- PORT_DIPSETTING( 0x00, "10000" )
-//cheat?
- PORT_DIPNAME( 0x02, 0x00, "ignore internal bounce?" ) //maybe die / bounce off rocks & coral?
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
-//freezes the game before the reset
-//doesn't seem to be done as a dip, but what about mixing with dips like this?
- PORT_SERVICE( 0x04, IP_ACTIVE_HIGH )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x10, 0x00, "Coin Chutes" )
- PORT_DIPSETTING( 0x00, "Common" )
- PORT_DIPSETTING( 0x10, "Individual" )
- PORT_DIPNAME( 0x20, 0x00, "Year Display" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x40, "4" )
- PORT_DIPSETTING( 0x80, "5" )
- PORT_DIPSETTING( 0xc0, "6" )
-
- PORT_START("TRACKX") /* FAKE MUXED */
-//check all bits are used
- PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_REVERSE
-
- PORT_START("TRACKY") /* FAKE MUXED */
- PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10)
INPUT_PORTS_END
-static const gfx_layout marinedt_charlayout =
-{
- 8,8,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) }, //maybe 120
- { STEP8(0,1) },
- { STEP8(0,8) },
- 8*8
-};
-
-static const gfx_layout marinedt_objlayout =
-{
- 32,32,
- RGN_FRAC(1,1),
- 2,
- { 0, 4 },
- { STEP4(32*8*7,1), STEP4(32*8*6,1), STEP4(32*8*5,1), STEP4(32*8*4,1), STEP4(32*8*3,1), STEP4(32*8*2,1), STEP4(32*8*1,1), STEP4(32*8*0,1) },
- { STEP16(0,8), STEP16(16*8,8) },
- 32*32*2
-};
-
-static GFXDECODE_START( marinedt )
- GFXDECODE_ENTRY( "gfx1", 0, marinedt_charlayout, 0, 4 ) //really only 1 colour set?
- GFXDECODE_ENTRY( "gfx2", 0, marinedt_objlayout, 48, 4 )
- GFXDECODE_ENTRY( "gfx3", 0, marinedt_objlayout, 32, 4 )
-GFXDECODE_END
-
-PALETTE_INIT_MEMBER(marinedt_state, marinedt)
-{
- const UINT8 *color_prom = memregion("proms")->base();
- int i,r,b,g;
-
- for (i = 0; i < palette.entries(); i++)
- {
- int bit0, bit1, bit2;
-
- /* red component */
- bit0 = (~color_prom[i] >> 0) & 0x01;
- bit1 = (~color_prom[i] >> 1) & 0x01;
- bit2 = (~color_prom[i] >> 2) & 0x01;
-// *(palette++) = 0x92 * bit0 + 0x46 * bit1 + 0x27 * bit2;
- r = 0x27 * bit0 + 0x46 * bit1 + 0x92 * bit2;
- /* green component */
- bit0 = (~color_prom[i] >> 3) & 0x01;
- bit1 = (~color_prom[i] >> 4) & 0x01;
- bit2 = (~color_prom[i] >> 5) & 0x01;
-// *(palette++) = 0x92 * bit0 + 0x46 * bit1 + 0x27 * bit2;
- g = 0x27 * bit0 + 0x46 * bit1 + 0x92 * bit2;
- /* blue component */
- bit0 = (~color_prom[i] >> 5) & 0x01;
- bit1 = (~color_prom[i] >> 6) & 0x01;
- bit2 = (~color_prom[i] >> 7) & 0x01;
-bit0 = 0;
-// *(palette++) = 0x92 * bit0 + 0x46 * bit1 + 0x27 * bit2;
- b = 0x27 * bit0 + 0x46 * bit1 + 0x92 * bit2;
-
- palette.set_pen_color(i, rgb_t(r, g, b));
- }
-}
-
-
-TILE_GET_INFO_MEMBER(marinedt_state::get_tile_info)
-{
- int code = m_tx_tileram[tile_index];
- int color = 0;
- int flags = TILE_FLIPX;
-
- SET_TILE_INFO_MEMBER(0, code, color, flags);
-}
-
-void marinedt_state::video_start()
-{
- m_tx_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(marinedt_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
-
- m_tx_tilemap->set_transparent_pen(0);
- m_tx_tilemap->set_scrolldx(0, 4*8);
- m_tx_tilemap->set_scrolldy(0, -4*8);
-
- m_tile = std::make_unique<bitmap_ind16>(32 * 8, 32 * 8);
- m_obj1 = std::make_unique<bitmap_ind16>(32, 32);
- m_obj2 = std::make_unique<bitmap_ind16>(32, 32);
-}
-
-
-// x------- flipy
-// -x------ unused ??
-// --xxx--- sprite code
-// -----x-- bank
-// ------xx colour
-
-#define OBJ_CODE(a) ((((a) & 0x04) << 1) + (((a) & 0x38) >> 3))
-#define OBJ_COLOR(a) ((a) & 0x03)
-#define OBJ_X(x) (256 - 32 - (x))
-#define OBJ_Y(y) (256 - 1 - (y))
-#define OBJ_FLIPX(a) ((m_pf & 0x02) == 0)
-#define OBJ_FLIPY(a) ((a) & 0x80)
-
-UINT32 marinedt_state::screen_update_marinedt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int sx, sy;
-
- m_tile->fill(0);
- m_tx_tilemap->draw(screen, *m_tile, cliprect, 0, 0);
-
- m_obj1->fill(0);
- m_gfxdecode->gfx(1)->transpen(*m_obj1,m_obj1->cliprect(),
- OBJ_CODE(m_obj1_a),
- OBJ_COLOR(m_obj1_a),
- OBJ_FLIPX(m_obj1_a), OBJ_FLIPY(m_obj1_a),
- 0, 0, 0);
-
- m_obj2->fill(0);
- m_gfxdecode->gfx(2)->transpen(*m_obj2,m_obj2->cliprect(),
- OBJ_CODE(m_obj2_a),
- OBJ_COLOR(m_obj2_a),
- OBJ_FLIPX(m_obj2_a), OBJ_FLIPY(m_obj2_a),
- 0, 0, 0);
-
- bitmap.fill(0);
-
- if (m_pd & 0x02)
- copybitmap_trans(bitmap, *m_obj2, 0, 0, OBJ_X(m_obj2_x), OBJ_Y(m_obj2_y), cliprect, 0);
-
- if (m_pd & 0x01)
- copybitmap_trans(bitmap, *m_obj1, 0, 0, OBJ_X(m_obj1_x), OBJ_Y(m_obj1_y), cliprect, 0);
-
- copybitmap_trans(bitmap, *m_tile, 0, 0, 0, 0, cliprect, 0);
-
- m_coll = m_cx = m_cyr = m_cyq = 0;
- if (m_pd & 0x01)
- {
- for (sx = 0; sx < 32; sx++)
- for (sy = 0; sy < 32; sy++)
- {
- int x = OBJ_X(m_obj1_x) + sx;
- int y = OBJ_Y(m_obj1_y) + sy;
-
- if (!cliprect.contains(x, y))
- continue;
-
- if (m_obj1->pix16(sy, sx) == 0)
- continue;
-
- if (m_tile->pix16(y, x) != 0)
- {
- m_coll = 0x08;
-
- m_cx = (x % 128) / 8;
- m_cx &= 0x0f;
-
- m_cyr = ((y % 64) / 8) * 2 + (x > 127 ? 1 : 0);
- m_cyr &= 0x0f;
-
- m_cyq = y / 64;
- m_cyq &= 0x0f;
-
- break;
- }
- }
- }
-
- m_collh = m_cxh = m_cyrh = m_cyqh = 0;
- if ((m_pd & 0x03) == 0x03)
- {
- for (sx = 0; sx < 32; sx++)
- for (sy = 0; sy < 32; sy++)
- {
- int x = OBJ_X(m_obj1_x + sx);
- int y = OBJ_Y(m_obj1_y + sy);
-
- int xx = OBJ_X(m_obj2_x) - x;
- int yy = OBJ_Y(m_obj2_y) - y;
-
- if (xx < 0 || xx >= 32 || yy < 0 || yy >= 32)
- continue;
-
- if (m_obj1->pix16(sy, sx) == 0)
- continue;
-
- if (m_obj2->pix16(yy, xx) != 0)
- {
- m_collh = 0x80;
-
- m_cxh = (x % 128) / 8;
- m_cxh &= 0x0f;
-
- m_cyrh = ((y % 64) / 8) * 2 + (x > 127 ? 1 : 0);
- m_cyrh &= 0x0f;
-
- m_cyqh= y / 64;
- m_cyqh &= 0x0f;
-
- break;
- }
- }
- }
- return 0;
-}
-
-void marinedt_state::machine_start()
-{
- save_item(NAME(m_obj1_a));
- save_item(NAME(m_obj1_x));
- save_item(NAME(m_obj1_y));
- save_item(NAME(m_obj2_a));
- save_item(NAME(m_obj2_x));
- save_item(NAME(m_obj2_y));
- save_item(NAME(m_pd));
- save_item(NAME(m_pf));
- save_item(NAME(m_music));
- save_item(NAME(m_sound));
- save_item(NAME(m_coll));
- save_item(NAME(m_cx));
- save_item(NAME(m_cyr));
- save_item(NAME(m_cyq));
- save_item(NAME(m_collh));
- save_item(NAME(m_cxh));
- save_item(NAME(m_cyrh));
- save_item(NAME(m_cyqh));
-}
-
-void marinedt_state::machine_reset()
-{
- m_obj1_a = 0;
- m_obj1_x = 0;
- m_obj1_y = 0;
- m_obj2_a = 0;
- m_obj2_x = 0;
- m_obj2_y = 0;
- m_pd = 0;
- m_pf = 0;
- m_music = 0;
- m_sound = 0;
- m_coll = 0;
- m_cx = 0;
- m_cyr = 0;
- m_cyq = 0;
- m_collh = 0;
- m_cxh = 0;
- m_cyrh = 0;
- m_cyqh = 0;
-}
static MACHINE_CONFIG_START( marinedt, marinedt_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80,10000000/4)
- MCFG_CPU_PROGRAM_MAP(marinedt_map)
- MCFG_CPU_IO_MAP(marinedt_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", marinedt_state, irq0_line_hold)
-
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(4*8+32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(marinedt_state, screen_update_marinedt)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", marinedt)
- MCFG_PALETTE_ADD("palette", 64)
- MCFG_PALETTE_INIT_OWNER(marinedt_state, marinedt)
-
- /* sound hardware */
- //discrete sound
MACHINE_CONFIG_END
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
ROM_START( marinedt )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "mg01.3d", 0x0000, 0x0800, CRC(ad09f04d) SHA1(932fc973b4a2fbbebd7e6437ed30c8444e3d4afb))
@@ -781,10 +137,10 @@ ROM_START( marinedt )
ROM_LOAD( "mg13.6h", 0x0000, 0x1000, CRC(17817044) SHA1(8c9b96620e3c414952e6d85c6e81b0df85c88e7a) )
ROM_REGION( 0x0080, "proms", 0 )
- ROM_LOAD( "mg14.2a", 0x0000, 0x0020, CRC(f75f4e3a) SHA1(36e665987f475c57435fa8c224a2a3ce0c5e672b) ) //char clr
- ROM_LOAD( "mg15.1a", 0x0020, 0x0020, CRC(cd3ab489) SHA1(a77478fb94d0cf8f4317f89cc9579def7c294b4f) ) //obj clr
- ROM_LOAD( "mg16.4e", 0x0040, 0x0020, CRC(92c868bc) SHA1(483ae6f47845ddacb701528e82bd388d7d66a0fb) ) //?? collisions
- ROM_LOAD( "mg17.bpr", 0x0060, 0x0020, CRC(13261a02) SHA1(050edd18e4f79d19d5206f55f329340432fd4099) ) //?? table of increasing values
+ ROM_LOAD( "mg14.2a", 0x0000, 0x0020, CRC(f75f4e3a) SHA1(36e665987f475c57435fa8c224a2a3ce0c5e672b) )
+ ROM_LOAD( "mg15.1a", 0x0020, 0x0020, CRC(cd3ab489) SHA1(a77478fb94d0cf8f4317f89cc9579def7c294b4f) )
+ ROM_LOAD( "mg16.4e", 0x0040, 0x0020, CRC(92c868bc) SHA1(483ae6f47845ddacb701528e82bd388d7d66a0fb) )
+ ROM_LOAD( "mg17.bpr", 0x0060, 0x0020, CRC(13261a02) SHA1(050edd18e4f79d19d5206f55f329340432fd4099) )
ROM_END
-GAME( 1981, marinedt, 0, marinedt, marinedt, driver_device, 0, ROT270, "Taito", "Marine Date", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1981, marinedt, 0, marinedt, marinedt, driver_device, 0, ROT270, "Taito", "Marine Date", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/popper.cpp b/src/mame/drivers/popper.cpp
index 42a79abdfe9..d0fa2557645 100644
--- a/src/mame/drivers/popper.cpp
+++ b/src/mame/drivers/popper.cpp
@@ -1,5 +1,8 @@
-// license:???
-// copyright-holders:David Haywood,insideoutboy, Pierpaolo Prazzoli
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
/***************************************************************************
Popper
@@ -24,358 +27,26 @@
8910 SW2 SW1 p.m4 p.m3
-Notes:
-
-- a lower interleave causes some sounds to miss, different interleave values
- change random elements eg position of falling logs, it may be enough to
- synchronise the cpus on read/writes to the 0xdd00/0f range
-
-- it's possible that the two score rows shouldn't be overlaid or shouldn't be
- drawn at all times, the only time there is anything underneath is the colour
- bars on the startup screen
-
-- on odd/bonus levels the chars are not aligned with the sprites when the pylons
- are initially drawn (too low) resulting in the top 3 pylons being black, as
- the pylons move up the screen the chars go out of alignment again (this time
- too high) for a single frame to show another glitch
-
-- front to back ordering of object/enemy sprites appears wrong
-
-- on even levels the front most balloon carrying new enemies swaps between the
- left and middle one, clipping to 16 pixel strips solves this but causes other
- obvious sprite drawing errors
-
-- balloon sprites not displayed on high score entry due to the way videoram is
- being drawn, possibly trying to create a stencil effect
-
-- bursting a balloon on bonus levels just before dying from a log causes a
- sprite glitch for a few frames and then a 9999 point bonus
-
-- reads from 0xffff appear to be a harmless bug in the code that initialises
- memory blocks for enemies on odd levels, it goes on to read from 0x001f,
- 0x003f, 0x005f, 0x007f in the rom before giving up
-
-- a reset while a game is in progress or with credits inserted shows a
- "sorry!! over run" message instead of the test screen during startup,
- looks like the game assumes the reset was caused by the watchdog after a
- hang/crash and is apologising to the player for the loss of their game
-
-- title screen sprite colour glitch in lower right corner of the large pylon
- when an even level was shown before, caused by the game trying to colour
- the top of the pylon in the same way as for odd levels
-
-- enemies stop moving on even levels on rare occasions
-
-- enemy sprites entering from the bridges on odd levels are clipped by a
- few pixels at the top, this would happen even without the overlay as the
- first few rows of videoram are high priority solid chars most of the time
-
-- unknown 0xe002 writes, on for title and level 2 off for all else, looks
- to be graphic related
-
-- bottom of screen is scrappy on odd levels, amongst other things the sprites
- leave early, screen size could be clipped tighter or there could be some
- special handling needed, possibly tied to the 0xe002 writes
-
-- the game freezes in much the same way as the stop dip switch when the coin
- inputs are high (a short PORT_IMPULSE duration will still cause a hitch),
- so potentially there's a coin lockout mechanism
-
***************************************************************************/
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/ay8910.h"
-#include "includes/popper.h"
-
-
-/*************************************
- *
- * Memory handlers
- *
- *************************************/
-//e000 e001 e002 e003
-//76543210 76543210 76543210 76543210
-//x------- unused x------- unused x------- unused x------- unused
-//-x------ dsw1:1 -x------ dsw1:2 -x------ dsw1:3 -x------ dsw1:4
-//--x----- unused --x----- unused --x----- unused --x----- unused
-//---x---- dsw2:1 ---x---- dsw2:2 ---x---- dsw2:3 ---x---- dsw2:4
-//----x--- service ----xxxx p1 udlr ----x--- unused ----xxxx p2 udlr
-//-----x-- coin a -----x-- coin b
-//------x- start 1 ------x- start 2
-//-------x p1 b1 -------x p2 b1
-//
-//e004 e005 e006 e007
-//x------- dsw1:5 x------- dsw1:6 x------- dsw1:7 x------- dsw1:8
-//-x------ unused -x------ unused -x------ unused -x------ unused
-//--x----- dsw2:5 --x----- dsw2:6 --x----- dsw2:7 --x----- dsw2:8
-//---xxxxx unused ---xxxxx unused ---xxxxx unused ---xxxxx unused
-//
-//dsw1 dsw2
-//87654321 87654321
-//xx------ extra x------- stop
-//--xx---- poppers -x------ clear (current level)
-//----xx-- coin b --x----- upright (cabinet)
-//------xx coin a ---x---- crt dir. (flip screen)
-// ----x--- pass (unlimited lives)
-// -----x-- free play
-// ------x- continue
-// -------x sound
-READ8_MEMBER(popper_state::popper_input_ports_r)
-{
- UINT8 data = 0;
- switch (offset)
- {
- // player inputs dsw1 dsw2
- case 0: data = ioport("IN0")->read() | ((ioport("DSW1")->read() & 0x02) << 5) | ((ioport("DSW2")->read() & 0x01) << 4); break;
- case 1: data = ioport("IN1")->read() | ((ioport("DSW1")->read() & 0x01) << 6) | ((ioport("DSW2")->read() & 0x02) << 3); break;
- case 2: data = ioport("IN2")->read() | ((ioport("DSW1")->read() & 0x08) << 3) | ((ioport("DSW2")->read() & 0x04) << 2); break;
- case 3: data = ioport("IN3")->read() | ((ioport("DSW1")->read() & 0x04) << 4) | ((ioport("DSW2")->read() & 0x08) << 1); break;
- case 4: data = ((ioport("DSW1")->read() & 0x20) << 2) | ((ioport("DSW2")->read() & 0x10) << 1); break;
- case 5: data = ((ioport("DSW1")->read() & 0x10) << 3) | ((ioport("DSW2")->read() & 0x20) << 0); break;
- case 6: data = ((ioport("DSW1")->read() & 0x80) << 0) | ((ioport("DSW2")->read() & 0x40) >> 1); break;
- case 7: data = ((ioport("DSW1")->read() & 0x40) << 1) | ((ioport("DSW2")->read() & 0x80) >> 2); break;
- }
- return data;
-}
-
-READ8_MEMBER(popper_state::popper_soundcpu_nmi_r)
-{
- m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- return 0;
-}
-WRITE8_MEMBER(popper_state::nmi_mask_w)
+class popper_state : public driver_device
{
- m_nmi_mask = data & 1;
-}
-
-
-/*************************************
- *
- * Memory maps
- *
- *************************************/
-
-static ADDRESS_MAP_START( popper_map, AS_PROGRAM, 8, popper_state )
- AM_RANGE(0x0000, 0x5fff) AM_ROM
- AM_RANGE(0xc000, 0xc1bf) AM_RAM
- AM_RANGE(0xc1c0, 0xc1ff) AM_RAM_WRITE(popper_ol_videoram_w) AM_SHARE("ol_videoram")
- AM_RANGE(0xc200, 0xc61f) AM_RAM_WRITE(popper_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0xc620, 0xc9bf) AM_RAM
- AM_RANGE(0xc9c0, 0xc9ff) AM_RAM_WRITE(popper_ol_attribram_w) AM_SHARE("ol_attribram")
- AM_RANGE(0xca00, 0xce1f) AM_RAM_WRITE(popper_attribram_w) AM_SHARE("attribram")
- AM_RANGE(0xce20, 0xcfff) AM_RAM
- AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE("share1")
- AM_RANGE(0xe000, 0xe007) AM_READ(popper_input_ports_r)
- AM_RANGE(0xe000, 0xe000) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xe001, 0xe001) AM_WRITE(popper_flipscreen_w)
- AM_RANGE(0xe002, 0xe002) AM_WRITE(popper_e002_w) //?? seems to be graphic related
- AM_RANGE(0xe003, 0xe003) AM_WRITE(popper_gfx_bank_w)
- AM_RANGE(0xe004, 0xe007) AM_WRITENOP //?? range cleared once when the SP is set
- AM_RANGE(0xe400, 0xe400) AM_READ(popper_soundcpu_nmi_r)
- AM_RANGE(0xf800, 0xf800) AM_READNOP //?? read once at startup
- AM_RANGE(0xfc00, 0xfc00) AM_READNOP //?? possibly watchdog
- AM_RANGE(0xffff, 0xffff) AM_READNOP
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( popper_sound_map, AS_PROGRAM, 8, popper_state )
- AM_RANGE(0x0000, 0x0fff) AM_ROM
- AM_RANGE(0x8000, 0x8001) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
- AM_RANGE(0x8002, 0x8002) AM_READNOP //?? all read once at startup and the
- AM_RANGE(0x8002, 0x8002) AM_WRITENOP //?? same writes as 0x8000 (mostly)
- AM_RANGE(0x8003, 0x8003) AM_READNOP //?? result ignored, looks like part
- AM_RANGE(0xa000, 0xa001) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
- AM_RANGE(0xa002, 0xa002) AM_READNOP //?? of AY8910 initialisation
- AM_RANGE(0xa002, 0xa002) AM_WRITENOP //?? same writes as 0xa000
- AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE("share1")
-ADDRESS_MAP_END
+public:
+ popper_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ { }
+};
-/*************************************
- *
- * Input ports
- *
- *************************************/
static INPUT_PORTS_START( popper )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) //ignored if held for 12 or more frames
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE1 )
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
-
- PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) //ignored if held for 12 or more frames
-
- PORT_START("IN3")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
-
- PORT_START("DSW1") /* FAKE DSW1 */
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) //SW1:1-2
- PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Coin_B ) ) //SW1:3-4
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x30, 0x10, DEF_STR( Lives ) ) //SW1:5-6
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPSETTING( 0x10, "3" )
- PORT_DIPSETTING( 0x20, "4" )
- PORT_DIPSETTING( 0x30, "5" )
- PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Bonus_Life ) ) //SW1:7-8
- PORT_DIPSETTING( 0x00, "20k, then every 70k" )
- PORT_DIPSETTING( 0x40, "30k, then every 70k" )
- PORT_DIPSETTING( 0x80, "40k, then every 70k" )
- PORT_DIPSETTING( 0xc0, "50k, then every 70k" )
-
- PORT_START("DSW2") /* FAKE DSW2 */
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Demo_Sounds ) ) //SW2:1
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Allow_Continue ) ) //SW2:2 (stored in 0xd987, never read)
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Free_Play ) ) //SW2:3
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Pass (Unlimited Lives) (Cheat)") //SW2:4
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Flip_Screen ) ) //SW2:5
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) ) //SW2:6
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, "Clear (Current Level) (Cheat)") //SW2:7
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Stop" ) //SW2:8
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
-/*************************************
- *
- * Graphics definitions
- *
- *************************************/
-
-static const gfx_layout popper_charlayout =
-{
- 8,8,
- RGN_FRAC(2,2),
- 2,
- { 0, 4 },
- { STEP4(8,1), STEP4(0,1) },
- { STEP8(0,16) },
- 16*8
-};
-
-static const gfx_layout popper_spritelayout =
-{
- 16,16,
- RGN_FRAC(1,2),
- 2,
- { 0, RGN_FRAC(1,2) },
- { STEP8(8,1), STEP8(0,1) },
- { STEP16(0, 16) },
- 16*2*8
-};
-
-static GFXDECODE_START( popper )
- GFXDECODE_ENTRY( "gfx1", 0, popper_charlayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, popper_spritelayout, 0, 16 )
-GFXDECODE_END
-
-/*************************************
- *
- * Machine driver
- *
- *************************************/
-
-void popper_state::machine_start()
-{
- save_item(NAME(m_flipscreen));
- save_item(NAME(m_e002));
- save_item(NAME(m_gfx_bank));
-}
-
-void popper_state::machine_reset()
-{
- m_flipscreen = 0;
- m_e002 = 0;
- m_gfx_bank = 0;
-}
-
-INTERRUPT_GEN_MEMBER(popper_state::vblank_irq)
-{
- if(m_nmi_mask)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
-
static MACHINE_CONFIG_START( popper, popper_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80,18432000/6)
- MCFG_CPU_PROGRAM_MAP(popper_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", popper_state, vblank_irq)
-
- MCFG_CPU_ADD("audiocpu", Z80,18432000/12)
- MCFG_CPU_PROGRAM_MAP(popper_sound_map)
- MCFG_CPU_PERIODIC_INT_DRIVER(popper_state, irq0_line_hold, 4*60) //NMIs caused by the main CPU
-
- MCFG_QUANTUM_TIME(attotime::from_hz(1800))
-
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(33*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 33*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(popper_state, screen_update_popper)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", popper)
- MCFG_PALETTE_ADD("palette", 64)
- MCFG_PALETTE_INIT_OWNER(popper_state, popper)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("ay1", AY8910, 18432000/12)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
-
- MCFG_SOUND_ADD("ay2", AY8910, 18432000/12)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
-
-/*************************************
- *
- * ROM definition
- *
- *************************************/
-
ROM_START( popper )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "p1", 0x0000, 0x2000, CRC(56881b70) SHA1(d3ade7a54a6cb8a0babf0d667a6b27f492a739dc) )
@@ -397,11 +68,4 @@ ROM_START( popper )
ROM_LOAD( "p.m4", 0x0020, 0x0020, CRC(384de5c1) SHA1(892c89a01c11671c5708113b4e4c27b84be37ea6) )
ROM_END
-
-/*************************************
- *
- * Game driver
- *
- *************************************/
-
-GAME( 1983, popper, 0, popper, popper, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Popper", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, popper, 0, popper, popper, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Popper", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/sprcros2.cpp b/src/mame/drivers/sprcros2.cpp
index ac9b81efa33..040b508ee5c 100644
--- a/src/mame/drivers/sprcros2.cpp
+++ b/src/mame/drivers/sprcros2.cpp
@@ -1,5 +1,8 @@
-// license:???
-// copyright-holders:insideoutboy
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// **** SKELETON DRIVER **** original removed due to unresolved licensing.
+
/*
Super Cross II (JPN Ver.)
(c)1986 GM Shoji
@@ -36,266 +39,25 @@ SCM-23.5B
SC-60.4K
SC-61.5A
-Notes:
-
-- sprites pop in at the wrong place sometimes before entering the screen
-
-- correct drawing/animation of bg is very sensitive to cpu speed/interrupts/
- interleave, current settings aren't correct but don't think there's any
- visible problems
-
-- engine rev sound may not be completely correct
-
-- bg not using second half of prom, of interest is this half is identical to
- the second half of a bankp/appoooh prom, hardware is similar to bankp/appoooh
- in a few ways, there's also an unused SEGA logo in the bg graphics
-
-- fg not using odd colours, shouldn't matter as the colours are duplicated
-
-- sprite priorities are wrong when bikes are jumping as they are ordered on
- vertical position only, assume this is original behaviour
*/
#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "sound/sn76496.h"
-#include "includes/sprcros2.h"
-
-
-
-
-WRITE8_MEMBER(sprcros2_state::m_port7_w)
-{
- //76543210
- //x------- unused
- //-x------ bankswitch halves of scm-01.10k into c000-dfff
- //--xx---- unused
- //----x--- irq enable
- //-----x-- ?? off with title flash and screen clears, possibly layer/sprite enable
- //------x- flip screen
- //-------x nmi enable
-
- if((m_port7^data)&0x40)
- membank("masterbank")->set_entry((data&0x40)>>6);
- machine().tilemap().set_flip_all(data&0x02?(TILEMAP_FLIPX|TILEMAP_FLIPY):0 );
-
- m_port7 = data;
-}
-
-WRITE8_MEMBER(sprcros2_state::s_port3_w)
+class sprcros2_state : public driver_device
{
- //76543210
- //xxxx---- unused
- //----x--- bankswitch halves of scs-27.5k into c000-dfff
- //-----xx- unused
- //-------x nmi enable
-
- if((m_s_port3^data)&0x08)
- membank("slavebank")->set_entry((data&0x08)>>3);
-
- m_s_port3 = data;
-}
+public:
+ sprcros2_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ { }
-static ADDRESS_MAP_START( sprcros2_master_map, AS_PROGRAM, 8, sprcros2_state )
- AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("masterbank")
- AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
- AM_RANGE(0xe800, 0xe817) AM_RAM //always zero
- AM_RANGE(0xe818, 0xe83f) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xe840, 0xefff) AM_RAM //always zero
- AM_RANGE(0xf000, 0xf7ff) AM_RAM
- AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1") //shared with slave cpu
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( sprcros2_master_io_map, AS_IO, 8, sprcros2_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_DEVWRITE("sn1", sn76489_device, write)
- AM_RANGE(0x01, 0x01) AM_READ_PORT("P2") AM_DEVWRITE("sn2", sn76489_device, write)
- AM_RANGE(0x02, 0x02) AM_READ_PORT("EXTRA") AM_DEVWRITE("sn3", sn76489_device, write)
- AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1")
- AM_RANGE(0x05, 0x05) AM_READ_PORT("DSW2")
- AM_RANGE(0x07, 0x07) AM_WRITE(m_port7_w)
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( sprcros2_slave_map, AS_PROGRAM, 8, sprcros2_state )
- AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("slavebank")
- AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
- AM_RANGE(0xe800, 0xefff) AM_RAM //always zero
- AM_RANGE(0xf000, 0xf7ff) AM_RAM
- AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE("share1")
-ADDRESS_MAP_END
+};
-static ADDRESS_MAP_START( sprcros2_slave_io_map, AS_IO, 8, sprcros2_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_WRITE(bgscrollx_w)
- AM_RANGE(0x01, 0x01) AM_WRITE(bgscrolly_w)
- AM_RANGE(0x03, 0x03) AM_WRITE(s_port3_w)
-ADDRESS_MAP_END
static INPUT_PORTS_START( sprcros2 )
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("P2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("EXTRA")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 1C_6C ) )
- PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x70, IP_ACTIVE_HIGH, IPT_UNUSED ) //unused coinage bits
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
-static const gfx_layout sprcros2_bglayout =
-{
- 8,8,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
- { STEP8(0,1) },
- { STEP8(0,8) },
- 8*8
-};
-
-static const gfx_layout sprcros2_spritelayout =
-{
- 32,32,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
- { STEP8(0,1), STEP8(256,1), STEP8(512,1), STEP8(768,1) },
- { STEP16(0,8), STEP16(128,8) },
- 32*32
-};
-
-static const gfx_layout sprcros2_fglayout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 2,
- { 0, 4 },
- { STEP4(64,1), STEP4(0,1) },
- { STEP8(0,8) },
- 8*8*2
-};
-
-static GFXDECODE_START( sprcros2 )
- GFXDECODE_ENTRY( "gfx1", 0, sprcros2_bglayout, 0, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, sprcros2_spritelayout, 256, 6 )
- GFXDECODE_ENTRY( "gfx3", 0, sprcros2_fglayout, 512, 64 )
-GFXDECODE_END
-
-TIMER_DEVICE_CALLBACK_MEMBER(sprcros2_state::m_interrupt)
-{
- int scanline = param;
-
- if (scanline == 240)
- {
- if(m_port7&0x01)
- m_master->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- }
- else if(scanline == 0)
- {
- if(m_port7&0x08)
- m_master->set_input_line(0, HOLD_LINE);
- }
-}
-
-INTERRUPT_GEN_MEMBER(sprcros2_state::s_interrupt)
-{
- if(m_s_port3&0x01)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-}
-
-void sprcros2_state::machine_start()
-{
- membank("masterbank")->configure_entries(0, 2, memregion("master")->base() + 0x10000, 0x2000);
- membank("slavebank")->configure_entries(0, 2, memregion("slave")->base() + 0x10000, 0x2000);
-
- save_item(NAME(m_port7));
- save_item(NAME(m_s_port3));
-}
static MACHINE_CONFIG_START( sprcros2, sprcros2_state )
-
- /* basic machine hardware */
- MCFG_CPU_ADD("master", Z80,10000000/2)
- MCFG_CPU_PROGRAM_MAP(sprcros2_master_map)
- MCFG_CPU_IO_MAP(sprcros2_master_io_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sprcros2_state, m_interrupt, "screen", 0, 1)
-
- MCFG_CPU_ADD("slave", Z80,10000000/2)
- MCFG_CPU_PROGRAM_MAP(sprcros2_slave_map)
- MCFG_CPU_IO_MAP(sprcros2_slave_io_map)
- MCFG_CPU_PERIODIC_INT_DRIVER(sprcros2_state, s_interrupt, 2*60) //2 nmis
-
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(32*8, 32*8)
- MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(sprcros2_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", sprcros2)
- MCFG_PALETTE_ADD("palette", 768)
- MCFG_PALETTE_INDIRECT_ENTRIES(32)
- MCFG_PALETTE_INIT_OWNER(sprcros2_state, sprcros2)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
-
- MCFG_SOUND_ADD("sn1", SN76489, 10000000/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
- MCFG_SOUND_ADD("sn2", SN76489, 10000000/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
- MCFG_SOUND_ADD("sn3", SN76489, 10000000/4)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
ROM_START( sprcros2 )
@@ -303,15 +65,13 @@ ROM_START( sprcros2 )
ROM_LOAD( "scm-03.10g", 0x00000, 0x4000, CRC(b9757908) SHA1(d59cb2aac1b6268fc766306850f5711d4a12d897) )
ROM_LOAD( "scm-02.10j", 0x04000, 0x4000, CRC(849c5c87) SHA1(0e02c4990e371d6a290efa53301818e769648945) )
ROM_LOAD( "scm-01.10k", 0x08000, 0x4000, CRC(385a62de) SHA1(847bf9d97ab3fa8949d9198e4e509948a940d6aa) )
-
- ROM_LOAD( "scm-00.10l", 0x10000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) ) //banked into c000-dfff
+ ROM_LOAD( "scm-00.10l", 0x10000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) )
ROM_REGION( 0x14000, "slave", 0 )
ROM_LOAD( "scs-30.5f", 0x00000, 0x4000, CRC(c0a40e41) SHA1(e74131b353855749258dffa45091c825ccdbf05a) )
ROM_LOAD( "scs-29.5h", 0x04000, 0x4000, CRC(83d49fa5) SHA1(7112110df2f382bbc0e651adcec975054a485b9b) )
ROM_LOAD( "scs-28.5j", 0x08000, 0x4000, CRC(480d351f) SHA1(d1b86f441ae0e58b30e0f089ab25de219d5f30e3) )
-
- ROM_LOAD( "scs-27.5k", 0x10000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) ) //banked into c000-dfff
+ ROM_LOAD( "scs-27.5k", 0x10000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) )
ROM_REGION( 0xc000, "gfx1", 0 ) //bg
ROM_LOAD( "scs-26.4b", 0x0000, 0x4000, CRC(f958b56d) SHA1(a1973179d336d2ba57294155550515f2b8a33a09) )
@@ -319,7 +79,7 @@ ROM_START( sprcros2 )
ROM_LOAD( "scs-24.4e", 0x8000, 0x4000, CRC(87783c36) SHA1(7102be795afcddd76b4d41823e95c65fe1ffbca0) )
ROM_REGION( 0xc000, "gfx2", 0 )
- ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) ) //sprites
+ ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) )
ROM_LOAD( "scm-22.5e", 0x4000, 0x4000, CRC(0cad254c) SHA1(36e30e30b652b3a388a3c4a82251196f79368f59) )
ROM_LOAD( "scm-21.5g", 0x8000, 0x4000, CRC(b6b68998) SHA1(cc3c6d996beeedcc7e5199f10d65c5b1d3c6e666) )
@@ -327,28 +87,25 @@ ROM_START( sprcros2 )
ROM_LOAD( "scm-20.5k", 0x0000, 0x4000, CRC(67a099a6) SHA1(43981abdcaa0ff36183027a3c691ce2df7f06ec7) )
ROM_REGION( 0x0420, "proms", 0 )
- ROM_LOAD( "sc-64.6a", 0x0000, 0x0020, CRC(336dd1c0) SHA1(f0a0d2c13617fd84ee55c0cb96643761a8735147) ) //palette
- ROM_LOAD( "sc-63.3b", 0x0020, 0x0100, CRC(9034a059) SHA1(1801965b4f0f3e04ca4b3faf0ba3a27dbb008474) ) //bg clut lo nibble
- ROM_LOAD( "sc-62.3a", 0x0120, 0x0100, CRC(3c78a14f) SHA1(8f9c196a3e18bdce2d4855bc285bd5bde534bf09) ) //bg clut hi nibble
- ROM_LOAD( "sc-61.5a", 0x0220, 0x0100, CRC(2f71185d) SHA1(974fbb52285f01f4353e9acb1992dcd6fdefedcb) ) //sprite clut
- ROM_LOAD( "sc-60.4k", 0x0320, 0x0100, CRC(d7a4e57d) SHA1(6db02ec6aa55b05422cb505e63c71e36b4b11b4a) ) //fg clut
+ ROM_LOAD( "sc-64.6a", 0x0000, 0x0020, CRC(336dd1c0) SHA1(f0a0d2c13617fd84ee55c0cb96643761a8735147) )
+ ROM_LOAD( "sc-63.3b", 0x0020, 0x0100, CRC(9034a059) SHA1(1801965b4f0f3e04ca4b3faf0ba3a27dbb008474) )
+ ROM_LOAD( "sc-62.3a", 0x0120, 0x0100, CRC(3c78a14f) SHA1(8f9c196a3e18bdce2d4855bc285bd5bde534bf09) )
+ ROM_LOAD( "sc-61.5a", 0x0220, 0x0100, CRC(2f71185d) SHA1(974fbb52285f01f4353e9acb1992dcd6fdefedcb) )
+ ROM_LOAD( "sc-60.4k", 0x0320, 0x0100, CRC(d7a4e57d) SHA1(6db02ec6aa55b05422cb505e63c71e36b4b11b4a) )
ROM_END
-/* this is probably an old revision */
ROM_START( sprcros2a )
ROM_REGION( 0x14000, "master", 0 )
ROM_LOAD( "15.bin", 0x00000, 0x4000, CRC(b9d02558) SHA1(775404c6c7648d9dab02b496541739ea700cd481) )
ROM_LOAD( "scm-02.10j", 0x04000, 0x4000, CRC(849c5c87) SHA1(0e02c4990e371d6a290efa53301818e769648945) )
ROM_LOAD( "scm-01.10k", 0x08000, 0x4000, CRC(385a62de) SHA1(847bf9d97ab3fa8949d9198e4e509948a940d6aa) )
-
- ROM_LOAD( "scm-00.10l", 0x10000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) ) //banked into c000-dfff
+ ROM_LOAD( "scm-00.10l", 0x10000, 0x4000, CRC(13fa3684) SHA1(611b7a237e394f285dcc5beb027dacdbdd58a7a0) )
ROM_REGION( 0x14000, "slave", 0 )
ROM_LOAD( "scs-30.5f", 0x00000, 0x4000, CRC(c0a40e41) SHA1(e74131b353855749258dffa45091c825ccdbf05a) )
ROM_LOAD( "scs-29.5h", 0x04000, 0x4000, CRC(83d49fa5) SHA1(7112110df2f382bbc0e651adcec975054a485b9b) )
ROM_LOAD( "scs-28.5j", 0x08000, 0x4000, CRC(480d351f) SHA1(d1b86f441ae0e58b30e0f089ab25de219d5f30e3) )
-
- ROM_LOAD( "scs-27.5k", 0x10000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) ) //banked into c000-dfff
+ ROM_LOAD( "scs-27.5k", 0x10000, 0x4000, CRC(2cf720cb) SHA1(a95c5b8c88371cf597bb7d80afeca6a48c7b74e6) )
ROM_REGION( 0xc000, "gfx1", 0 ) //bg
ROM_LOAD( "scs-26.4b", 0x0000, 0x4000, CRC(f958b56d) SHA1(a1973179d336d2ba57294155550515f2b8a33a09) )
@@ -356,7 +113,7 @@ ROM_START( sprcros2a )
ROM_LOAD( "scs-24.4e", 0x8000, 0x4000, CRC(87783c36) SHA1(7102be795afcddd76b4d41823e95c65fe1ffbca0) )
ROM_REGION( 0xc000, "gfx2", 0 )
- ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) ) //sprites
+ ROM_LOAD( "scm-23.5b", 0x0000, 0x4000, CRC(ab42f8e3) SHA1(8c2213b7c47a48e223fc3f7d323d16c0e4cd0457) )
ROM_LOAD( "scm-22.5e", 0x4000, 0x4000, CRC(0cad254c) SHA1(36e30e30b652b3a388a3c4a82251196f79368f59) )
ROM_LOAD( "scm-21.5g", 0x8000, 0x4000, CRC(b6b68998) SHA1(cc3c6d996beeedcc7e5199f10d65c5b1d3c6e666) )
@@ -364,12 +121,12 @@ ROM_START( sprcros2a )
ROM_LOAD( "scm-20.5k", 0x0000, 0x4000, CRC(67a099a6) SHA1(43981abdcaa0ff36183027a3c691ce2df7f06ec7) )
ROM_REGION( 0x0420, "proms", 0 )
- ROM_LOAD( "sc-64.6a", 0x0000, 0x0020, CRC(336dd1c0) SHA1(f0a0d2c13617fd84ee55c0cb96643761a8735147) ) //palette
- ROM_LOAD( "sc-63.3b", 0x0020, 0x0100, CRC(9034a059) SHA1(1801965b4f0f3e04ca4b3faf0ba3a27dbb008474) ) //bg clut lo nibble
- ROM_LOAD( "sc-62.3a", 0x0120, 0x0100, CRC(3c78a14f) SHA1(8f9c196a3e18bdce2d4855bc285bd5bde534bf09) ) //bg clut hi nibble
- ROM_LOAD( "sc-61.5a", 0x0220, 0x0100, CRC(2f71185d) SHA1(974fbb52285f01f4353e9acb1992dcd6fdefedcb) ) //sprite clut
- ROM_LOAD( "sc-60.4k", 0x0320, 0x0100, CRC(d7a4e57d) SHA1(6db02ec6aa55b05422cb505e63c71e36b4b11b4a) ) //fg clut
+ ROM_LOAD( "sc-64.6a", 0x0000, 0x0020, CRC(336dd1c0) SHA1(f0a0d2c13617fd84ee55c0cb96643761a8735147) )
+ ROM_LOAD( "sc-63.3b", 0x0020, 0x0100, CRC(9034a059) SHA1(1801965b4f0f3e04ca4b3faf0ba3a27dbb008474) )
+ ROM_LOAD( "sc-62.3a", 0x0120, 0x0100, CRC(3c78a14f) SHA1(8f9c196a3e18bdce2d4855bc285bd5bde534bf09) )
+ ROM_LOAD( "sc-61.5a", 0x0220, 0x0100, CRC(2f71185d) SHA1(974fbb52285f01f4353e9acb1992dcd6fdefedcb) )
+ ROM_LOAD( "sc-60.4k", 0x0320, 0x0100, CRC(d7a4e57d) SHA1(6db02ec6aa55b05422cb505e63c71e36b4b11b4a) )
ROM_END
-GAME( 1986, sprcros2, 0, sprcros2, sprcros2, driver_device, 0, ROT0, "GM Shoji", "Super Cross II (Japan, set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, sprcros2a,sprcros2, sprcros2, sprcros2, driver_device, 0, ROT0, "GM Shoji", "Super Cross II (Japan, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, sprcros2, 0, sprcros2, sprcros2, driver_device, 0, ROT0, "GM Shoji", "Super Cross II (Japan, set 1)", MACHINE_IS_SKELETON )
+GAME( 1986, sprcros2a,sprcros2, sprcros2, sprcros2, driver_device, 0, ROT0, "GM Shoji", "Super Cross II (Japan, set 2)", MACHINE_IS_SKELETON )