From f030e72816234a21d02f21690d70a7dcaf148b62 Mon Sep 17 00:00:00 2001 From: TomW Date: Wed, 5 Mar 2014 19:51:23 +0000 Subject: [PATCH] Fixed VGA character set selection (bad documentation). Fixes Impulse Tracker. --- src/vid_ega.c | 4 ++-- src/vid_svga.c | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/vid_ega.c b/src/vid_ega.c index 19af6a9..734994d 100644 --- a/src/vid_ega.c +++ b/src/vid_ega.c @@ -73,8 +73,8 @@ void ega_out(uint16_t addr, uint8_t val, void *p) ega->writemask = val & 0xf; break; case 3: - ega->charseta = (((val >> 2) & 3) * 0x10000) + 2; - ega->charsetb = ((val & 3) * 0x10000) + 2; + ega->charsetb = (((val >> 2) & 3) * 0x10000) + 2; + ega->charseta = ((val & 3) * 0x10000) + 2; break; } break; diff --git a/src/vid_svga.c b/src/vid_svga.c index 2fcf138..260da3c 100644 --- a/src/vid_svga.c +++ b/src/vid_svga.c @@ -23,7 +23,7 @@ void svga_out(uint16_t addr, uint8_t val, void *p) svga_t *svga = (svga_t *)p; int c; uint8_t o; -// printf("OUT SVGA %03X %02X %04X:%04X %i %08X\n",addr,val,CS,pc,TRIDENT,svgawbank); +// printf("OUT SVGA %03X %02X %04X:%04X\n",addr,val,CS,pc); switch (addr) { case 0x3C0: @@ -88,8 +88,12 @@ void svga_out(uint16_t addr, uint8_t val, void *p) svga->writemask = val & 0xf; break; case 3: - svga->charseta = (((val >> 2) & 3) * 0x10000) + 2; - svga->charsetb = ((val & 3) * 0x10000) + 2; + svga->charsetb = (((val >> 2) & 3) * 0x10000) + 2; + svga->charseta = ((val & 3) * 0x10000) + 2; + if (val & 0x10) + svga->charseta += 0x8000; + if (val & 0x20) + svga->charsetb += 0x8000; break; case 4: svga->chain4 = val & 8;