Improved the graphics in Pro Soccer.

This commit is contained in:
Angelo Salese 2009-06-13 15:50:37 +00:00
parent 145186f9f8
commit 471f4f9216
2 changed files with 126 additions and 6 deletions

View File

@ -32,6 +32,7 @@ static int deco16_bank;
static UINT8 *scratchram;
WRITE8_HANDLER( deco16_io_w );
WRITE8_HANDLER( prosoccr_io_w );
WRITE8_HANDLER( prosport_paletteram_w );
WRITE8_HANDLER( liberate_videoram_w );
@ -109,6 +110,18 @@ static ADDRESS_MAP_START( liberate_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( prosoccr_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM
AM_RANGE(0x1000, 0x3fff) AM_ROM /* Mirror of main rom */
AM_RANGE(0x4000, 0x7fff) AM_READ(deco16_bank_r)
AM_RANGE(0x4000, 0x47ff) AM_WRITE(liberate_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x4800, 0x4fff) AM_WRITEONLY AM_BASE(&spriteram)
AM_RANGE(0x6200, 0x67ff) AM_RAM AM_BASE(&scratchram)
AM_RANGE(0x8000, 0x800f) AM_WRITE(prosoccr_io_w)
AM_RANGE(0x8000, 0x800f) AM_ROMBANK(1)
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( deco16_io_map, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE(deco16_bank_w)
ADDRESS_MAP_END
@ -364,6 +377,60 @@ static INPUT_PORTS_START( liberatb )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( prosoccr )
PORT_INCLUDE( generic_input )
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) //maybe reversed coins actually?
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
/*************************************
*
* Graphics definitions
@ -470,7 +537,7 @@ GFXDECODE_END
static GFXDECODE_START( prosoccr )
GFXDECODE_ENTRY( "fg_gfx", 0x00000, charlayout, 0, 4 )
GFXDECODE_ENTRY( "sp_gfx", 0x00000, sprites, 0, 4 )
GFXDECODE_ENTRY( "bg_gfx", 0x00000, prosoccr_bg_gfx, 0, 1 )
GFXDECODE_ENTRY( "bg_gfx", 0x00000, prosoccr_bg_gfx, 0, 2 )
GFXDECODE_END
/*************************************
@ -565,7 +632,7 @@ static MACHINE_DRIVER_START( prosoccr )
/* basic machine hardware */
MDRV_CPU_MODIFY("maincpu")
// MDRV_CPU_CLOCK(3000000)
MDRV_CPU_PROGRAM_MAP(liberate_map)
MDRV_CPU_PROGRAM_MAP(prosoccr_map)
MDRV_CPU_IO_MAP(deco16_io_map)
MDRV_CPU_MODIFY("audiocpu")
@ -656,7 +723,7 @@ ROM_START( prosoccr )
ROM_REGION(0x04000, "user1", 0 )
ROM_LOAD( "am05.d12", 0x0000, 0x2000, CRC(f63e5a73) SHA1(50e7a1a0eb3bf8df3264bcba441c5fbd7dec52f4) )
//ROM_RELOAD( 0x2000, 0x2000 )
ROM_COPY( "maincpu", 0x8000, 0x2000, 0x2000 )
ROM_REGION( 64, "proms", 0 )
ROM_LOAD( "k1", 0, 32, CRC(ebdc8343) SHA1(c9ae04da662f40237de24f5f01e97051e99e8c15) ) /* Colour */
@ -1085,7 +1152,7 @@ static DRIVER_INIT( liberate )
*
*************************************/
GAME( 1983, prosoccr, 0, prosoccr, liberate, prosoccr, ROT270, "Data East Corporation", "Pro Soccer", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
GAME( 1983, prosoccr, 0, prosoccr, prosoccr, prosoccr, ROT270, "Data East Corporation", "Pro Soccer", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
GAME( 1983, prosport, 0, prosport, liberate, prosport, ROT270, "Data East Corporation", "Pro. Sports", GAME_NOT_WORKING )
GAME( 1983, prosporta, prosport, prosport, liberate, prosport, ROT270, "Data East Corporation", "Pro. Sports (alternate)", GAME_NOT_WORKING )
GAME( 1983, boomrang, 0, boomrang, boomrang, prosport, ROT270, "Data East Corporation", "Boomer Rang'r / Genesis (set 1)", 0 )

View File

@ -113,6 +113,34 @@ WRITE8_HANDLER( deco16_io_w )
}
}
WRITE8_HANDLER( prosoccr_io_w )
{
deco16_io_ram[offset] = data;
if (offset > 1 && offset < 6)
tilemap_mark_all_tiles_dirty(background_tilemap);
//popmessage("%02x",deco16_io_ram[7]);
switch (offset)
{
case 6: /* unused here */
break;
case 7:
background_disable = ~data & 0x10;
//sprite_priority = (data & 0x80)>>7;
/* -x-- --xx used during gameplay */
/* x--- ---- used on the attract mode */
break;
case 8: /* Irq ack */
cputag_set_input_line(space->machine, "maincpu", DECO16_IRQ_LINE, CLEAR_LINE);
break;
case 9: /* Sound */
soundlatch_w(space, 0, data);
cputag_set_input_line(space->machine, "audiocpu", M6502_IRQ_LINE, HOLD_LINE);
break;
}
}
WRITE8_HANDLER( liberate_videoram_w )
{
videoram[offset] = data;
@ -191,7 +219,7 @@ static void liberate_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
int offs;
/* Sprites */
for (offs = 0;offs < 0x800;offs += 4)
for (offs = 0x400;offs < 0x800;offs += 4)
{
int multi,fx,fy,sx,sy,sy2,code,color;
@ -369,6 +397,29 @@ static void boomrang_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
}
}
static void prosoccr_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
int offs,code,fx,fy,sx,sy;
for (offs = 0x400;offs < 0x800;offs += 4)
{
if ((spriteram[offs+0]&1)!=1) continue;
code = spriteram[offs+1];
sy = 240 - spriteram[offs+2];
sx = 240 - spriteram[offs+3];
fx = spriteram[offs+0] & 4;
fy = spriteram[offs+0] & 2;
drawgfx(bitmap,machine->gfx[1],
code,
0,
fx,fy,
sx,sy,
cliprect,TRANSPARENCY_PEN,0);
}
}
/***************************************************************************/
VIDEO_UPDATE( prosoccr )
@ -380,8 +431,10 @@ VIDEO_UPDATE( prosoccr )
bitmap_fill(bitmap,cliprect,32);
else
tilemap_draw(bitmap,cliprect,background_tilemap,0,0);
boomrang_draw_sprites(screen->machine,bitmap,cliprect,0);
tilemap_draw(bitmap,cliprect,fix_tilemap,0,0);
prosoccr_draw_sprites(screen->machine,bitmap,cliprect);
return 0;
}