From f8e40f12fee45831fb45d72a19856bf3bb87f7da Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 1 Dec 2019 18:10:47 +0200 Subject: [PATCH] Check horizontal scanline max. --- custom.cpp | 66 +++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/custom.cpp b/custom.cpp index 628f46c4..6ec64208 100644 --- a/custom.cpp +++ b/custom.cpp @@ -2048,18 +2048,20 @@ static void toscr_1 (int nbits, int fm) out_nbits += nbits; if (out_nbits == 32) { - int i; - uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; - for (i = 0; i < thisline_decision.nr_planes; i++) { - uae_u32 *dataptr32 = (uae_u32 *)dataptr; - if (*dataptr32 != outword[i]) { - thisline_changed = 1; - *dataptr32 = outword[i]; + if (out_offs < MAX_WORDS_PER_LINE / 4) { + int i; + uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; + for (i = 0; i < thisline_decision.nr_planes; i++) { + uae_u32 *dataptr32 = (uae_u32 *)dataptr; + if (*dataptr32 != outword[i]) { + thisline_changed = 1; + *dataptr32 = outword[i]; + } + outword[i] = 0; + dataptr += MAX_WORDS_PER_LINE * 2; } - outword[i] = 0; - dataptr += MAX_WORDS_PER_LINE * 2; + out_offs++; } - out_offs++; out_nbits = 0; } } @@ -2079,18 +2081,20 @@ static void toscr_1_hr(int nbits, int fm) out_nbits += nbits; if (out_nbits == 64) { - uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; - for (int i = 0; i < thisline_decision.nr_planes; i++) { - uae_u64 *dataptr64 = (uae_u64 *)dataptr; - uae_u64 v = (outword64[i] >> 32) | (outword64[i] << 32); - if (*dataptr64 != v) { - thisline_changed = 1; - *dataptr64 = v; + if (out_offs < MAX_WORDS_PER_LINE / 4 - 1) { + uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; + for (int i = 0; i < thisline_decision.nr_planes; i++) { + uae_u64 *dataptr64 = (uae_u64 *)dataptr; + uae_u64 v = (outword64[i] >> 32) | (outword64[i] << 32); + if (*dataptr64 != v) { + thisline_changed = 1; + *dataptr64 = v; + } + outword64[i] = 0; + dataptr += MAX_WORDS_PER_LINE * 2; } - outword64[i] = 0; - dataptr += MAX_WORDS_PER_LINE * 2; + out_offs += 2; } - out_offs += 2; out_nbits = 0; } } @@ -2183,15 +2187,9 @@ static int flush_plane_data_n(int fm) toscr_1(32 - out_nbits, fm); } - i += 32; - toscr_1(16, fm); - toscr_1(16, fm); - - if (fm == 2) { - /* flush AGA full 64-bit shift register + possible data in todisplay */ - i += 32; - toscr_1(16, fm); - toscr_1(16, fm); + for (int j = 0; j < (fmode == 2 ? 3 : 1); j++) { + if (out_offs >= MAX_WORDS_PER_LINE / 4 - 1) + break; i += 32; toscr_1(16, fm); toscr_1(16, fm); @@ -2214,10 +2212,12 @@ static int flush_plane_data_hr(int fm) toscr_1_hr(64 - out_nbits, fm); } - toscr_1_hr(32, fm); - i += 32; - toscr_1_hr(32, fm); - i += 32; + for (int j = 0; j < 4; j++) { + if (out_offs >= MAX_WORDS_PER_LINE / 4 - 1) + break; + toscr_1_hr(32, fm); + i += 32; + } int toshift = 32 << fm; while (i < toshift) { -- 2.47.3