From 748a64aa0893c72f5b784a17de94f4d4a76d8a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Sun, 11 Dec 2005 15:09:50 +0000 Subject: [PATCH] add memory wrapping to 16 colour tandy modes (vertical scrollers, Scuba Venture); double pixels in mode8 (160x200) to fit screen better Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2410 --- src/hardware/vga_draw.cpp | 51 +++++++++++++++++++++++--------------- src/hardware/vga_other.cpp | 6 +++-- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index ae042c2d..5c40c1f5 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -60,7 +60,7 @@ static Bit8u * VGA_Draw_2BPP_Line(Bitu vidstart,Bitu panning,Bitu line) { static Bit8u * VGA_Draw_2BPPHiRes_Line(Bitu vidstart,Bitu panning,Bitu line) { line*=8*1024;Bit32u * draw=(Bit32u *)TempLine; - for (Bitu x=0;x<(vga.draw.blocks>>1);x++) { + for (Bitu x=0;x> 4 | (val2 & 0x0f) << 24 | @@ -127,14 +133,16 @@ static Bit8u * VGA_Draw_4BPP_Line(Bitu vidstart,Bitu panning,Bitu line) { } static Bit8u * VGA_Draw_4BPP_Line_Double(Bitu vidstart,Bitu panning,Bitu line) { - Bit8u * reader=&vga.gfxmem_start[vidstart + (line * 8 * 1024)]; - Bit32u * draw=(Bit32u *)TempLine; + line*=8*1024;Bit32u * draw=(Bit32u *)TempLine; for (Bitu x=0;x> 4 | - (val2 & 0x0f) << 24 | - (val2 & 0xf0) << 12; + if((vga.crtc.mode_control & 0x01) == 0) // CGA compatible addressing + vidstart &= 0x1dfff; + Bitu val=vga.gfxmem_start[vidstart+line]; + vidstart++; + *draw++=(val & 0xf0) >> 4 | + (val & 0xf0) << 4 | + (val & 0x0f) << 16 | + (val & 0x0f) << 24; } return TempLine; } @@ -352,7 +360,7 @@ void VGA_CheckScanLength(void) { vga.draw.address_add=vga.draw.blocks/4; break; case M_TANDY4: - vga.draw.address_add=vga.draw.blocks/2; + vga.draw.address_add=vga.draw.blocks; break; case M_TANDY16: vga.draw.address_add=vga.draw.blocks; @@ -527,9 +535,8 @@ void VGA_SetupDrawing(Bitu val) { doubleheight=true; if (machine==MCH_TANDY) doublewidth=(vga.tandy.mode_control & 0x10)==0; else doublewidth=(vga.tandy.gfx_control & 0x8)==0x00; -// vga.draw.blocks=width * (doublewidth ? 4:8); - vga.draw.blocks=width * 4; - width=vga.draw.blocks*2; + vga.draw.blocks=width * 2; + width=vga.draw.blocks*4; if ((machine==MCH_TANDY && (vga.tandy.gfx_control & 0x8)) || (machine==MCH_PCJR && (vga.tandy.mode_control==0x0b))) VGA_DrawLine=VGA_Draw_2BPPHiRes_Line; else VGA_DrawLine=VGA_Draw_2BPP_Line; @@ -537,11 +544,15 @@ void VGA_SetupDrawing(Bitu val) { case M_TANDY16: aspect_ratio=1.2; doubleheight=true; - if (machine==MCH_TANDY) doublewidth=(vga.tandy.mode_control & 0x10)==0; - else doublewidth=(vga.tandy.gfx_control & 0x8)==0x00; - vga.draw.blocks=width * (doublewidth ? 2:4); - width=vga.draw.blocks*2; - VGA_DrawLine=VGA_Draw_4BPP_Line; + doublewidth=true; + vga.draw.blocks=width*2; + if (vga.tandy.mode_control & 0x1) { + width=vga.draw.blocks*2; + VGA_DrawLine=VGA_Draw_4BPP_Line; + } else { + width=vga.draw.blocks*4; + VGA_DrawLine=VGA_Draw_4BPP_Line_Double; + } break; case M_TANDY_TEXT: doublewidth=(vga.tandy.mode_control & 0x1)==0; diff --git a/src/hardware/vga_other.cpp b/src/hardware/vga_other.cpp index ae738588..07f108d8 100644 --- a/src/hardware/vga_other.cpp +++ b/src/hardware/vga_other.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: vga_other.cpp,v 1.14 2005-12-05 12:18:12 qbix79 Exp $ */ +/* $Id: vga_other.cpp,v 1.15 2005-12-11 15:09:50 c2woody Exp $ */ #include #include @@ -349,6 +349,7 @@ static void write_tandy(Bitu port,Bitu val,Bitu iolen) { write_tandy_reg(val); break; case 0x3df: + vga.tandy.is_32k_mode=(val & 0x80)==0x80; vga.tandy.disp_bank=val & ((val & 0x80) ? 0x6 : 0x7); vga.tandy.mem_bank=(val >> 3) & ((val & 0x80) ? 0x6 : 0x7); VGA_SetupHandlers(); @@ -369,7 +370,7 @@ static void write_pcjr(Bitu port,Bitu val,Bitu iolen) { case 0x3df: vga.tandy.is_32k_mode=(val & 0x80)==0x80; vga.tandy.disp_bank=val & (vga.tandy.is_32k_mode ? 0x6 : 0x7); - vga.tandy.mem_bank=(val >> 3) & (vga.tandy.is_32k_mode ? 0x6 : 0x7); + vga.tandy.mem_bank=(val >> 3) & 0x7; VGA_SetupHandlers(); break; } @@ -429,6 +430,7 @@ void VGA_SetupOther(void) { IO_RegisterWriteHandler(0x3bf,write_hercules,IO_MB); } if (machine==MCH_TANDY) { + vga.tandy.is_32k_mode=false; IO_RegisterWriteHandler(0x3d8,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3d9,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3de,write_tandy,IO_MB);