this 'pac90' bootleg has been showing up on boards pulled from actual arcade cabs in Spain as of late.

we know the origins of the set (was made by Mike Coates etc.) but it's pretty old now, and as it's showing up on real hardware that's been used in arcades I think we may as well support it.
This commit is contained in:
David Haywood 2015-09-09 15:21:30 +01:00
parent 0c276b181a
commit febd422861
4 changed files with 135 additions and 25 deletions

View File

@ -6288,6 +6288,7 @@ wc90t // (c) 1989 Tecmo
wc90b1 // bootleg
wc90b2 // bootleg
wc90ba // bootleg
pac90 // bootleg
spbactn // 9002 - (c) 1991 Tecmo
spbactnj // 9002 - (c) 1991 Tecmo
spbactnp // prototype

View File

@ -51,28 +51,6 @@ To enter into input test mode:
Press one of the start buttons to exit.
*****************************
* *
* Pacman on WC90 Hardware *
* *
*****************************
There is known to be a Pacman hack running on this hardware. It was done by Mike C. and isn't meant
for inclusion in MAME. However the roms with checksums are listed below to prevent it being added
as a newly "found" game:
Set is known as pac90 (rom names may differ, but the CRC32/SHA1 values are listed):
rom1.ic87 CRC32 8af34306 SHA1 1a98adca74f46da36e3648d37bfcb56a328a031e
rom2.ic67 CRC32 bc9bfdf2 SHA1 869e4012e5c577e501143cbfd75cce8cef919c86
rom3.ic54 CRC32 1c4d17fd SHA1 5abebf867de452cc3e85331e91b9110c26a8b050
char.ic85 CRC32 70941a50 SHA1 283583743c21774d0097dc935ae7bc7009b5b633
char.ic85 CRC32 0b906dae SHA1 0d14d6a7bbe0b8772143afb4c6c94c62313e4b9c <-- An alternate version...
sprite1.ic50 CRC32 190852ea SHA1 fad7eb3aa53d03917173dd5a040655cfd329db32
sprite2.ic60 CRC32 33effbea SHA1 dbf6b735f3c8bacb695caf5d15ac8b7961bffc74
voice.ic82 CRC32 abc61f3d SHA1 c6f123d16a26c4d77c635617dd97bb4b906c463a
*/
#include "emu.h"
@ -235,6 +213,86 @@ INPUT_PORTS_END
static INPUT_PORTS_START( pac90 )
PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:8,7")
PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:6,5")
PORT_DIPSETTING( 0x00, "1" )
PORT_DIPSETTING( 0x04, "2" )
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x0c, "5" )
PORT_DIPNAME( 0x30, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4,3")
PORT_DIPSETTING( 0x00, "10000" )
PORT_DIPSETTING( 0x10, "15000" )
PORT_DIPSETTING( 0x20, "20000" )
PORT_DIPSETTING( 0x30, DEF_STR( None ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x40, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x80, 0x80, "Ghost Names" ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, DEF_STR( Alternate ) )
PORT_START("DSW2")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x02, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
INPUT_PORTS_END
static const gfx_layout charlayout =
{
8,8,
@ -332,6 +390,12 @@ static MACHINE_CONFIG_DERIVED( wc90t, wc90 )
MCFG_VIDEO_START_OVERRIDE(wc90_state, wc90t )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pac90, wc90 )
MCFG_DEVICE_MODIFY("spritegen")
MCFG_TECMO_SPRITE_YOFFSET(16) // sprites need shifting, why?
MACHINE_CONFIG_END
ROM_START( wc90 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "ic87_01.bin", 0x00000, 0x08000, CRC(4a1affbc) SHA1(bc531e97ca31c66fdac194e2d79d5c6ba1300556) ) /* c000-ffff is not used */
@ -365,6 +429,7 @@ ROM_START( wc90 )
ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) )
ROM_END
ROM_START( wc90a )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "wc90-1.bin", 0x00000, 0x08000, CRC(d1804e1a) SHA1(eec7374f4d23c89843f38fffff436635adb43b63) ) /* c000-ffff is not used */
@ -464,7 +529,40 @@ ROM_START( wc90t )
ROM_LOAD( "ic82_06.bin", 0x00000, 0x20000, CRC(2fd692ed) SHA1(0273dc39181504320bec0187d074b2f86c821508) )
ROM_END
ROM_START( pac90 )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "rom1.ic87", 0x00000, 0x08000, CRC(8af34306) SHA1(1a98adca74f46da36e3648d37bfcb56a328a031e) )
ROM_REGION( 0x20000, "sub", ROMREGION_ERASE00 ) /* Second CPU */
ROM_LOAD( "rom2.ic67", 0x00000, 0x10000, CRC(bc9bfdf2) SHA1(869e4012e5c577e501143cbfd75cce8cef919c86) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "rom3.ic54", 0x00000, 0x10000, CRC(1c4d17fd) SHA1(5abebf867de452cc3e85331e91b9110c26a8b050) )
ROM_REGION( 0x010000, "gfx1", 0 )
ROM_LOAD( "char.ic85", 0x00000, 0x10000, CRC(70941a50) SHA1(283583743c21774d0097dc935ae7bc7009b5b633) )
// char.ic85 CRC32 0b906dae SHA1 0d14d6a7bbe0b8772143afb4c6c94c62313e4b9c <-- An alternate version...
ROM_REGION( 0x040000, "gfx2", ROMREGION_ERASE00 )
//ROM_LOAD( "ic86_08v.bin", 0x00000, 0x20000, CRC(8fa1a1ff) SHA1(ce624617ac8c8b54e41294cf5dca7a09c91f53ba) ) /* tiles #1 */
//ROM_LOAD( "ic90_09v.bin", 0x20000, 0x20000, CRC(99f8841c) SHA1(1969b4d78ca00924a7550826e1c4f4fa0588ef02) ) /* tiles #2 */
ROM_REGION( 0x040000, "gfx3", ROMREGION_ERASE00 )
//ROM_LOAD( "ic87_10v.bin", 0x00000, 0x20000, CRC(8232093d) SHA1(59bf9c9a858b47326cf0c64b1ee6ac727a15a20b) ) /* tiles #3 */
//ROM_LOAD( "ic91_11v.bin", 0x20000, 0x20000, CRC(188d3789) SHA1(35654a99a20735bae09b32f74255f8132dee9af2) ) /* tiles #4 */
ROM_REGION( 0x080000, "gfx4", ROMREGION_ERASE00 )
ROM_LOAD( "sprite1.ic50", 0x00000, 0x10000, CRC(190852ea) SHA1(fad7eb3aa53d03917173dd5a040655cfd329db32) ) /* sprites */
ROM_LOAD( "sprite2.ic60", 0x40000, 0x10000, CRC(33effbea) SHA1(dbf6b735f3c8bacb695caf5d15ac8b7961bffc74) ) /* sprites */
ROM_REGION( 0x20000, "ymsnd", ROMREGION_ERASE00 ) /* 64k for ADPCM samples */
ROM_LOAD( "voice.ic82", 0x00000, 0x10000, CRC(abc61f3d) SHA1(c6f123d16a26c4d77c635617dd97bb4b906c463a) )
ROM_END
GAME( 1989, wc90, 0, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (World)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1989, wc90a, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1989, wc90b, wc90, wc90, wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (Euro set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1989, wc90t, wc90, wc90t,wc90, driver_device, 0, ROT0, "Tecmo", "Tecmo World Cup '90 (trackball set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 199?, pac90, puckman, pac90,pac90,driver_device, 0, ROT90, "bootleg (Macro)", "Pac-Man (bootleg on World Cup '90 hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // made by Mike Coates etc.

View File

@ -20,7 +20,8 @@ const device_type TECMO_SPRITE = &device_creator<tecmo_spr_device>;
tecmo_spr_device::tecmo_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, TECMO_SPRITE, "Tecmo Chained Sprites", tag, owner, clock, "tecmo_spr", __FILE__),
m_gfxregion(0),
m_bootleg(0)
m_bootleg(0),
m_yoffset(0)
{
}
@ -46,6 +47,12 @@ void tecmo_spr_device::set_bootleg(device_t &device, int bootleg)
dev.m_bootleg = bootleg;
}
void tecmo_spr_device::set_yoffset(device_t &device, int yoffset)
{
tecmo_spr_device &dev = downcast<tecmo_spr_device &>(device);
dev.m_yoffset = yoffset;
}
static const UINT8 layout[8][8] =
{
@ -323,7 +330,7 @@ void tecmo_spr_device::draw_wc90_sprites(bitmap_ind16 &bitmap, const rectangle &
code = ( spriteram[offs+2] ) + ( spriteram[offs+3] << 8 );
int xpos = spriteram[offs + 8] + ( (spriteram[offs + 9] & 3 ) << 8 );
int ypos = spriteram[offs + 6] + ( (spriteram[offs + 7] & 1 ) << 8 );
int ypos = spriteram[offs + 6] + ( (spriteram[offs + 7] & 1 ) << 8 ) + m_yoffset;
if (xpos >= 0x0300) xpos -= 0x0400;

View File

@ -10,6 +10,7 @@ public:
tecmo_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
static void set_gfx_region(device_t &device, int gfxregion);
static void set_bootleg(device_t &device, int bootleg);
static void set_yoffset(device_t &device, int bootleg);
// gaiden.c / spbactn.c / tecmo16.c sprites
void gaiden_draw_sprites(screen_device &screen, gfxdecode_device *gfxdecode, const rectangle &cliprect, UINT16* spriteram, int sprite_sizey, int spr_offset_y, int flip_screen, bitmap_ind16 &sprite_bitmap);
@ -29,7 +30,7 @@ protected:
UINT8 m_gfxregion;
int m_bootleg; // for Gals Pinball / Hot Pinball
int m_yoffset;
private:
};
@ -42,3 +43,6 @@ extern const device_type TECMO_SPRITE;
#define MCFG_TECMO_SPRITE_BOOTLEG(_bootleg) \
tecmo_spr_device::set_bootleg(*device, _bootleg);
#define MCFG_TECMO_SPRITE_YOFFSET(_yoffset) \
tecmo_spr_device::set_yoffset(*device, _yoffset);