From 0064c46add162bb533d316187c4fa219d3443d58 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Sat, 6 Mar 2004 23:18:50 +0000 Subject: [PATCH] Add VGA copy and fill row functions Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1704 --- src/ints/int10_char.cpp | 43 +++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/ints/int10_char.cpp b/src/ints/int10_char.cpp index 64e2a0f2..a834ffdd 100644 --- a/src/ints/int10_char.cpp +++ b/src/ints/int10_char.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: int10_char.cpp,v 1.23 2004-02-29 22:18:24 harekiet Exp $ */ +/* $Id: int10_char.cpp,v 1.24 2004-03-06 23:18:50 harekiet Exp $ */ /* Character displaying moving functions */ @@ -68,8 +68,8 @@ static INLINE void TANDY16_CopyRow(Bit8u cleft,Bit8u cright,Bit8u rold,Bit8u rne static INLINE void EGA16_CopyRow(Bit8u cleft,Bit8u cright,Bit8u rold,Bit8u rnew,PhysPt base) { PhysPt src,dest;Bitu copy; Bit8u cheight = real_readb(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT); - dest=base+(CurMode->twidth*rnew)*cheight+cleft; - src=base+(CurMode->twidth*rold)*cheight+cleft; + dest=base+(CurMode->twidth*rnew)*cheight+cleft; + src=base+(CurMode->twidth*rold)*cheight+cleft; Bitu nextline=CurMode->twidth; /* Setup registers correctly */ IO_Write(0x3ce,5);IO_Write(0x3cf,1); /* Memory transfer mode */ @@ -85,6 +85,19 @@ static INLINE void EGA16_CopyRow(Bit8u cleft,Bit8u cright,Bit8u rold,Bit8u rnew, IO_Write(0x3ce,5);IO_Write(0x3cf,0); /* Normal transfer mode */ } +static INLINE void VGA_CopyRow(Bit8u cleft,Bit8u cright,Bit8u rold,Bit8u rnew,PhysPt base) { + PhysPt src,dest;Bitu copy; + Bit8u cheight = real_readb(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT); + dest=base+8*((CurMode->twidth*rnew)*cheight+cleft); + src=base+8*((CurMode->twidth*rold)*cheight+cleft); + Bitu nextline=8*CurMode->twidth; + Bitu rowsize=8*(cright-cleft); + copy=cheight; + for (;copy>0;copy--) { + for (Bitu x=0;xtwidth*row)*cheight+cleft; + PhysPt dest=base+(CurMode->twidth*row)*cheight+cleft; Bitu nextline=CurMode->twidth; - Bitu copy = cheight; Bitu rowsize=(cright-cleft); + Bitu copy = cheight;Bitu rowsize=(cright-cleft); for (;copy>0;copy--) { for (Bitu x=0;xtwidth*row)*cheight+cleft); + Bitu nextline=8*CurMode->twidth; + Bitu copy = cheight;Bitu rowsize=8*(cright-cleft); + for (;copy>0;copy--) { + for (Bitu x=0;xtype); } @@ -238,6 +263,8 @@ filling: TANDY16_FillRow(cul,clr,start,base,attr);break; case M_EGA16: EGA16_FillRow(cul,clr,start,base,attr);break; + case M_VGA: + VGA_FillRow(cul,clr,start,base,attr);break; default: LOG(LOG_INT10,LOG_ERROR)("Unhandled mode %d for scroll",CurMode->type); }