From: Toni Wilen Date: Sun, 3 Oct 2021 14:03:47 +0000 (+0300) Subject: Fix mid horizontal HAM+resolution change glitch. X-Git-Tag: 4900~54 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=2cdaa36054812f371d6cb4a530ca65f74de8cd4b;p=francis%2Fwinuae.git Fix mid horizontal HAM+resolution change glitch. --- diff --git a/custom.cpp b/custom.cpp index d59c46ed..8bda5bca 100644 --- a/custom.cpp +++ b/custom.cpp @@ -3877,7 +3877,7 @@ static bool issprbrd(int hpos, uae_u16 bplcon0, uae_u16 bplcon3) static void record_register_change(int hpos, int regno, uae_u16 value) { - if (regno == 0x100) { // BPLCON0 + if (regno == 0x0100 || regno == 0x0101) { // BPLCON0 if (value & 0x800) thisline_decision.ham_seen = 1; thisline_decision.ehb_seen = isehb(value, bplcon2); @@ -6659,15 +6659,15 @@ static void BPLCON0_Denise(int hpos, uae_u16 v) return; } - bplcon0d_old = -1; // fake unused 0x0080 bit as an EHB bit (see below) if (isehb(bplcon0d, bplcon2)) { - v |= 0x80; + v |= 0x0080; } - record_register_change(hpos, 0x100, (bplcon0d & ~(0x800 | 0x400 | 0x80 | 0x01)) | (v & (0x0800 | 0x400 | 0x80 | 0x01))); + record_register_change(hpos, 0x101, v); - bplcon0d = v & ~0x80; + bplcon0d = v & ~0x0080; + bplcon0d_old = -1; #ifdef ECS_DENISE if (ecs_denise) { diff --git a/drawing.cpp b/drawing.cpp index 67a274ac..8e9f46b0 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -3108,6 +3108,12 @@ static void pfield_expand_dp_bplconx (int regno, int v, int hp, int vp) dp_for_drawing->bplres = currprefs.gfx_resolution; extblankcheck(); break; + case 0x101: // BPLCON0 partial + dp_for_drawing->bplcon0 &= ~(0x0800 | 0x0400 | 0x0080 | 0x0001); + dp_for_drawing->bplcon0 |= v & (0x0800 | 0x0400 | 0x0080 | 0x0001); + dp_for_drawing->ham_seen = isham(v); + extblankcheck(); + break; case 0x104: // BPLCON2 dp_for_drawing->bplcon2 = v; break; @@ -3497,7 +3503,14 @@ static void pfield_draw_line(struct vidbuffer *vb, int lineno, int gfx_ypos, int dp_for_drawing->bplcon4bm = b4bm; dp_for_drawing->bplcon4bm = b4sp; dp_for_drawing->fmode = fm; + dp_for_drawing->bplres = GET_RES_DENISE(dp_for_drawing->bplcon0); + dp_for_drawing->nr_planes = GET_PLANES(dp_for_drawing->bplcon0); + dp_for_drawing->ham_seen = isham(dp_for_drawing->bplcon0); + if (currprefs.chipset_hr && dp_for_drawing->bplres < currprefs.gfx_resolution) { + dp_for_drawing->bplres = currprefs.gfx_resolution; + } pfield_expand_dp_bplcon(); + set_res_shift(); } hposblank = ohposblank; ham_decode_pixel = src_pixel;