From d574a4f5eb3bad4546a6535e77954918849f1f81 Mon Sep 17 00:00:00 2001 From: TomW Date: Sun, 11 Oct 2015 20:36:18 +0100 Subject: [PATCH] Correct S3 class code. Limit S3 attribute registers to those actually present. Don't update current position registers at the end of BitBlt command. Fixes S3 on SUSE 6.3. --- src/vid_s3.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/vid_s3.c b/src/vid_s3.c index 08625e6..ff86d76 100644 --- a/src/vid_s3.c +++ b/src/vid_s3.c @@ -257,6 +257,11 @@ uint8_t s3_in(uint16_t addr, void *p) // if (addr != 0x3da) pclog("S3 in %04X %08x:%02x\n", addr, CS, pc); switch (addr) { + case 0x3c1: + if (svga->attraddr > 0x14) + return 0xff; + break; + case 0x3c5: if (svga->seqaddr >= 0x10 && svga->seqaddr < 0x20) return svga->seqregs[svga->seqaddr]; @@ -1587,8 +1592,8 @@ void s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat if (cpu_input/* && (s3->accel.multifunc[0xa] & 0xc0) == 0x80*/) return; if (s3->accel.sy < 0) { - s3->accel.cur_x = s3->accel.cx; - s3->accel.cur_y = s3->accel.cy; +// s3->accel.cur_x = s3->accel.cx; +// s3->accel.cur_y = s3->accel.cy; return; } } @@ -1837,7 +1842,7 @@ uint8_t s3_pci_read(int func, int addr, void *p) case 0x08: return 0; /*Revision ID*/ case 0x09: return 0; /*Programming interface*/ - case 0x0a: return 0x01; /*Supports VGA interface*/ + case 0x0a: return 0x00; /*Supports VGA interface*/ case 0x0b: return 0x03; case 0x10: return 0x00; /*Linear frame buffer address*/