From ae0a2db4d197c8b07fa5cb22e6abcb2950584911 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sat, 31 Jan 2004 22:40:02 +0000 Subject: [PATCH] Use a temporary buffer provided by render functions Fix the cga aspect ration Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1634 --- src/hardware/vga_draw.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index 03bd9ed6..050c99f2 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -26,40 +26,38 @@ #define VGA_PARTS 4 -static Bit8u VGA_DrawBuffer[2048]; - typedef Bit8u * (* VGA_Line_Handler)(Bitu vidstart,Bitu panning,Bitu line); static VGA_Line_Handler VGA_DrawLine; static Bit8u * VGA_HERC_Draw_Line(Bitu vidstart,Bitu panning,Bitu line) { Bit8u * reader=&vga.mem.linear[vidstart+(line * 8 * 1024)]; - Bit32u * draw=(Bit32u *)&VGA_DrawBuffer[0]; + Bit32u * draw=(Bit32u *)RENDER_TempLine; for (Bitu x=vga.draw.blocks;x>0;x--) { Bitu val=*reader++; *draw++=CGA_2_Table[val >> 4]; *draw++=CGA_2_Table[val & 0xf]; } - return VGA_DrawBuffer; + return RENDER_TempLine; } static Bit8u * VGA_CGA2_Draw_Line(Bitu vidstart,Bitu panning,Bitu line) { - line*=8*1024;Bit32u * draw=(Bit32u *)&VGA_DrawBuffer[0]; + line*=8*1024;Bit32u * draw=(Bit32u *)RENDER_TempLine; for (Bitu x=vga.draw.blocks;x>0;x--) { Bitu val=vga.mem.linear[vidstart+line];vidstart=(vidstart+1)&0x1fff; *draw++=CGA_2_Table[val >> 4]; *draw++=CGA_2_Table[val & 0xf]; } - return VGA_DrawBuffer; + return RENDER_TempLine; } static Bit8u * VGA_CGA4_Draw_Line(Bitu vidstart,Bitu panning,Bitu line) { - line*=8*1024;Bit32u * draw=(Bit32u *)&VGA_DrawBuffer[0]; + line*=8*1024;Bit32u * draw=(Bit32u *)RENDER_TempLine; for (Bitu x=0;x> 4] | convert16[val & 0xf] << 16; *draw++=full|=full<<8; } - return VGA_DrawBuffer; + return RENDER_TempLine; } static Bit8u * VGA_TANDY16_Draw_Line(Bitu vidstart,Bitu panning,Bitu line) { Bit8u * reader=&vga.mem.linear[(vga.tandy.disp_bank << 14) + vidstart + (line * 8 * 1024)]; - Bit32u * draw=(Bit32u *)&VGA_DrawBuffer[0]; + Bit32u * draw=(Bit32u *)RENDER_TempLine; for (Bitu x=0;x=0 && font_addrvga.draw.cursor.eline) goto skip_cursor; - draw=(Bit32u *)&VGA_DrawBuffer[font_addr*8]; + draw=(Bit32u *)&RENDER_TempLine[font_addr*8]; Bit32u att=TXT_FG_Table[vga.mem.linear[vga.config.cursor_start*2+1]&0xf]; *draw++=att;*draw++=att; } skip_cursor: - return VGA_DrawBuffer; + return RENDER_TempLine; } static void VGA_VerticalDisplayEnd(void) { @@ -295,6 +293,7 @@ void VGA_SetupDrawing(void) { break; case M_CGA4: case M_CGA16: //Let is use 320x200 res and double pixels myself + aspect_ratio/=2; //Hack for half the vtotal in cga mode scaleh=2;scalew=2; vga.draw.blocks=width; width<<=2; @@ -305,6 +304,7 @@ void VGA_SetupDrawing(void) { VGA_DrawLine=(vga.mode == M_CGA4) ? VGA_CGA4_Draw_Line : VGA_CGA16_Draw_Line; break; case M_CGA2: + aspect_ratio/=2; //Hack for half the vtotal in cga mode scaleh=2; vga.draw.address_line_total=2; vga.draw.blocks=width;