PCem

changeset 79:6440ce9ca446

Fixed VGA character set selection (bad documentation). Fixes Impulse Tracker.
author TomW
date Wed Mar 05 19:51:23 2014 +0000
parents 814b4fc0803f
children bc749e3a164e
files src/vid_ega.c src/vid_svga.c
diffstat 2 files changed, 9 insertions(+), 5 deletions(-) [+]
line diff
     1.1 --- a/src/vid_ega.c	Tue Mar 04 21:34:27 2014 +0000
     1.2 +++ b/src/vid_ega.c	Wed Mar 05 19:51:23 2014 +0000
     1.3 @@ -73,8 +73,8 @@
     1.4                          ega->writemask = val & 0xf; 
     1.5                          break;
     1.6                          case 3:
     1.7 -                        ega->charseta = (((val >> 2) & 3) * 0x10000) + 2;
     1.8 -                        ega->charsetb = ((val & 3)        * 0x10000) + 2;
     1.9 +                        ega->charsetb = (((val >> 2) & 3) * 0x10000) + 2;
    1.10 +                        ega->charseta = ((val & 3)        * 0x10000) + 2;
    1.11                          break;
    1.12                  }
    1.13                  break;
     2.1 --- a/src/vid_svga.c	Tue Mar 04 21:34:27 2014 +0000
     2.2 +++ b/src/vid_svga.c	Wed Mar 05 19:51:23 2014 +0000
     2.3 @@ -23,7 +23,7 @@
     2.4          svga_t *svga = (svga_t *)p;
     2.5          int c;
     2.6          uint8_t o;
     2.7 -//        printf("OUT SVGA %03X %02X %04X:%04X %i %08X\n",addr,val,CS,pc,TRIDENT,svgawbank);
     2.8 +//        printf("OUT SVGA %03X %02X %04X:%04X\n",addr,val,CS,pc);
     2.9          switch (addr)
    2.10          {
    2.11                  case 0x3C0:
    2.12 @@ -88,8 +88,12 @@
    2.13                          svga->writemask = val & 0xf; 
    2.14                          break;
    2.15                          case 3:
    2.16 -                        svga->charseta = (((val >> 2) & 3) * 0x10000) + 2;
    2.17 -                        svga->charsetb = ((val & 3)  * 0x10000) + 2;
    2.18 +                        svga->charsetb = (((val >> 2) & 3) * 0x10000) + 2;
    2.19 +                        svga->charseta = ((val & 3)  * 0x10000) + 2;
    2.20 +                        if (val & 0x10)
    2.21 +                                svga->charseta += 0x8000;
    2.22 +                        if (val & 0x20)
    2.23 +                                svga->charsetb += 0x8000;
    2.24                          break;
    2.25                          case 4: 
    2.26                          svga->chain4 = val & 8;