diff options
Diffstat (limited to 'src/mame/video/xavix.cpp')
-rw-r--r-- | src/mame/video/xavix.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/mame/video/xavix.cpp b/src/mame/video/xavix.cpp index cbc9e9f9daf..17a0d848b9d 100644 --- a/src/mame/video/xavix.cpp +++ b/src/mame/video/xavix.cpp @@ -583,28 +583,36 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_ind16 &bitmap, xpos += 128 - 8; + int bpp = 1; + + bpp = (attr0 & 0x0e) >> 1; + bpp += 1; + // Everything except directdirect addressing (Addressing Mode 2) goes through the segment registers? if (alt_addressing != 0) { + int basereg = 0; + // tile based addressing takes into account tile size (and bpp?) if (alt_addressing == 1) - tile = (tile * drawheight * drawwidth) / 2; + { + tile = (tile * drawheight * drawwidth * bpp) / 8; + basereg = 0; // always uses segment register 0 in tile addressing mode? + } + else + { + // 8-byte alignment Addressing Mode uses a fixed offset? + if (alt_addressing == 2) + tile = tile * 8; - // 8-byte alignment Addressing Mode uses a fixed offset? - if (alt_addressing == 2) - tile = tile * 8; + basereg = (tile & 0xf0000) >> 16; + tile &= 0xffff; + } - int basereg = (tile & 0xf0000) >> 16; - tile &= 0xffff; int gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8); tile += gfxbase; } - int bpp = 1; - - bpp = (attr0 & 0x0e) >> 1; - bpp += 1; - draw_tile_line(screen, bitmap, cliprect, tile, bpp, xpos + xpos_adjust, line, drawheight, drawwidth, flipx, flipy, pal, zval, drawline); /* |