diff --git a/src/ints/int10_char.cpp b/src/ints/int10_char.cpp index 1d6f4a0d..82449517 100644 --- a/src/ints/int10_char.cpp +++ b/src/ints/int10_char.cpp @@ -24,6 +24,17 @@ #include "inout.h" #include "int10.h" +static INLINE void CGA_CopyRow(VGAMODES * curmode,Bit8u cleft,Bit8u cright,Bit8u rold,Bit8u rnew,PhysPt base) { + PhysPt dest=base+((curmode->twidth*rnew)*(curmode->cheight/2)+cleft)*2; + PhysPt src=base+((curmode->twidth*rold)*(curmode->cheight/2)+cleft)*2; + Bitu copy=(cright-cleft)*2;Bitu nextline=curmode->twidth*2; + for (Bits i=0;icheight/2;i++) { + MEM_BlockCopy(dest,src,copy); + MEM_BlockCopy(dest+8*1024,src+8*1024,copy); + dest+=nextline;src+=nextline; + } +} + static INLINE void PLANAR4_CopyRow(VGAMODES * curmode,Bit8u cleft,Bit8u cright,Bit8u rold,Bit8u rnew,PhysPt base) { PhysPt src,dest;Bitu copy; dest=base+(curmode->twidth*rnew)*curmode->cheight+cleft; @@ -38,7 +49,6 @@ static INLINE void PLANAR4_CopyRow(VGAMODES * curmode,Bit8u cleft,Bit8u cright,B for (;copy>0;copy--) { for (Bitu x=0;xtwidth*row)*(curmode->cheight/2)+cleft)*2; + Bitu copy=(cright-cleft)*2;Bitu nextline=curmode->twidth*2; + for (Bits i=0;icheight/2;i++) { + for (Bitu x=0;xrlr) return; @@ -116,9 +137,10 @@ void INT10_ScrollWindow(Bit8u rul,Bit8u cul,Bit8u rlr,Bit8u clr,Bit8s nlines,Bit case MTEXT: case CTEXT: TEXT_CopyRow(curmode,cul,clr,start,start+nlines,base);break; + case CGA: + CGA_CopyRow(curmode,cul,clr,start,start+nlines,base);break; case PLANAR4: PLANAR4_CopyRow(curmode,cul,clr,start,start+nlines,base);break; - } } while (start!=end); /* Fill some lines */ @@ -134,6 +156,8 @@ filling: case MTEXT: case CTEXT: TEXT_FillRow(curmode,cul,clr,start,base,attr);break; + case CGA: + CGA_FillRow(curmode,cul,clr,start,base,attr);break; case PLANAR4: PLANAR4_FillRow(curmode,cul,clr,start,base,attr);break; } @@ -260,9 +284,6 @@ INLINE static void WriteChar(Bit16u col,Bit16u row,Bit8u page,Bit8u chr,Bit8u at } } - - - void INT10_WriteChar(Bit8u chr,Bit8u attr,Bit8u page,Bit16u count,bool showattr) { if(page==0xFF) page=real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); Bit8u cur_row=CURSOR_POS_ROW(page);