From b0855c4d63825f1b59031917b1f44b0a39a5e8e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Fri, 28 Sep 2007 15:40:46 +0000 Subject: [PATCH] add true 720x400/360x400 vga textmodes for vga-only setting (8+1x16 font) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3000 --- src/hardware/vga_draw.cpp | 43 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index 6716a82d..70693707 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -407,6 +407,40 @@ skip_cursor: return TempLine; } +static Bit8u * VGA_TEXT_Draw_Line_9(Bitu vidstart, Bitu line) { + Bits font_addr; + Bit8u * draw=(Bit8u *)TempLine; + const Bit8u *vidmem = &vga.tandy.draw_base[vidstart]; + Bitu bitpos=0; + for (Bitu cx=0;cx> 3)&1][chr*32+line]; + Bit8u fg=col&0xf; + Bit8u bg=(Bit8u)(TXT_BG_Table[col>>4]&0xff); + if (FontMask[col>>7]==0) font=0; + *draw++=(font&0x80)?fg:bg; *draw++=(font&0x40)?fg:bg; + *draw++=(font&0x20)?fg:bg; *draw++=(font&0x10)?fg:bg; + *draw++=(font&0x08)?fg:bg; *draw++=(font&0x04)?fg:bg; + *draw++=(font&0x02)?fg:bg; + Bit8u last=(font&0x01)?fg:bg; + *draw++=last; + *draw++=((chr<0xc0) || (chr>0xdf)) ? bg : last; + } + if (!vga.draw.cursor.enabled || !(vga.draw.cursor.count&0x8)) goto skip_cursor; + font_addr = (vga.draw.cursor.address-vidstart) >> 1; + if (font_addr>=0 && font_addr<(Bits)vga.draw.blocks) { + if (linevga.draw.cursor.eline) goto skip_cursor; + draw=&TempLine[font_addr*9]; + Bit8u fg=vga.tandy.draw_base[vga.draw.cursor.address+1]&0xf; + *draw++=fg; *draw++=fg; *draw++=fg; *draw++=fg; + *draw++=fg; *draw++=fg; *draw++=fg; *draw++=fg; + } +skip_cursor: + return TempLine; +} + static void VGA_VerticalDisplayEnd(Bitu val) { // vga.config.retrace=true; vga.config.real_start=vga.config.display_start & ((2*1024*1024)-1); @@ -931,8 +965,13 @@ void VGA_SetupDrawing(Bitu val) { aspect_ratio=1.0; vga.draw.blocks=width; doublewidth=(vga.seq.clocking_mode & 0x8) > 0; - width<<=3; /* 8 bit wide text font */ - VGA_DrawLine=VGA_TEXT_Draw_Line; + if ((IS_VGA_ARCH) && (svgaCard==SVGA_None)) { + width*=9; /* 9 bit wide text font */ + VGA_DrawLine=VGA_TEXT_Draw_Line_9; + } else { + width<<=3; /* 8 bit wide text font */ + VGA_DrawLine=VGA_TEXT_Draw_Line; + } break; case M_HERC_GFX: aspect_ratio=1.5;