diff options
Diffstat (limited to 'src/devices/machine/spg_renderer.cpp')
-rw-r--r-- | src/devices/machine/spg_renderer.cpp | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/devices/machine/spg_renderer.cpp b/src/devices/machine/spg_renderer.cpp index 0bb116ef784..b1dcd7d46b8 100644 --- a/src/devices/machine/spg_renderer.cpp +++ b/src/devices/machine/spg_renderer.cpp @@ -255,7 +255,8 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang uint32_t tilemap = tilemapregs[2]; uint32_t palette_map = tilemapregs[3]; - //popmessage("draw draw_linemap bases %04x %04x\n", tilemap, palette_map); + //if (scanline == 128) + // popmessage("draw draw_linemap reg0 %04x reg1 %04x bases %04x %04x\n", tilemapregs[0], tilemapregs[1], tilemap, palette_map); //uint32_t xscroll = scrollregs[0]; uint32_t yscroll = scrollregs[1]; @@ -294,26 +295,36 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang } else { - for (int i = 0; i < 320 / 2; i++) - { - uint8_t palette_entry; - uint16_t color; - const uint16_t data = spc.read_word(sourcebase + i); + const uint32_t attr = tilemapregs[0]; + const uint8_t bpp = attr & 0x0003; + const uint32_t nc_bpp = ((bpp)+1) << 1; + uint32_t palette_offset = (attr & 0x0f00) >> 4; + palette_offset >>= nc_bpp; + palette_offset <<= nc_bpp; - palette_entry = (data & 0x00ff); - color = paletteram[palette_entry]; + uint32_t bits = 0; + uint32_t nbits = 0; - if (!(color & 0x8000)) + for (int i = 0; i < 320; i++) + { + bits <<= nc_bpp; + if (nbits < nc_bpp) { - m_linebuf[(i * 2) + 0] = color & 0x7fff; + uint16_t b = spc.read_word(sourcebase++ & 0x3fffff); + b = (b << 8) | (b >> 8); + bits |= b << (nc_bpp - nbits); + nbits += 16; } + nbits -= nc_bpp; + + uint32_t pal = palette_offset + (bits >> 16); + bits &= 0xffff; - palette_entry = (data & 0xff00) >> 8; - color = paletteram[palette_entry]; + uint16_t rgb = paletteram[pal]; - if (!(color & 0x8000)) + if (!(rgb & 0x8000)) { - m_linebuf[(i * 2) + 1] = color & 0x7fff; + m_linebuf[i] = rgb; } } } |