Fixed LFB access on the VLB front of the TGUI9440AGi.

Fixed Bresenham infinite loop when error term is > 0 alongside CX being 0.
This commit is contained in:
TC1995
2022-11-13 16:35:30 +01:00
parent a6d6d678b4
commit e0ce67bd7f

View File

@@ -427,32 +427,18 @@ tgui_out(uint16_t addr, uint8_t val, void *p)
val = (svga->crtc[7] & ~0x10) | (val & 0x10); val = (svga->crtc[7] & ~0x10) | (val & 0x10);
old = svga->crtc[svga->crtcreg]; old = svga->crtc[svga->crtcreg];
svga->crtc[svga->crtcreg] = val; svga->crtc[svga->crtcreg] = val;
if (old != val) {
if (svga->crtcreg < 0xe || svga->crtcreg > 0x10) {
if ((svga->crtcreg == 0xc) || (svga->crtcreg == 0xd)) {
svga->fullchange = 3;
svga->ma_latch = ((svga->crtc[0xc] << 8) | svga->crtc[0xd]) + ((svga->crtc[8] & 0x60) >> 5);
} else {
svga->fullchange = changeframecount;
svga_recalctimings(svga);
}
}
}
switch (svga->crtcreg) { switch (svga->crtcreg) {
case 0x1e: case 0x1e:
svga->vram_display_mask = (val & 0x80) ? tgui->vram_mask : 0x3ffff; svga->vram_display_mask = (val & 0x80) ? tgui->vram_mask : 0x3ffff;
break; break;
case 0x21: case 0x21:
if (old != val) { if (!tgui->pci) {
if (!tgui->pci) { tgui->linear_base = ((val & 0xc0) << 18) | ((val & 0x0f) << 20);
tgui->linear_base = ((val & 0xf) | ((val >> 2) & 0x30)) << 20; tgui->linear_size = (val & 0x10) ? 0x200000 : 0x100000;
tgui->linear_size = (val & 0x10) ? 0x200000 : 0x100000; svga->decode_mask = (val & 0x10) ? 0x1fffff : 0xfffff;
svga->decode_mask = (val & 0x10) ? 0x1fffff : 0xfffff;
}
tgui_recalcmapping(tgui);
} }
tgui_recalcmapping(tgui);
break; break;
case 0x34: case 0x34:
@@ -500,6 +486,18 @@ tgui_out(uint16_t addr, uint8_t val, void *p)
} }
break; break;
} }
if (old != val) {
if (svga->crtcreg < 0xe || svga->crtcreg > 0x10) {
if ((svga->crtcreg == 0xc) || (svga->crtcreg == 0xd)) {
svga->fullchange = 3;
svga->ma_latch = ((svga->crtc[0xc] << 8) | svga->crtc[0xd]) + ((svga->crtc[8] & 0x60) >> 5);
} else {
svga->fullchange = changeframecount;
svga_recalctimings(svga);
}
}
}
return; return;
case 0x3D8: case 0x3D8:
@@ -1816,12 +1814,16 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
} }
} }
if (tgui->accel.y == tgui->accel.size_y) if (tgui->accel.y == tgui->accel.size_y) {
break; break;
}
while (err > 0) { while (err > 0) {
dy += ydir; dy += ydir;
err -= (cx << 1); err -= (cx << 1);
if (!cx) {
break;
}
} }
dx += xdir; dx += xdir;
err += (cy << 1); err += (cy << 1);