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