summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit7082eabacaed7fdf9099d0e428556bcca1da1cb4 (patch)
tree065eb52e23107c7ea5a763eb5517a34b7dc60427
parent84c053f76edc337823133ab64c46e492d6a28d12 (diff)
new WORKING game
PuzzLove [Manuel Assoni]
-rw-r--r--src/mame/drivers/silvmil.c113
-rw-r--r--src/mame/mame.lst1
-rw-r--r--src/mame/video/decospr.c27
-rw-r--r--src/mame/video/decospr.h5
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);