summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2009-06-13 19:47:05 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2009-06-13 19:47:05 +0000
commit48324c75dd53d8f92eeb5df60a2c0b387ee935f0 (patch)
tree38c16b645d7ebcb434a92267dd71e7df21a84b43 /src
parent1c07ac88cc4e4910e5b4d40c0332bc6c35150b8b (diff)
Realized that Pro Soccer actually uses dynamic tiles for the foreground tilemap, hooked it up properly (still some issues)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/liberate.c124
-rw-r--r--src/mame/video/liberate.c4
2 files changed, 76 insertions, 52 deletions
diff --git a/src/mame/drivers/liberate.c b/src/mame/drivers/liberate.c
index 5a35e44ce08..5685a9a775b 100644
--- a/src/mame/drivers/liberate.c
+++ b/src/mame/drivers/liberate.c
@@ -30,6 +30,7 @@ VIDEO_START( liberate );
static int deco16_bank;
static UINT8 *scratchram;
+UINT8 *prosoccr_charram;
WRITE8_HANDLER( deco16_io_w );
WRITE8_HANDLER( prosoccr_io_w );
@@ -82,6 +83,66 @@ static WRITE8_HANDLER( deco16_bank_w )
memory_install_read8_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0x800f, 0, 0, (read8_space_func)SMH_BANK(1));
}
+static UINT8 char_bank;
+
+static READ8_HANDLER( prosoccr_charram_r )
+{
+ return prosoccr_charram[offset+char_bank*0x1800];
+}
+
+static WRITE8_HANDLER( prosoccr_charram_w )
+{
+ UINT8 *FG_GFX = memory_region(space->machine, "fg_gfx");
+
+ if(deco16_bank)
+ {
+ prosoccr_io_w(space,offset & 0xf,data);
+ }
+ else
+ {
+ prosoccr_charram[offset+char_bank*0x1800] = data;
+
+ switch(offset & 0x1800)
+ {
+ case 0x0000:
+ FG_GFX[(offset & 0x7ff)+(0x0000)+0x0000] = data;
+ break;
+ case 0x0800:
+ FG_GFX[(offset & 0x7ff)+(0x0000)+0x2000] = data;
+ break;
+ case 0x1000:
+ FG_GFX[(offset & 0x7ff)+(0x0000)+0x4000] = data;
+ break;
+ }
+ }
+
+ offset&=0x7ff;
+
+ /* dirty char */
+ gfx_element_mark_dirty(space->machine->gfx[0], offset >> 3);
+ gfx_element_mark_dirty(space->machine->gfx[0], (offset|0x1800) >> 3);
+
+}
+
+static WRITE8_HANDLER( prosoccr_char_bank_w )
+{
+ /* TODO: what banks this? */
+ char_bank = data & 1;
+ if(data & 0xfe)
+ printf("%02x\n",data);
+}
+
+static WRITE8_HANDLER( prosoccr_io_bank_w )
+{
+ deco16_bank = data & 1;
+
+ if (deco16_bank)
+ memory_install_read8_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0x800f, 0, 0, deco16_io_r);
+ else
+ memory_install_read8_handler(cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0x800f, 0, 0, prosoccr_charram_r);
+
+}
+
/*************************************
*
* Memory handlers
@@ -117,15 +178,19 @@ static ADDRESS_MAP_START( prosoccr_map, ADDRESS_SPACE_PROGRAM, 8 )
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
+ AM_RANGE(0x8000, 0x97ff) AM_READWRITE(prosoccr_charram_r,prosoccr_charram_w)
+ AM_RANGE(0x9800, 0x9800) AM_WRITE(prosoccr_char_bank_w)
+ AM_RANGE(0xa000, 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
+static ADDRESS_MAP_START( prosoccr_io_map, ADDRESS_SPACE_IO, 8 )
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE(prosoccr_io_bank_w)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( liberatb_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x00fe, 0x00fe) AM_READ_PORT("IN0")
AM_RANGE(0x0000, 0x0fff) AM_RAM
@@ -633,7 +698,7 @@ static MACHINE_DRIVER_START( prosoccr )
MDRV_CPU_MODIFY("maincpu")
// MDRV_CPU_CLOCK(3000000)
MDRV_CPU_PROGRAM_MAP(prosoccr_map)
- MDRV_CPU_IO_MAP(deco16_io_map)
+ MDRV_CPU_IO_MAP(prosoccr_io_map)
MDRV_CPU_MODIFY("audiocpu")
MDRV_CPU_PROGRAM_MAP(prosoccr_sound_map)
@@ -690,7 +755,6 @@ MACHINE_DRIVER_END
ROM_START( prosoccr )
ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD( "am07.7e", 0x8000, 0x2000, CRC(55415fb5) SHA1(676feb07d4fbd76aae8349b46f7edc8f357f2ddf) )
ROM_LOAD( "am08.9e", 0xa000, 0x2000, CRC(73d45d0d) SHA1(07736286087478af404bd9c6b279d631a01cf4e2) )
ROM_LOAD( "am09.10e", 0xc000, 0x2000, CRC(a7ee0b3a) SHA1(87e487f863bd90c5b979c2d3c4317869ba1d71d9) )
ROM_LOAD( "am10.11e", 0xe000, 0x2000, CRC(5571bdb8) SHA1(a3740650453c9e4f78dcc7826eb112d0d9f65b22) )
@@ -722,8 +786,8 @@ ROM_START( prosoccr )
ROM_LOAD( "am04.c10", 0x2000, 0x2000, CRC(e057d827) SHA1(81ca4351777de5c32f4cf65547287c8169ba1494) )
ROM_REGION(0x04000, "user1", 0 )
- ROM_LOAD( "am05.d12", 0x0000, 0x2000, CRC(f63e5a73) SHA1(50e7a1a0eb3bf8df3264bcba441c5fbd7dec52f4) )
- ROM_COPY( "maincpu", 0x8000, 0x2000, 0x2000 )
+ ROM_LOAD( "am05.d12", 0x0000, 0x2000, CRC(f63e5a73) SHA1(50e7a1a0eb3bf8df3264bcba441c5fbd7dec52f4) )
+ ROM_LOAD( "am07.7e", 0x2000, 0x2000, CRC(55415fb5) SHA1(676feb07d4fbd76aae8349b46f7edc8f357f2ddf) )
ROM_REGION( 64, "proms", 0 )
ROM_LOAD( "k1", 0, 32, CRC(ebdc8343) SHA1(c9ae04da662f40237de24f5f01e97051e99e8c15) ) /* Colour */
@@ -1064,58 +1128,14 @@ static DRIVER_INIT( prosoccr )
UINT8 *GFX_ROM = memory_region(machine, "shared_gfx");
int i;
- #define GFX_PAL_DESCRAMBLE(_dst_,_src_,_len_) \
- for(i=0;i<_len_*8;i++) \
- { \
- FG_ROM[i+0x0000+_dst_*8] = GFX_ROM[i+0x0000+_src_*8]; \
- FG_ROM[i+0x2000+_dst_*8] = GFX_ROM[i+0x2000+_src_*8]; \
- FG_ROM[i+0x4000+_dst_*8] = GFX_ROM[i+0x4000+_src_*8]; \
- } \
-
DRIVER_INIT_CALL(prosport);
- for(i=0x0800;i<0x2000;i++)
+ for(i=0x0000;i<0x2000;i++)
{
FG_ROM[i+0x0000] = GFX_ROM[i+0x0000];
FG_ROM[i+0x2000] = GFX_ROM[i+0x2000];
FG_ROM[i+0x4000] = GFX_ROM[i+0x4000];
}
-
- /* TODO: gfxs offsets are heavily scrambled on the foreground gfxs for protection. */
- GFX_PAL_DESCRAMBLE(0x000,0x370,0x10);
- GFX_PAL_DESCRAMBLE(0x010,0x390,0x10);
-
- GFX_PAL_DESCRAMBLE(0x021,0x070,0x02); //*
- GFX_PAL_DESCRAMBLE(0x024,0x078,0x02);
- GFX_PAL_DESCRAMBLE(0x027,0x028,0x02);
- GFX_PAL_DESCRAMBLE(0x02a,0x230,0x02); //*
- GFX_PAL_DESCRAMBLE(0x02d,0x238,0x02); //*
-
- GFX_PAL_DESCRAMBLE(0x041,0x072,0x02); //*
- GFX_PAL_DESCRAMBLE(0x044,0x07a,0x02);
- GFX_PAL_DESCRAMBLE(0x047,0x02a,0x02);
- GFX_PAL_DESCRAMBLE(0x04a,0x232,0x02); //*
- GFX_PAL_DESCRAMBLE(0x04d,0x23a,0x02); //*
-
- GFX_PAL_DESCRAMBLE(0x061,0x074,0x02); //*
- GFX_PAL_DESCRAMBLE(0x064,0x07c,0x02);
- GFX_PAL_DESCRAMBLE(0x067,0x02c,0x02);
- GFX_PAL_DESCRAMBLE(0x06a,0x234,0x02); //*
- GFX_PAL_DESCRAMBLE(0x06d,0x23c,0x02); //*
-
- GFX_PAL_DESCRAMBLE(0x081,0x076,0x02); //*
- GFX_PAL_DESCRAMBLE(0x084,0x07e,0x02);
- GFX_PAL_DESCRAMBLE(0x087,0x02e,0x02);
- GFX_PAL_DESCRAMBLE(0x08a,0x236,0x02); //*
- GFX_PAL_DESCRAMBLE(0x08d,0x23e,0x02); //*
-
- GFX_PAL_DESCRAMBLE(0x038,0x3b0,0x08);
- GFX_PAL_DESCRAMBLE(0x058,0x3b8,0x08);
-
- GFX_PAL_DESCRAMBLE(0x070,0x3d0,0x10);
- GFX_PAL_DESCRAMBLE(0x090,0x3f0,0x10);
-
- #undef GFX_PAL_DESCRAMBLE
}
static DRIVER_INIT( yellowcb )
diff --git a/src/mame/video/liberate.c b/src/mame/video/liberate.c
index 568c1ab485d..ee5b6ebb0fb 100644
--- a/src/mame/video/liberate.c
+++ b/src/mame/video/liberate.c
@@ -15,6 +15,7 @@
static int background_color, background_disable;
static tilemap *background_tilemap, *fix_tilemap;
static UINT8 deco16_io_ram[16];
+extern UINT8 *prosoccr_charram;
#if 0
void debug_print(bitmap_t *bitmap)
@@ -155,6 +156,9 @@ VIDEO_START( prosoccr )
fix_tilemap = tilemap_create(machine, get_fix_tile_info,fix_scan,8,8,32,32);
tilemap_set_transparent_pen(fix_tilemap,0);
+
+ prosoccr_charram = auto_alloc_array(machine, UINT8, 0x1800*2);
+
}
VIDEO_START( boomrang )