mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
mc6845: address cursor display edge case in interlaced mode.
It appears that the cursor is not displayed when the start raster address is equal to the maximum raster address in the 'interlace and video' mode. At least this addresses a claimed regression in the 'apricot' machine. To be explore further on hardware. The maximum raster address was also off by one in these calculations.
This commit is contained in:
parent
cbb3262e2a
commit
70f62a1c07
@ -705,7 +705,7 @@ bool mc6845_device::check_cursor_visible(uint16_t ra, uint16_t line_addr)
|
||||
}
|
||||
|
||||
uint16_t cursor_start_ras = m_cursor_start_ras & 0x1f;
|
||||
uint16_t max_ras_addr = m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust);
|
||||
uint16_t max_ras_addr = m_max_ras_addr + (MODE_INTERLACE_AND_VIDEO ? m_interlace_adjust : m_noninterlace_adjust) - 1;
|
||||
|
||||
if (cursor_start_ras > max_ras_addr)
|
||||
{
|
||||
@ -713,6 +713,14 @@ bool mc6845_device::check_cursor_visible(uint16_t ra, uint16_t line_addr)
|
||||
return false;
|
||||
}
|
||||
|
||||
// See the 'apricot' boot screen, it probably expects no cursor.
|
||||
// TODO explore the edge cases in the 'interlace and video' mode.
|
||||
if (MODE_INTERLACE_AND_VIDEO && cursor_start_ras >= max_ras_addr)
|
||||
{
|
||||
// No cursor possible.
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cursor_start_ras <= m_cursor_end_ras)
|
||||
{
|
||||
if (m_cursor_end_ras > max_ras_addr)
|
||||
|
Loading…
Reference in New Issue
Block a user