From 4fbd1d7babedb9423cd2462548fc8935aee5aaf7 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 3 Mar 2016 18:38:56 +0000 Subject: remove all drivers by 'insideoutboy' due to unresolved licensing, replaced with skeleton drivers (rom loading only) --- src/mame/drivers/carjmbre.cpp | 218 +------------- src/mame/drivers/flower.cpp | 218 +------------- src/mame/drivers/marinedt.cpp | 668 +----------------------------------------- src/mame/drivers/popper.cpp | 360 +---------------------- src/mame/drivers/sprcros2.cpp | 301 ++----------------- 5 files changed, 78 insertions(+), 1687 deletions(-) (limited to 'src/mame/drivers') 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 m_tx_tileram; - - /* video-related */ - std::unique_ptr m_tile; - std::unique_ptr m_obj1; - std::unique_ptr 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 m_maincpu; - required_device m_gfxdecode; - required_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(32 * 8, 32 * 8); - m_obj1 = std::make_unique(32, 32); - m_obj2 = std::make_unique(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 ) -- cgit v1.2.3