From e695cb0e3b92c5effb2b4aaad85c1659caabf62d Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 22 May 2021 03:16:02 +0200 Subject: [PATCH] CRTC on CGA-like graphics chips is now on the entire 3D0 to 3D7 port range, fixes scrolling in some old games. --- src/machine/m_amstrad.c | 6 ++++++ src/machine/m_tandy.c | 6 ++++++ src/video/vid_cga.c | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index d9112c4c0..6996ab1da 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -228,6 +228,9 @@ vid_out_1512(uint16_t addr, uint8_t val, void *priv) amsvid_t *vid = (amsvid_t *)priv; uint8_t old; + if ((addr >= 0x3d0) && (addr <= 0x3d7)) + addr = (addr & 0xff9) | 0x004; + switch (addr) { case 0x03d4: vid->crtcreg = val & 31; @@ -277,6 +280,9 @@ vid_in_1512(uint16_t addr, void *priv) amsvid_t *vid = (amsvid_t *)priv; uint8_t ret = 0xff; + if ((addr >= 0x3d0) && (addr <= 0x3d7)) + addr = (addr & 0xff9) | 0x004; + switch (addr) { case 0x03d4: ret = vid->crtcreg; diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index aa7b18ca9..0ec09c21f 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -520,6 +520,9 @@ vid_out(uint16_t addr, uint8_t val, void *priv) t1kvid_t *vid = dev->vid; uint8_t old; + if ((addr >= 0x3d0) && (addr <= 0x3d7)) + addr = (addr & 0xff9) | 0x004; + switch (addr) { case 0x03d4: vid->crtcreg = val & 0x1f; @@ -589,6 +592,9 @@ vid_in(uint16_t addr, void *priv) t1kvid_t *vid = dev->vid; uint8_t ret = 0xff; + if ((addr >= 0x3d0) && (addr <= 0x3d7)) + addr = (addr & 0xff9) | 0x004; + switch (addr) { case 0x03d4: ret = vid->crtcreg; diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 51e0ac6af..dda14f48e 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -58,6 +58,9 @@ cga_out(uint16_t addr, uint8_t val, void *p) cga_t *cga = (cga_t *) p; uint8_t old; + if ((addr >= 0x3d0) && (addr <= 0x3d7)) + addr = (addr & 0xff9) | 0x004; + switch (addr) { case 0x3D4: cga->crtcreg = val & 31; @@ -100,6 +103,9 @@ cga_in(uint16_t addr, void *p) uint8_t ret = 0xff; + if ((addr >= 0x3d0) && (addr <= 0x3d7)) + addr = (addr & 0xff9) | 0x004; + switch (addr) { case 0x3D4: ret = cga->crtcreg;