diff options
Diffstat (limited to 'src/devices/bus/hp_dio/hp98543.cpp')
-rw-r--r-- | src/devices/bus/hp_dio/hp98543.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/devices/bus/hp_dio/hp98543.cpp b/src/devices/bus/hp_dio/hp98543.cpp index 25a98439351..b43a4734e0b 100644 --- a/src/devices/bus/hp_dio/hp98543.cpp +++ b/src/devices/bus/hp_dio/hp98543.cpp @@ -154,10 +154,24 @@ WRITE16_MEMBER(dio16_98543_device::vram_w) uint32_t dio16_98543_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { + int startx[TOPCAT_COUNT], starty[TOPCAT_COUNT]; + int endx[TOPCAT_COUNT], endy[TOPCAT_COUNT]; + + for (int i = 0; i < TOPCAT_COUNT; i++) + m_topcat[i]->get_cursor_pos(&startx[i], &starty[i], &endx[i], &endy[i]); + for (int y = 0; y < m_v_pix; y++) { uint32_t *scanline = &bitmap.pix32(y); - for (int x = 0; x < m_h_pix; x++) - *scanline++ = m_nereid->map_color(m_vram[y * m_h_pix + x]); + + for (int x = 0; x < m_h_pix; x++) { + uint8_t tmp = m_vram[y * m_h_pix + x]; + for (int i = 0; i < TOPCAT_COUNT; i++) { + if (y >= starty[i] && y <= endy[i] && x >= startx[i] && x <= endx[i]) { + tmp |= 1 << i; + } + } + *scanline++ = m_nereid->map_color(tmp); + } } return 0; } |