diff options
author | mamehaze <mamehaze@users.noreply.github.com> | 2015-02-03 20:58:02 +0000 |
---|---|---|
committer | mamehaze <mamehaze@users.noreply.github.com> | 2015-02-03 20:58:02 +0000 |
commit | 7082eabacaed7fdf9099d0e428556bcca1da1cb4 (patch) | |
tree | 065eb52e23107c7ea5a763eb5517a34b7dc60427 | |
parent | 84c053f76edc337823133ab64c46e492d6a28d12 (diff) |
new WORKING game
PuzzLove [Manuel Assoni]
-rw-r--r-- | src/mame/drivers/silvmil.c | 113 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 | ||||
-rw-r--r-- | src/mame/video/decospr.c | 27 | ||||
-rw-r--r-- | src/mame/video/decospr.h | 5 |
4 files changed, 143 insertions, 3 deletions
diff --git a/src/mame/drivers/silvmil.c b/src/mame/drivers/silvmil.c index 17de8700866..8f8c4744260 100644 --- a/src/mame/drivers/silvmil.c +++ b/src/mame/drivers/silvmil.c @@ -261,6 +261,85 @@ static INPUT_PORTS_START( silvmil ) PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "SW2:8" ) /* Verified */ INPUT_PORTS_END + +static INPUT_PORTS_START( puzzlove ) + PORT_START("P1_P2") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START("COIN") + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW") + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + + static const gfx_layout tlayout = { 16,16, @@ -352,6 +431,10 @@ static MACHINE_CONFIG_START( silvmil, silvmil_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.2) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( puzzlove, silvmil ) + MCFG_DEVICE_MODIFY("spritegen") + MCFG_DECO_SPRITE_BOOTLEG_TYPE(1) +MACHINE_CONFIG_END ROM_START( silvmil ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68k */ @@ -405,6 +488,33 @@ ROM_START( silvmil ) ROM_LOAD16_BYTE( "d-20_u56.bin", 0x100001, 0x80000, CRC(e67c2c7d) SHA1(cddfd6a3d934e71853af62e3d2bf312618c9b4ff) ) ROM_END +ROM_START( puzzlove ) + ROM_REGION( 0x100000, "maincpu", 0 ) /* 68k */ + ROM_LOAD16_BYTE( "3.u3", 0x00000, 0x40000, CRC(826c8472) SHA1(54f1a9fa0431de840d6fce466e09098a8d601660) ) + ROM_LOAD16_BYTE( "4.u2", 0x00001, 0x40000, CRC(64ddc708) SHA1(60b29f8cd5dd654be34452fd197a77abc872e63d) ) + + ROM_REGION( 0x20000, "audiocpu", 0 ) /* z80 */ + ROM_LOAD( "1.uz02", 0x00000, 0x20000, CRC(3077e7f3) SHA1(e2bf634a2166e1851486a801e74a7ec0d4599c28) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* samples */ + ROM_LOAD( "2.uz11", 0x00000, 0x40000, CRC(4c06ec68) SHA1(3cfca1c98e73c65a45b65d43e012c5529572c057) ) + + ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "10.u41", 0x000000, 0x20000, CRC(7200f878) SHA1(27c6389f802f6e0af0210e2b01788914c0eb1d04) ) + ROM_CONTINUE ( 0x080000,0x20000 ) + ROM_CONTINUE ( 0x040000,0x20000 ) + ROM_CONTINUE ( 0x0c0000,0x20000 ) + ROM_LOAD16_BYTE( "9.u42", 0x000001, 0x20000, CRC(21b1b297) SHA1(0f589d1c62d0f79b1379e4444b119bdc4cc70cfb) ) + ROM_CONTINUE ( 0x080001,0x20000 ) + ROM_CONTINUE ( 0x040001,0x20000 ) + ROM_CONTINUE ( 0x0c0001,0x20000 ) + + ROM_REGION( 0x200000, "gfx2", 0 ) /* sprites */ + ROM_LOAD16_BYTE( "5.u53", 0x000000, 0x80000, CRC(8707d5a0) SHA1(05480ac34982a4e4768b7f3fccd2e557ca4b2545) ) + ROM_LOAD16_BYTE( "6.u54", 0x000001, 0x80000, CRC(60a6d614) SHA1(0693c08c51d6b3a05373c9999f01b0b8d23a1c89) ) + ROM_LOAD16_BYTE( "7.u55", 0x100000, 0x80000, CRC(0f2ea5c4) SHA1(4cb46fc6272e3cc14dfdcd7831157433ee7cf247) ) + ROM_LOAD16_BYTE( "8.u56", 0x100001, 0x80000, CRC(037dcd3d) SHA1(fcdf604710518982e0b4acc81a56fa703d0c9407) ) +ROM_END void silvmil_state::tumblepb_gfx1_rearrange() { @@ -432,4 +542,5 @@ DRIVER_INIT_MEMBER(silvmil_state,silvmil) tumblepb_gfx1_rearrange(); } -GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil_state, silvmil, ROT270, "Para", "Silver Millennium", GAME_SUPPORTS_SAVE ) +GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil_state, silvmil, ROT270, "Para", "Silver Millennium", GAME_SUPPORTS_SAVE ) +GAME( 1994, puzzlove, 0, puzzlove,puzzlove,silvmil_state, silvmil, ROT0, "Para", "PuzzLove", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index ae6cbfd6348..906ed2353b1 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -10479,6 +10479,7 @@ crospang // (c) 1998 F2 System heuksun // (c) 1998 Oksan / F2 System bestri // (c) F2 System silvmil // (c) 1995 Para +puzzlove // (c) 1994 Para funybubl // (c) 1999 In Chang Electronic Co funybublc // (c) 1999 Comad Industries dcheese // (c) 1993 HAR diff --git a/src/mame/video/decospr.c b/src/mame/video/decospr.c index 79af988b378..96940c008dc 100644 --- a/src/mame/video/decospr.c +++ b/src/mame/video/decospr.c @@ -150,6 +150,7 @@ decospr_device::decospr_device(const machine_config &mconfig, const char *tag, d device_video_interface(mconfig, *this), m_gfxregion(0), m_is_bootleg(false), + m_bootleg_type(0), m_x_offset(0), m_y_offset(0), m_flipallx(0), @@ -232,7 +233,16 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle & { sprite = spriteram[offs + 1]; y = spriteram[offs]; - flash = y & 0x1000; + + if (m_is_bootleg && (m_bootleg_type == 1)) + { + flash = y & 0x0400; + } + else + { + flash = y & 0x1000; + } + w = y & 0x0800; @@ -258,7 +268,20 @@ void decospr_device::draw_sprites_common(_BitmapClass &bitmap, const rectangle & fx = y & 0x2000; fy = y & 0x4000; - multi = (1 << ((y & 0x0600) >> 9)) - 1; /* 1x, 2x, 4x, 8x height */ + + int tempwidth = 0; + + if (m_is_bootleg && (m_bootleg_type==1)) // puzzlove + { + tempwidth = (y & 0x1000) >> 12; + tempwidth |= (y & 0x0200) >> 8; + } + else + { + tempwidth |= (y & 0x0600) >> 9; + } + + multi = (1 << (tempwidth)) - 1; /* 1x, 2x, 4x, 8x height */ /* bootleg support (esd16.c) */ if (flipscreen) x = ((x&0x1ff) - m_x_offset)&0x1ff; diff --git a/src/mame/video/decospr.h b/src/mame/video/decospr.h index 8df47bdb7cd..1725320cd12 100644 --- a/src/mame/video/decospr.h +++ b/src/mame/video/decospr.h @@ -21,6 +21,7 @@ public: static void set_pri_callback(device_t &device, decospr_pri_cb_delegate callback) { downcast<decospr_device &>(device).m_pri_cb = callback; } static void set_col_callback(device_t &device, decospr_col_cb_delegate callback) { downcast<decospr_device &>(device).m_col_cb = callback; } static void set_is_bootleg(device_t &device, bool is_bootleg) { downcast<decospr_device &>(device).m_is_bootleg = is_bootleg; } + static void set_bootleg_type(device_t &device, int bootleg_type) { downcast<decospr_device &>(device).m_bootleg_type = bootleg_type; } static void set_flipallx(device_t &device, int flipallx) { downcast<decospr_device &>(device).m_flipallx = flipallx; } static void set_transpen(device_t &device, int transpen) { downcast<decospr_device &>(device).m_transpen = transpen; } static void set_offsets(device_t &device, int x_offset, int y_offset) @@ -55,6 +56,7 @@ protected: // used by various bootleg / clone chips. bool m_is_bootleg; // used by various bootlegs (disables masking of sprite tile number when multi-sprite is used) + int m_bootleg_type; // for Puzzlove, has sprite bits moved around (probably to prevent board swaps) int m_x_offset, m_y_offset; // used by various bootlegs int m_flipallx; // used by esd16.c - hedpanio, multchmp , and nmg5.c int m_transpen; // used by fncywld (tumbleb.c) @@ -80,6 +82,9 @@ extern const device_type DECO_SPRITE; #define MCFG_DECO_SPRITE_ISBOOTLEG(_boot) \ decospr_device::set_is_bootleg(*device, _boot); +#define MCFG_DECO_SPRITE_BOOTLEG_TYPE(_bootleg_type) \ + decospr_device::set_bootleg_type(*device, _bootleg_type); + #define MCFG_DECO_SPRITE_FLIPALLX(_flip) \ decospr_device::set_flipallx(*device, _flip); |