summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/xavix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/xavix.cpp')
-rw-r--r--src/mame/drivers/xavix.cpp63
1 files changed, 43 insertions, 20 deletions
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index 821f8f9759c..ab1ae848e40 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -366,29 +366,53 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
uint8_t* tileregs;
address_space& mainspace = m_maincpu->space(AS_PROGRAM);
- // all this is likely controlled by tilemap registers
if (which == 0)
{
tileregs = m_tmap1_regs;
- ydimension = 16;
- xdimension = 16;
- ytilesize = 16;
- xtilesize = 16;
- offset_multiplier = 32;
opaque = 1;
}
else
{
tileregs = m_tmap2_regs;
+ opaque = 0;
+ }
+
+ //printf("draw tilemap %d, regs base0 %02x base1 %02x base2 %02x tilesize,bpp %02x scrollx %02x scrolly %02x pal %02x mode %02x\n", which, tileregs[0x0], tileregs[0x1], tileregs[0x2], tileregs[0x3], tileregs[0x4], tileregs[0x5], tileregs[0x6], tileregs[0x7]);
+
+ switch (tileregs[0x3] & 0x30)
+ {
+ case 0x00:
ydimension = 32;
xdimension = 32;
ytilesize = 8;
xtilesize = 8;
- offset_multiplier = 8;
- opaque = 0;
+ break;
+
+ case 0x10:
+ ydimension = 32;
+ xdimension = 16;
+ ytilesize = 8;
+ xtilesize = 16;
+ break;
+
+ case 0x20: // guess
+ ydimension = 16;
+ xdimension = 32;
+ ytilesize = 16;
+ xtilesize = 8;
+ break;
+
+ case 0x30:
+ ydimension = 16;
+ xdimension = 16;
+ ytilesize = 16;
+ xtilesize = 16;
+ break;
}
- if (tileregs[0x7] & 0x02)
+ offset_multiplier = (ytilesize * xtilesize)/8;
+
+ if (tileregs[0x7] & 0x10)
alt_tileaddressing = 1;
else
alt_tileaddressing = 0;
@@ -396,7 +420,7 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
if (tileregs[0x7] & 0x80)
{
// there's a tilemap register to specify base in main ram, although in the monster truck test mode it points to an unmapped region
- // and expected a fixed layout, still need to handle that.
+ // and expected a fixed layout, we handle that in the memory map at the moment
int count;
count = 0;// ;
@@ -408,9 +432,9 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
int tile = 0;
// the register being 0 probably isn't the condition here
- if (tileregs[0x0] != 0x00) tile |= mainspace.read_byte((tileregs[0x0]<<8)+count);
- if (tileregs[0x1] != 0x00) tile |= mainspace.read_byte((tileregs[0x1]<<8)+count) << 8;
- if (tileregs[0x2] != 0x00) tile |= mainspace.read_byte((tileregs[0x2]<<8)+count) << 16;
+ if (tileregs[0x0] != 0x00) tile |= mainspace.read_byte((tileregs[0x0] << 8) + count);
+ if (tileregs[0x1] != 0x00) tile |= mainspace.read_byte((tileregs[0x1] << 8) + count) << 8;
+ if (tileregs[0x2] != 0x00) tile |= mainspace.read_byte((tileregs[0x2] << 8) + count) << 16;
count++;
@@ -533,10 +557,10 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
if (test == 1) pal = machine().rand() & 0xf;
- draw_tile(screen, bitmap, cliprect, tile, bpp, (x * xtilesize) + scrollx, ((y * ytilesize) - 16) - scrolly, xtilesize, ytilesize, flipx, flipy, pal, opaque);
- draw_tile(screen, bitmap, cliprect, tile, bpp, (x * xtilesize) + scrollx, (((y * ytilesize) - 16) - scrolly) + 256, xtilesize, ytilesize, flipx, flipy, pal, opaque); // wrap-y
- draw_tile(screen, bitmap, cliprect, tile, bpp, ((x * xtilesize) + scrollx) - 256, ((y * ytilesize) - 16) - scrolly, xtilesize, ytilesize, flipx, flipy, pal, opaque); // wrap-x
- draw_tile(screen, bitmap, cliprect, tile, bpp, ((x * xtilesize) + scrollx) - 256, (((y * ytilesize) - 16) - scrolly) + 256, xtilesize, ytilesize, flipx, flipy, pal, opaque); // wrap-y and x
+ draw_tile(screen, bitmap, cliprect, tile, bpp, (x * xtilesize) + scrollx, ((y * ytilesize) - 16) - scrolly, ytilesize, xtilesize, flipx, flipy, pal, opaque);
+ draw_tile(screen, bitmap, cliprect, tile, bpp, (x * xtilesize) + scrollx, (((y * ytilesize) - 16) - scrolly) + 256, ytilesize, xtilesize, flipx, flipy, pal, opaque); // wrap-y
+ draw_tile(screen, bitmap, cliprect, tile, bpp, ((x * xtilesize) + scrollx) - 256, ((y * ytilesize) - 16) - scrolly, ytilesize, xtilesize, flipx, flipy, pal, opaque); // wrap-x
+ draw_tile(screen, bitmap, cliprect, tile, bpp, ((x * xtilesize) + scrollx) - 256, (((y * ytilesize) - 16) - scrolly) + 256, ytilesize, xtilesize, flipx, flipy, pal, opaque); // wrap-y and x
}
}
}
@@ -1192,7 +1216,7 @@ WRITE8_MEMBER(xavix_state::tmap1_regs_w)
0x2 pointer to tile highest tile bits (if needed, depends on mode) (usually straight after the ram needed for above)
- 0x3 ---- bbb- - = ? b = bpp (0x36 xavix logo, 0x3c title screen, 0x36 course select)
+ 0x3 --tt bbb- - = ? tt = tile/tilemap size b = bpp (0x36 xavix logo, 0x3c title screen, 0x36 course select)
0x4 and 0x5 are scroll
@@ -1803,8 +1827,7 @@ ROM_END
ROM_START( ttv_sw )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
- // wasn't giving consistent reads
- ROM_LOAD( "jedibad.bin", 0x000000, 0x800000, BAD_DUMP CRC(a12862fe) SHA1(9b5a07bdf35f72f2e2d127de5e6849ce5fa2afa0) )
+ ROM_LOAD( "jedi.bin", 0x000000, 0x800000, CRC(51cae5fd) SHA1(1ed8d556f31b4182259ca8c766d60c824d8d9744) )
ROM_END