More EGA/(S)VGA bugfixes, error 2401 on PS/1 model 2121 is now gone for good (it was caused by enablevram).
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
* Emulation of the EGA, Chips & Technologies SuperEGA, and
|
||||
* AX JEGA graphics cards.
|
||||
*
|
||||
* Version: @(#)vid_ega.c 1.0.13 2018/01/24
|
||||
* Version: @(#)vid_ega.c 1.0.14 2018/01/25
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -972,7 +972,6 @@ void ega_init(ega_t *ega, int monitor_type, int is_mono)
|
||||
old_overscan_color = 0;
|
||||
|
||||
ega->miscout |= 0x22;
|
||||
ega->enablevram = 1;
|
||||
ega->oddeven_page = 0;
|
||||
|
||||
ega->seqregs[4] |= 2;
|
||||
|
@@ -9,7 +9,7 @@
|
||||
* Emulation of the EGA, Chips & Technologies SuperEGA, and
|
||||
* AX JEGA graphics cards.
|
||||
*
|
||||
* Version: @(#)vid_ega.h 1.0.5 2018/01/24
|
||||
* Version: @(#)vid_ega.h 1.0.6 2018/01/25
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -61,7 +61,7 @@ typedef struct ega_t {
|
||||
int readmode, writemode, readplane;
|
||||
int chain4, chain2_read, chain2_write;
|
||||
int oddeven_page, oddeven_chain;
|
||||
int enablevram, extvram;
|
||||
int extvram;
|
||||
uint8_t writemask;
|
||||
uint32_t charseta, charsetb;
|
||||
|
||||
|
@@ -11,7 +11,7 @@
|
||||
* This is intended to be used by another SVGA driver,
|
||||
* and not as a card in it's own right.
|
||||
*
|
||||
* Version: @(#)vid_svga.c 1.0.16 2018/01/24
|
||||
* Version: @(#)vid_svga.c 1.0.17 2018/01/25
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -173,7 +173,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p)
|
||||
break;
|
||||
case 0x3C2:
|
||||
svga->miscout = val;
|
||||
svga->enablevram = (val & 2) ? 1 : 0;
|
||||
svga->oddeven_page = (val & 0x20) ? 0 : 1;
|
||||
svga->vidclock = val & 4;
|
||||
if (val & 1)
|
||||
@@ -195,9 +194,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p)
|
||||
case 0x3C5:
|
||||
if (svga->seqaddr > 0xf) return;
|
||||
o = svga->seqregs[svga->seqaddr & 0xf];
|
||||
/* Sanitize value for the first 5 sequencer registers. */
|
||||
/* if ((svga->seqaddr & 0xf) <= 4)
|
||||
val &= mask_seq[svga->seqaddr & 0xf]; */
|
||||
svga->seqregs[svga->seqaddr & 0xf] = val;
|
||||
if (o != val && (svga->seqaddr & 0xf) == 1)
|
||||
svga_recalctimings(svga);
|
||||
@@ -272,9 +268,6 @@ void svga_out(uint16_t addr, uint8_t val, void *p)
|
||||
svga->gdcaddr = val;
|
||||
break;
|
||||
case 0x3CF:
|
||||
/* Sanitize the first 9 GDC registers. */
|
||||
/* if ((svga->gdcaddr & 15) <= 8)
|
||||
val &= mask_gdc[svga->gdcaddr & 15]; */
|
||||
o = svga->gdcreg[svga->gdcaddr & 15];
|
||||
switch (svga->gdcaddr & 15)
|
||||
{
|
||||
@@ -364,7 +357,7 @@ uint8_t svga_in(uint16_t addr, void *p)
|
||||
case 0x3C1:
|
||||
return svga->attrregs[svga->attraddr];
|
||||
case 0x3c2:
|
||||
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x50)
|
||||
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x4e)
|
||||
temp = 0;
|
||||
else
|
||||
temp = 0x10;
|
||||
@@ -622,11 +615,6 @@ void svga_recalctimings(svga_t *svga)
|
||||
|
||||
svga->dispontime = (int64_t)(_dispontime * (1 << TIMER_SHIFT));
|
||||
svga->dispofftime = (int64_t)(_dispofftime * (1 << TIMER_SHIFT));
|
||||
/* pclog("SVGA horiz total %i display end %i vidclock %f\n",svga->crtc[0],svga->crtc[1],svga->clock);
|
||||
pclog("SVGA vert total %i display end %i max row %i vsync %i\n",svga->vtotal,svga->dispend,(svga->crtc[9]&31)+1,svga->vsyncstart);
|
||||
pclog("total %f on %i cycles off %i cycles frame %i sec %i %02X\n",disptime*crtcconst,svga->dispontime,svga->dispofftime,(svga->dispontime+svga->dispofftime)*svga->vtotal,(svga->dispontime+svga->dispofftime)*svga->vtotal*70,svga->seqregs[1]);
|
||||
|
||||
pclog("svga->render %08X\n", svga->render);*/
|
||||
}
|
||||
|
||||
extern int cyc_total;
|
||||
@@ -926,7 +914,7 @@ int svga_init(svga_t *svga, void *p, int memsize,
|
||||
svga->vram_display_mask = memsize - 1;
|
||||
svga->vram_mask = memsize - 1;
|
||||
svga->decode_mask = 0x7fffff;
|
||||
svga->changedvram = malloc(/*(memsize >> 12) << 1*/memsize >> 12);
|
||||
svga->changedvram = malloc(memsize >> 12);
|
||||
svga->recalctimings_ex = recalctimings_ex;
|
||||
svga->video_in = video_in;
|
||||
svga->video_out = video_out;
|
||||
@@ -945,10 +933,6 @@ int svga_init(svga_t *svga, void *p, int memsize,
|
||||
|
||||
svga_pointer = svga;
|
||||
|
||||
/* io_sethandler(0x22ca, 0x0002, svga_in, NULL, NULL, svga_out, NULL, NULL, svga);
|
||||
io_sethandler(0x22ce, 0x0002, svga_in, NULL, NULL, svga_out, NULL, NULL, svga);
|
||||
io_sethandler(0x32ca, 0x0002, svga_in, NULL, NULL, svga_out, NULL, NULL, svga); */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1621,8 +1605,6 @@ void svga_writew(uint32_t addr, uint16_t val, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return;
|
||||
|
||||
if (!svga->fast)
|
||||
{
|
||||
svga_write(addr, val, p);
|
||||
@@ -1651,8 +1633,6 @@ void svga_writel(uint32_t addr, uint32_t val, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return;
|
||||
|
||||
if (!svga->fast)
|
||||
{
|
||||
svga_write(addr, val, p);
|
||||
@@ -1684,8 +1664,6 @@ uint16_t svga_readw(uint32_t addr, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return 0xffff;
|
||||
|
||||
if (!svga->fast)
|
||||
return svga_read(addr, p) | (svga_read(addr + 1, p) << 8);
|
||||
|
||||
@@ -1707,8 +1685,6 @@ uint32_t svga_readl(uint32_t addr, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return 0xffffffff;
|
||||
|
||||
if (!svga->fast)
|
||||
{
|
||||
/* if (addr == 0xBF0000) pclog ("%08X\n", svga_read(addr, p) | (svga_read(addr + 1, p) << 8) | (svga_read(addr + 2, p) << 16) | (svga_read(addr + 3, p) << 24)); */
|
||||
@@ -1733,8 +1709,6 @@ void svga_writew_linear(uint32_t addr, uint16_t val, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return;
|
||||
|
||||
if (!svga->fast)
|
||||
{
|
||||
svga_write_linear(addr, val, p);
|
||||
@@ -1761,8 +1735,6 @@ void svga_writel_linear(uint32_t addr, uint32_t val, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return;
|
||||
|
||||
if (!svga->fast)
|
||||
{
|
||||
svga_write_linear(addr, val, p);
|
||||
@@ -1791,8 +1763,6 @@ uint16_t svga_readw_linear(uint32_t addr, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return 0xffff;
|
||||
|
||||
if (!svga->fast)
|
||||
return svga_read_linear(addr, p) | (svga_read_linear(addr + 1, p) << 8);
|
||||
|
||||
@@ -1813,8 +1783,6 @@ uint32_t svga_readl_linear(uint32_t addr, void *p)
|
||||
{
|
||||
svga_t *svga = (svga_t *)p;
|
||||
|
||||
if (!svga->enablevram) return 0xffffffff;
|
||||
|
||||
if (!svga->fast)
|
||||
return svga_read_linear(addr, p) | (svga_read_linear(addr + 1, p) << 8) | (svga_read_linear(addr + 2, p) << 16) | (svga_read_linear(addr + 3, p) << 24);
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Generic SVGA handling.
|
||||
*
|
||||
* Version: @(#)vid_svga.h 1.0.3 2018/01/24
|
||||
* Version: @(#)vid_svga.h 1.0.4 2018/01/25
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -67,7 +67,7 @@ typedef struct svga_t
|
||||
int readmode, writemode, readplane;
|
||||
int chain4, chain2_write, chain2_read;
|
||||
int oddeven_page, oddeven_chain;
|
||||
int enablevram, extvram;
|
||||
int extvram;
|
||||
uint8_t writemask;
|
||||
uint32_t charseta, charsetb;
|
||||
|
||||
|
Reference in New Issue
Block a user