summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Stefano <stefano_bodrato@hotmail.com>2016-12-15 15:34:08 +0100
committer GitHub <noreply@github.com>2016-12-15 15:34:08 +0100
commit88319825af8730eeb1786b7f6eb38c4b050c722c (patch)
treef9c5d35882d25add5031647c22a3e207b4a41b01 /src
parentd858209687431252c557ebbd48fd552fec1ff693 (diff)
Scrollup fix for the TMS9927 family
This fix will avoid to reconfigure all the CRTC parameters on any cursor shape change. This invasive "reset" procedure was resetting the scroll counter !
Diffstat (limited to 'src')
-rw-r--r--src/devices/video/tms9927.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/devices/video/tms9927.cpp b/src/devices/video/tms9927.cpp
index 4c5d038be70..2f77efb875a 100644
--- a/src/devices/video/tms9927.cpp
+++ b/src/devices/video/tms9927.cpp
@@ -21,7 +21,7 @@ static const uint8_t skew_bits_value[4] = { 0, 1, 2, 2 };
#define SCANS_PER_DATA_ROW (((m_reg[2] >> 3) & 0x0f) + 1)
#define CHARS_PER_DATA_ROW (chars_per_row_value[(m_reg[2] >> 0) & 0x07])
#define SKEW_BITS (skew_bits_value[(m_reg[3] >> 6) & 0x03])
-#define DATA_ROWS_PER_FRAME (((m_reg[3] >> 0) & 0x3f) + 1)
+#define DATA_ROWS_PER_FRAME ((m_reg[3] & 0x3f) + 1)
#define SCAN_LINES_PER_FRAME ((m_reg[4] * 2) + 256 + (((m_reg[1] >> 7) & 0x01) * 257))
#define VERTICAL_DATA_START (m_reg[5])
#define LAST_DISP_DATA_ROW (m_reg[6] & 0x3f)
@@ -179,7 +179,6 @@ void tms9927_device::generic_access(address_space &space, offs_t offset)
break;
case 0x0b: /* Up scroll */
-osd_printf_debug("Up scroll\n");
m_screen->update_now();
m_start_datarow = (m_start_datarow + 1) % DATA_ROWS_PER_FRAME;
break;
@@ -215,7 +214,9 @@ WRITE8_MEMBER( tms9927_device::write )
case 0x0d: /* LOAD CURSOR ROW ADDRESS */
osd_printf_debug("Cursor address changed\n");
m_reg[offset - 0x0c + 7] = data;
- recompute_parameters(false);
+ /* Recomputing parameters here will break the scrollup on the Attachè
+ and probably other machines due to m_start_datarow being reset ! */
+ //recompute_parameters(false);
break;
default: