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:
68bit 2019-08-29 14:28:12 +10:00
parent cbb3262e2a
commit 70f62a1c07

View File

@ -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)