diff options
author | Angelo Salese <angelosa@users.noreply.github.com> | 2009-06-13 15:50:37 +0000 |
---|---|---|
committer | Angelo Salese <angelosa@users.noreply.github.com> | 2009-06-13 15:50:37 +0000 |
commit | 471f4f9216e47d1a5372cf4999c58c51df1e4c6a (patch) | |
tree | 018f07832a1f8a9864dfe379d641880bf22ad237 /src/mame | |
parent | 145186f9f880e4d77cbb716f1efb3b5269d3baf6 (diff) |
Improved the graphics in Pro Soccer.
Diffstat (limited to 'src/mame')
-rw-r--r-- | src/mame/drivers/liberate.c | 75 | ||||
-rw-r--r-- | src/mame/video/liberate.c | 57 |
2 files changed, 126 insertions, 6 deletions
diff --git a/src/mame/drivers/liberate.c b/src/mame/drivers/liberate.c index 9e5f6dece9a..5a35e44ce08 100644 --- a/src/mame/drivers/liberate.c +++ b/src/mame/drivers/liberate.c @@ -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 ) diff --git a/src/mame/video/liberate.c b/src/mame/video/liberate.c index 7398856f19c..568c1ab485d 100644 --- a/src/mame/video/liberate.c +++ b/src/mame/video/liberate.c @@ -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; } |