mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
tv990: cursor fix
The addresses of the rows in the vram do not increase monotonically with the screen scan lines and the cursor address appears to follow these addresses so the cursor row can not be computed from the address. Rather compute the cursor column from the difference of the cursor address offset and the address off of the start of the row, and implicitly match the rows when comparing the columns. This might not be perfect, but it is a big improvement and no issues have been spotted.
This commit is contained in:
parent
da07c8901b
commit
684a8374d1
1 changed files with 5 additions and 3 deletions
|
@ -219,13 +219,16 @@ uint32_t tv990_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||||
if((y < starty) || (y >= endy))
|
if((y < starty) || (y >= endy))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
curchar = &vram[tvi1111_regs[i + 0x50]];
|
uint16_t row_offset = tvi1111_regs[i + 0x50];
|
||||||
|
curchar = &vram[row_offset];
|
||||||
int minx = tvi1111_regs[i + 0x30] >> 8;
|
int minx = tvi1111_regs[i + 0x30] >> 8;
|
||||||
int maxx = tvi1111_regs[i + 0x30] & 0xff;
|
int maxx = tvi1111_regs[i + 0x30] & 0xff;
|
||||||
|
|
||||||
if(maxx > m_width)
|
if(maxx > m_width)
|
||||||
maxx = m_width;
|
maxx = m_width;
|
||||||
|
|
||||||
|
uint16_t cursor_x = tvi1111_regs[0x16] - row_offset;
|
||||||
|
|
||||||
for (x = minx; x < maxx; x++)
|
for (x = minx; x < maxx; x++)
|
||||||
{
|
{
|
||||||
uint8_t chr = curchar[x - minx] >> 8;
|
uint8_t chr = curchar[x - minx] >> 8;
|
||||||
|
@ -237,8 +240,7 @@ uint32_t tv990_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||||
|
|
||||||
uint32_t palette[2];
|
uint32_t palette[2];
|
||||||
|
|
||||||
int cursor_pos = tvi1111_regs[0x16] + 133;
|
if (BIT(tvi1111_regs[0x1b], 0) && x == cursor_x)
|
||||||
if(BIT(tvi1111_regs[0x1b], 0) && (x == (cursor_pos % 134)) && (y == (cursor_pos / 134)))
|
|
||||||
{
|
{
|
||||||
uint8_t attrchg;
|
uint8_t attrchg;
|
||||||
if(tvi1111_regs[0x15] & 0xff00) // what does this really mean? it looks like a mask but that doesn't work in 8line char mode
|
if(tvi1111_regs[0x15] & 0xff00) // what does this really mean? it looks like a mask but that doesn't work in 8line char mode
|
||||||
|
|
Loading…
Reference in a new issue