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;
}
}
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;
}
}
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);
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) {