Simplified bloodbro gfx decoding and removed unnecessary DRIVER_INIT.

Marked two weststry sprite ROMs as BAD_DUMP [David Haywood]

from	David Haywood <neohaze@nildram.co.uk>
to	Philip Bennett <p.j.bennett@gmail.com>
date	Wed, Dec 23, 2009 at 2:47 PM
subject	Blood Bros
	
simplified gfx decoding, removed unnecessary DRIVER_INIT (we can specify invert in the loading)
marked 2 of the West Story bootleg sprite roms as bad dumps.
This commit is contained in:
Phil Bennett 2009-12-26 17:08:53 +00:00
parent dd7b96b1b1
commit 73c86ac3bf
2 changed files with 40 additions and 80 deletions

View File

@ -6,14 +6,12 @@ TAD Corporation 1990
driver by Carlos A. Lozano Baides driver by Carlos A. Lozano Baides
Coin inputs are handled by the sound CPU, so they don't work with sound
disabled. Use the service switch instead.
TODO: TODO:
West Story: West Story:
- sound - sound (program rom is close to the original)
- some bad sprites, probably bad ROMs. - some bad sprites (2 bad sprite roms, should the actual decoded data match?, can they be reconstructed from the original?)
- tilemap scroll - tilemap scroll
- runs too fast? (vblank flag somewhere?)
Sky Smasher (c) 1990 Nihon System [Seibu hardware] Sky Smasher (c) 1990 Nihon System [Seibu hardware]
@ -71,8 +69,8 @@ Stephh's notes (based on the games M68000 code and some tests) :
3) 'weststry' 3) 'weststry'
- This bootleg has been realised by Datsu in 1991. This "company" also - This bootleg has been released by Datsu in 1991. This "company" also
bootlegged "Toki" (another TAD game) in 1990. bootlegged "Toki" (another TAD game) in 1990, and several Sega titles.
- When "Starting Coin" Dip Switch is set to "x2", you need 2 coins to start - When "Starting Coin" Dip Switch is set to "x2", you need 2 coins to start
a game (but 1 coin to join), then 1 coin to continue. a game (but 1 coin to join), then 1 coin to continue.
@ -209,7 +207,7 @@ ADDRESS_MAP_END
PORT_DIPSETTING( 0x0020, DEF_STR( Normal ) ) \ PORT_DIPSETTING( 0x0020, DEF_STR( Normal ) ) \
PORT_DIPSETTING( 0x0000, "x2" ) PORT_DIPSETTING( 0x0000, "x2" )
static INPUT_PORTS_START( weststry_base ) static INPUT_PORTS_START( bloodbro_base )
PORT_START("DSW") PORT_START("DSW")
BLOODBRO_COINAGE BLOODBRO_COINAGE
/* SW1:7,8 is listed as "ROM change option", "optional" /* SW1:7,8 is listed as "ROM change option", "optional"
@ -270,7 +268,7 @@ static INPUT_PORTS_START( weststry_base )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // "Fire" PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // "Fire"
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // "Roll" PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // "Roll"
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // "Dynamite" PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // "Dynamite"
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* tested - check code at 0x0005fe - VBLANK ? */ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* tested - check code at 0x0005fe - VBLANK ? (probably not) */
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
@ -284,7 +282,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( weststry ) static INPUT_PORTS_START( weststry )
PORT_INCLUDE( weststry_base ) PORT_INCLUDE( bloodbro_base )
PORT_START("COIN") /* referenced by seibu sound board */ PORT_START("COIN") /* referenced by seibu sound board */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -292,7 +290,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( bloodbro ) static INPUT_PORTS_START( bloodbro )
PORT_INCLUDE( weststry_base ) PORT_INCLUDE( bloodbro_base )
PORT_MODIFY("IN1") PORT_MODIFY("IN1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
@ -371,27 +369,14 @@ INPUT_PORTS_END
static const gfx_layout textlayout = static const gfx_layout textlayout =
{ {
8,8, /* 8*8 characters */ 8,8, /* 8*8 characters */
4096, /* 4096 characters */ RGN_FRAC(1,2), /* 4096 characters */
4, /* 4 bits per pixel */ 4, /* 4 bits per pixel */
{ 0, 4, 0x10000*8, 0x10000*8+4 }, { 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 },
{ 3, 2, 1, 0, 8+3, 8+2, 8+1, 8+0}, { 3, 2, 1, 0, 8+3, 8+2, 8+1, 8+0},
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
16*8 /* every char takes 16 consecutive bytes */ 16*8 /* every char takes 16 consecutive bytes */
}; };
static const gfx_layout backlayout =
{
16,16, /* 16*16 sprites */
4096, /* 4096 sprites */
4, /* 4 bits per pixel */
{ 8, 12, 0, 4 },
{ 3, 2, 1, 0, 16+3, 16+2, 16+1, 16+0,
3+32*16, 2+32*16, 1+32*16, 0+32*16, 16+3+32*16, 16+2+32*16, 16+1+32*16, 16+0+32*16 },
{ 0*16, 2*16, 4*16, 6*16, 8*16, 10*16, 12*16, 14*16,
16*16, 18*16, 20*16, 22*16, 24*16, 26*16, 28*16, 30*16 },
128*8 /* every sprite takes 128 consecutive bytes */
};
static const gfx_layout spritelayout = static const gfx_layout spritelayout =
{ {
16,16, /* 16*16 sprites */ 16,16, /* 16*16 sprites */
@ -408,33 +393,20 @@ static const gfx_layout spritelayout =
static const gfx_layout weststry_textlayout = static const gfx_layout weststry_textlayout =
{ {
8,8, /* 8*8 sprites */ 8,8, /* 8*8 sprites */
4096, /* 4096 sprites */ RGN_FRAC(1,4), /* 4096 sprites */
4, /* 4 bits per pixel */ 4, /* 4 bits per pixel */
{ 0, 0x8000*8, 2*0x8000*8, 3*0x8000*8 }, { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
{ 0, 1, 2, 3, 4, 5, 6, 7 }, { 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every sprite takes 8 consecutive bytes */ 8*8 /* every sprite takes 8 consecutive bytes */
}; };
static const gfx_layout weststry_backlayout =
{
16,16, /* 16*16 sprites */
4096, /* 4096 sprites */
4, /* 4 bits per pixel */
{ 0*0x20000*8, 1*0x20000*8, 2*0x20000*8, 3*0x20000*8 },
{ 0, 1, 2, 3, 4, 5, 6, 7,
16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7},
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
32*8 /* every sprite takes 32 consecutive bytes */
};
static const gfx_layout weststry_spritelayout = static const gfx_layout weststry_spritelayout =
{ {
16,16, /* 16*16 sprites */ 16,16, /* 16*16 sprites */
8192, /* 8192 sprites */ RGN_FRAC(1,4), /* 8192 sprites */
4, /* 4 bits per pixel */ 4, /* 4 bits per pixel */
{ 0*0x40000*8, 1*0x40000*8, 2*0x40000*8, 3*0x40000*8 }, { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
{ 0, 1, 2, 3, 4, 5, 6, 7, { 0, 1, 2, 3, 4, 5, 6, 7,
16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 }, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
@ -446,16 +418,16 @@ static const gfx_layout weststry_spritelayout =
static GFXDECODE_START( bloodbro ) static GFXDECODE_START( bloodbro )
GFXDECODE_ENTRY( "gfx1", 0x00000, textlayout, 0x70*16, 0x10 ) /* Text */ GFXDECODE_ENTRY( "gfx1", 0x00000, textlayout, 0x70*16, 0x10 ) /* Text */
GFXDECODE_ENTRY( "gfx2", 0x00000, backlayout, 0x40*16, 0x10 ) /* Background */ GFXDECODE_ENTRY( "gfx2", 0x00000, spritelayout, 0x40*16, 0x10 ) /* Background */
GFXDECODE_ENTRY( "gfx2", 0x80000, backlayout, 0x50*16, 0x10 ) /* Foreground */ GFXDECODE_ENTRY( "gfx2", 0x00000, spritelayout, 0x50*16, 0x10 ) /* Foreground */
GFXDECODE_ENTRY( "gfx3", 0x00000, spritelayout, 0x00*16, 0x10 ) /* Sprites */ GFXDECODE_ENTRY( "gfx3", 0x00000, spritelayout, 0x00*16, 0x10 ) /* Sprites */
GFXDECODE_END GFXDECODE_END
static GFXDECODE_START( weststry ) static GFXDECODE_START( weststry )
GFXDECODE_ENTRY( "gfx1", 0x00000, weststry_textlayout, 16*16, 0x10 ) GFXDECODE_ENTRY( "gfx1", 0x00000, weststry_textlayout, 0x10*16, 0x10 )
GFXDECODE_ENTRY( "gfx2", 0x00000, weststry_backlayout, 48*16, 0x10 ) GFXDECODE_ENTRY( "gfx2", 0x00000, weststry_spritelayout, 0x30*16, 0x10 )
GFXDECODE_ENTRY( "gfx2", 0x80000, weststry_backlayout, 32*16, 0x10 ) GFXDECODE_ENTRY( "gfx2", 0x00000, weststry_spritelayout, 0x20*16, 0x10 )
GFXDECODE_ENTRY( "gfx3", 0x00000, weststry_spritelayout, 0*16, 0x10 ) GFXDECODE_ENTRY( "gfx3", 0x00000, weststry_spritelayout, 0x00*16, 0x10 )
GFXDECODE_END GFXDECODE_END
@ -605,29 +577,29 @@ ROM_START( weststry )
ROM_CONTINUE( 0x010000, 0x08000 ) ROM_CONTINUE( 0x010000, 0x08000 )
ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 ) ROM_COPY( "audiocpu", 0, 0x018000, 0x08000 )
ROM_REGION( 0x20000, "gfx1", 0 ) ROM_REGION( 0x20000, "gfx1", 0 ) // first half of these is blank
ROM_LOAD( "ws09.bin", 0x00000, 0x08000, CRC(f05b2b3e) SHA1(6570d795d68655ace9668f32dc0bf5c2d2372411) ) /* characters */ ROM_LOAD( "ws09.bin", 0x00000, 0x08000, CRC(f05b2b3e) SHA1(6570d795d68655ace9668f32dc0bf5c2d2372411) ) /* characters */
ROM_CONTINUE( 0x00000, 0x8000 ) ROM_CONTINUE( 0x00000, 0x08000 )
ROM_LOAD( "ws11.bin", 0x08000, 0x08000, CRC(2b10e3d2) SHA1(0f5045615b44e2300745fd3afac7f1441352cca5) ) ROM_LOAD( "ws11.bin", 0x08000, 0x08000, CRC(2b10e3d2) SHA1(0f5045615b44e2300745fd3afac7f1441352cca5) )
ROM_CONTINUE( 0x08000, 0x8000 ) ROM_CONTINUE( 0x08000, 0x08000 )
ROM_LOAD( "ws10.bin", 0x10000, 0x08000, CRC(efdf7c82) SHA1(65392697f56473cfe90d9733b9c49f2da6f9b7e6) ) ROM_LOAD( "ws10.bin", 0x10000, 0x08000, CRC(efdf7c82) SHA1(65392697f56473cfe90d9733b9c49f2da6f9b7e6) )
ROM_CONTINUE( 0x10000, 0x8000 ) ROM_CONTINUE( 0x10000, 0x08000 )
ROM_LOAD( "ws12.bin", 0x18000, 0x08000, CRC(af993578) SHA1(b250b562deeab3bb2c79002e5e1f0b6e17986848) ) ROM_LOAD( "ws12.bin", 0x18000, 0x08000, CRC(af993578) SHA1(b250b562deeab3bb2c79002e5e1f0b6e17986848) )
ROM_CONTINUE( 0x18000, 0x8000 ) ROM_CONTINUE( 0x18000, 0x08000 )
ROM_REGION( 0x100000, "gfx2", 0 ) ROM_REGION( 0x100000, "gfx2", 0 )
ROM_LOAD( "ws05.bin", 0x00000, 0x20000, CRC(007c8dc0) SHA1(f44576da3b89d6a889fdb564825ac6ce3bb4cffe) ) /* Background */ ROM_LOAD( "ws01.bin", 0x20000, 0x20000, CRC(32bda4bc) SHA1(ed0c0740c7af513b341b2b7ff3e0bf6045e930e9) ) /* Foreground */
ROM_LOAD( "ws07.bin", 0x20000, 0x20000, CRC(0f0c8d9a) SHA1(f5fe9b5ee4c8ffd7caf5313d13fb5f6e181ed9b6) ) ROM_LOAD( "ws03.bin", 0x60000, 0x20000, CRC(046b51f8) SHA1(25af752caebdec762582fc0130cf14546110bb54) )
ROM_LOAD( "ws06.bin", 0x40000, 0x20000, CRC(459d075e) SHA1(24cd0bffe7c5bbccf653ced0b73579059603d187) ) ROM_LOAD( "ws02.bin", 0xa0000, 0x20000, CRC(ed9d682e) SHA1(0f79ea09a7af367d175081f72f2bc94f6caad463) )
ROM_LOAD( "ws08.bin", 0x60000, 0x20000, CRC(4d6783b3) SHA1(9870fe9570afeff179b6080581fd6bb187898ff0) )
ROM_LOAD( "ws01.bin", 0x80000, 0x20000, CRC(32bda4bc) SHA1(ed0c0740c7af513b341b2b7ff3e0bf6045e930e9) ) /* Foreground */
ROM_LOAD( "ws03.bin", 0xa0000, 0x20000, CRC(046b51f8) SHA1(25af752caebdec762582fc0130cf14546110bb54) )
ROM_LOAD( "ws02.bin", 0xc0000, 0x20000, CRC(ed9d682e) SHA1(0f79ea09a7af367d175081f72f2bc94f6caad463) )
ROM_LOAD( "ws04.bin", 0xe0000, 0x20000, CRC(75f082e5) SHA1(b29f09a3cc9a0ac3f982be3981f5e895050c49e8) ) ROM_LOAD( "ws04.bin", 0xe0000, 0x20000, CRC(75f082e5) SHA1(b29f09a3cc9a0ac3f982be3981f5e895050c49e8) )
ROM_LOAD( "ws05.bin", 0x00000, 0x20000, CRC(007c8dc0) SHA1(f44576da3b89d6a889fdb564825ac6ce3bb4cffe) ) /* Background */
ROM_LOAD( "ws07.bin", 0x40000, 0x20000, CRC(0f0c8d9a) SHA1(f5fe9b5ee4c8ffd7caf5313d13fb5f6e181ed9b6) )
ROM_LOAD( "ws06.bin", 0x80000, 0x20000, CRC(459d075e) SHA1(24cd0bffe7c5bbccf653ced0b73579059603d187) )
ROM_LOAD( "ws08.bin", 0xc0000, 0x20000, CRC(4d6783b3) SHA1(9870fe9570afeff179b6080581fd6bb187898ff0) )
ROM_REGION( 0x100000, "gfx3", 0 ) ROM_REGION( 0x100000, "gfx3", ROMREGION_INVERT )
ROM_LOAD( "ws25.bin", 0x00000, 0x20000, CRC(8092e8e9) SHA1(eabe58ac0f88234b0dddf361f56aad509a83012e) ) /* sprites */ ROM_LOAD( "ws25.bin", 0x00000, 0x20000, BAD_DUMP CRC(8092e8e9) SHA1(eabe58ac0f88234b0dddf361f56aad509a83012e) ) /* sprites */
ROM_LOAD( "ws26.bin", 0x20000, 0x20000, CRC(f6a1f42c) SHA1(6d5503e1a9b00104970292d22301ed28893c5223) ) ROM_LOAD( "ws26.bin", 0x20000, 0x20000, BAD_DUMP CRC(f6a1f42c) SHA1(6d5503e1a9b00104970292d22301ed28893c5223) )
ROM_LOAD( "ws23.bin", 0x40000, 0x20000, CRC(43d58e24) SHA1(99e255faa9716d9102a1223419084fc209ab4024) ) ROM_LOAD( "ws23.bin", 0x40000, 0x20000, CRC(43d58e24) SHA1(99e255faa9716d9102a1223419084fc209ab4024) )
ROM_LOAD( "ws24.bin", 0x60000, 0x20000, CRC(20a867ea) SHA1(d3985002931fd4180fc541d61a94371871f3709d) ) ROM_LOAD( "ws24.bin", 0x60000, 0x20000, CRC(20a867ea) SHA1(d3985002931fd4180fc541d61a94371871f3709d) )
ROM_LOAD( "ws21.bin", 0x80000, 0x20000, CRC(e23d7296) SHA1(33bbced960be22efc7d2681e06a27feba09e0fc0) ) ROM_LOAD( "ws21.bin", 0x80000, 0x20000, CRC(e23d7296) SHA1(33bbced960be22efc7d2681e06a27feba09e0fc0) )
@ -665,23 +637,11 @@ ROM_START( skysmash )
ROM_LOAD( "rom1", 0x00000, 0x20000, CRC(e69986f6) SHA1(de38bf2d5638cb40740882e1abccf7928e43a5a6) ) ROM_LOAD( "rom1", 0x00000, 0x20000, CRC(e69986f6) SHA1(de38bf2d5638cb40740882e1abccf7928e43a5a6) )
ROM_END ROM_END
/* Driver Initialization */
static DRIVER_INIT( weststry )
{
UINT8 *gfx = memory_region(machine, "gfx3");
int len = memory_region_length(machine, "gfx3");
int i;
// invert sprite data
for (i = 0; i < len; i++)
gfx[i] = ~gfx[i];
}
/* Game Drivers */ /* Game Drivers */
GAME( 1990, bloodbro, 0, bloodbro, bloodbro, 0, ROT0, "Tad", "Blood Bros. (set 1)", GAME_NO_COCKTAIL ) GAME( 1990, bloodbro, 0, bloodbro, bloodbro, 0, ROT0, "Tad", "Blood Bros. (set 1)", GAME_NO_COCKTAIL )
GAME( 1990, bloodbroa,bloodbro, bloodbro, bloodbro, 0, ROT0, "Tad", "Blood Bros. (set 2)", GAME_NO_COCKTAIL ) GAME( 1990, bloodbroa,bloodbro, bloodbro, bloodbro, 0, ROT0, "Tad", "Blood Bros. (set 2)", GAME_NO_COCKTAIL )
GAME( 1990, bloodbrob,bloodbro, bloodbro, bloodbro, 0, ROT0, "Tad", "Blood Bros. (set 3)", GAME_NO_COCKTAIL ) GAME( 1990, bloodbrob,bloodbro, bloodbro, bloodbro, 0, ROT0, "Tad", "Blood Bros. (set 3)", GAME_NO_COCKTAIL )
GAME( 1990, weststry, bloodbro, weststry, weststry, weststry, ROT0, "bootleg", "West Story", GAME_NO_COCKTAIL | GAME_NO_SOUND ) GAME( 1990, weststry, bloodbro, weststry, weststry, 0, ROT0, "[Tad] (Datsu bootleg)", "West Story (bootleg of Blood Bros.)", GAME_NO_COCKTAIL | GAME_NO_SOUND )
GAME( 1990, skysmash, 0, skysmash, skysmash, 0, ROT270, "Nihon System", "Sky Smasher", 0 ) GAME( 1990, skysmash, 0, skysmash, skysmash, 0, ROT270, "Nihon System", "Sky Smasher", 0 )

View File

@ -25,7 +25,7 @@ static TILE_GET_INFO( get_bg_tile_info )
SET_TILE_INFO( SET_TILE_INFO(
1, 1,
code & 0xfff, code & 0xfff,
code >> 12, (code >> 12),
0); 0);
} }
@ -34,8 +34,8 @@ static TILE_GET_INFO( get_fg_tile_info )
int code = bloodbro_fgvideoram[tile_index]; int code = bloodbro_fgvideoram[tile_index];
SET_TILE_INFO( SET_TILE_INFO(
2, 2,
code & 0xfff, (code & 0xfff)+0x1000,
code >> 12, (code >> 12),
0); 0);
} }