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:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user