From 12f8751e5c40bfdfe384df8faa6a6ba50adf28df Mon Sep 17 00:00:00 2001 From: SarahW Date: Thu, 16 May 2019 21:52:07 +0100 Subject: [PATCH] Fix read of Cirrus Logic cursor position registers. OS/2 Warp now detects CL cards correctly. --- src/vid_cl5429.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/vid_cl5429.c b/src/vid_cl5429.c index c9a20d5..1098ad8 100644 --- a/src/vid_cl5429.c +++ b/src/vid_cl5429.c @@ -71,6 +71,8 @@ typedef struct gd5429_t uint32_t lfb_base; int mmio_vram_overlap; + + uint8_t sr10_read, sr11_read; } gd5429_t; static void gd5429_mmio_write(uint32_t addr, uint8_t val, void *p); @@ -111,11 +113,13 @@ void gd5429_out(uint16_t addr, uint8_t val, void *p) case 0x10: case 0x30: case 0x50: case 0x70: case 0x90: case 0xb0: case 0xd0: case 0xf0: svga->hwcursor.x = (val << 3) | ((svga->seqaddr >> 5) & 7); + gd5429->sr10_read = svga->seqaddr & 0xe0; // pclog("svga->hwcursor.x = %i\n", svga->hwcursor.x); break; case 0x11: case 0x31: case 0x51: case 0x71: case 0x91: case 0xb1: case 0xd1: case 0xf1: svga->hwcursor.y = (val << 3) | ((svga->seqaddr >> 5) & 7); + gd5429->sr11_read = svga->seqaddr & 0xe0; // pclog("svga->hwcursor.y = %i\n", svga->hwcursor.y); break; case 0x12: @@ -311,6 +315,13 @@ uint8_t gd5429_in(uint16_t addr, void *p) switch (addr) { + case 0x3c4: + if ((svga->seqaddr & 0x1f) == 0x10) + return (svga->seqaddr & 0x1f) | gd5429->sr10_read; + if ((svga->seqaddr & 0x1f) == 0x11) + return (svga->seqaddr & 0x1f) | gd5429->sr11_read; + return svga->seqaddr & 0x1f; + case 0x3c5: if (svga->seqaddr > 5) {