summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
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
commit471f4f9216e47d1a5372cf4999c58c51df1e4c6a (patch)
tree018f07832a1f8a9864dfe379d641880bf22ad237 /src/mame
parent145186f9f880e4d77cbb716f1efb3b5269d3baf6 (diff)
Improved the graphics in Pro Soccer.
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/liberate.c75
-rw-r--r--src/mame/video/liberate.c57
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;
}