From 1ddcbdaf4c94656bcc247a9f960c8b590158e67d Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 13 Jan 2019 22:12:39 +0000 Subject: [PATCH] Added emulation of CGA 3d8h bit 3 (display enable). --- src/vid_cga.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/vid_cga.c b/src/vid_cga.c index 7b616fc..fe7f903 100644 --- a/src/vid_cga.c +++ b/src/vid_cga.c @@ -169,8 +169,13 @@ void cga_poll(void *p) { for (x = 0; x < cga->crtc[1]; x++) { - chr = cga->charbuffer[x << 1]; - attr = cga->charbuffer[(x << 1) + 1]; + if (cga->cgamode & 8) + { + chr = cga->charbuffer[x << 1]; + attr = cga->charbuffer[(x << 1) + 1]; + } + else + chr = attr = 0; drawcursor = ((cga->ma == ca) && cga->con && cga->cursoron); if (cga->cgamode & 0x20) { @@ -201,8 +206,13 @@ void cga_poll(void *p) { for (x = 0; x < cga->crtc[1]; x++) { - chr = cga->vram[((cga->ma << 1) & 0x3fff)]; - attr = cga->vram[(((cga->ma << 1) + 1) & 0x3fff)]; + if (cga->cgamode & 8) + { + chr = cga->vram[((cga->ma << 1) & 0x3fff)]; + attr = cga->vram[(((cga->ma << 1) + 1) & 0x3fff)]; + } + else + chr = attr = 0; drawcursor = ((cga->ma == ca) && cga->con && cga->cursoron); if (cga->cgamode & 0x20) { @@ -255,7 +265,10 @@ void cga_poll(void *p) } for (x = 0; x < cga->crtc[1]; x++) { - dat = (cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000)] << 8) | cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000) + 1]; + if (cga->cgamode & 8) + dat = (cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000)] << 8) | cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000) + 1]; + else + dat = 0; cga->ma++; for (c = 0; c < 8; c++) { @@ -271,7 +284,10 @@ void cga_poll(void *p) cols[1] = cga->cgacol & 15; for (x = 0; x < cga->crtc[1]; x++) { - dat = (cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000)] << 8) | cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000) + 1]; + if (cga->cgamode & 8) + dat = (cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000)] << 8) | cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000) + 1]; + else + dat = 0; cga->ma++; for (c = 0; c < 16; c++) {