From 01c317b35593abc4c7de3ed98025fc929b3dc0c0 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Fri, 11 Jun 2004 16:18:42 +0000 Subject: [PATCH] Add 2nd font table support to text output Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1830 --- include/vga.h | 3 +-- src/hardware/vga_draw.cpp | 9 +++++---- src/hardware/vga_seq.cpp | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/vga.h b/include/vga.h index f2b19b9d..e2504997 100644 --- a/include/vga.h +++ b/include/vga.h @@ -121,8 +121,7 @@ typedef struct { bool double_scan_active; Bit8u font_height; Bit8u font[64*1024]; - Bitu font1_start; - Bitu font2_start; + Bit8u * font_tables[2]; Bitu blinking; struct { Bit8u sline,eline; diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index 8d1c9036..19cb9cce 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -133,19 +133,20 @@ static Bit8u * VGA_Draw_VGA_Line_HWMouse(Bitu vidstart, Bitu panning, Bitu line) + + static Bit32u FontMask[2]={0xffffffff,0x0}; static Bit8u * VGA_TEXT_Draw_Line(Bitu vidstart,Bitu panning,Bitu line) { Bit32u * draw=(Bit32u *)TempLine; Bit8u * vidmem=&vga.mem.linear[vidstart]; for (Bitu cx=0;cx>4]; - Bit32u mask2=TXT_Font_Table[font&0xf]; Bitu col=vidmem[cx*2+1]; + Bitu font=vga.draw.font_tables[(col >> 3)&1][chr*32+line]; + Bit32u mask1=TXT_Font_Table[font>>4] & FontMask[col >> 7]; + Bit32u mask2=TXT_Font_Table[font&0xf] & FontMask[col >> 7]; Bit32u fg=TXT_FG_Table[col&0xf]; Bit32u bg=TXT_BG_Table[col>>4]; - mask1&=FontMask[col >> 7];mask2&=FontMask[col >> 7]; *draw++=fg&mask1 | bg&~mask1; *draw++=fg&mask2 | bg&~mask2; } diff --git a/src/hardware/vga_seq.cpp b/src/hardware/vga_seq.cpp index c8e5f0b2..ab35b6c2 100644 --- a/src/hardware/vga_seq.cpp +++ b/src/hardware/vga_seq.cpp @@ -69,10 +69,10 @@ void write_p3c5(Bitu port,Bitu val,Bitu iolen) { case 3: /* Character Map Select */ { seq(character_map_select)=val; - Bit8u font1=(val & 0x3) | ((val & 0x10) >> 2); - vga.draw.font1_start=((font1&3) * 16*1024) + ((font1 > 4) ? (8*1024) : 0); - Bit8u font2=((val & 0xc) >> 2) | ((val & 0x20) >> 3); - vga.draw.font2_start=((font2&3) * 16*1024) + ((font2 > 4) ? (8*1024) : 0); + Bit8u font1=((val & 0x3) << 1) | ((val & 0x10) >> 4); + vga.draw.font_tables[0]=&vga.draw.font[font1*8*1024]; + Bit8u font2=((val & 0xc) >> 1) | ((val & 0x20) >> 5); + vga.draw.font_tables[1]=&vga.draw.font[font2*8*1024]; } /* 0,1,4 Selects VGA Character Map (0..7) if bit 3 of the character