--- xmil/vram/make15.c 2004/08/10 08:28:49 1.4 +++ xmil/vram/make15.c 2004/08/18 09:17:56 1.5 @@ -18,6 +18,7 @@ void width80x25_200l(void) { // 8 UINT8 *lp; UINT x; REG8 udtmp; + REG8 dirty; UINT8 work[MAKETEXT_ROW * 3]; UINT lines; UINT i; @@ -32,16 +33,21 @@ void width80x25_200l(void) { // 8 x = makescrn.surfcx; do { udtmp = updatetmp[pos]; - if (udtmp & makescrn.dispflag) { - updatetmp[pos] = (UINT8)(udtmp & (~makescrn.dispflag)); + dirty = (udtmp & makescrn.dispflag); + if (dirty) { + updatetmp[pos] = (UINT8)(udtmp ^ dirty); newline = TRUE; - ZeroMemory(work, sizeof(work)); - makechr8(work, pos, fontcy, udtmp); - makemix_mix(dst, SURFACE_WIDTH * 2, - work, makescrn.disp1 + (pos << 5), fontcy); - makemix_doubler(dst, fontcy, 0x40404040); + if (dirty & UPDATE_TRAM) { + ZeroMemory(work, sizeof(work)); + makechr8(work, pos, fontcy, udtmp); + makemix_mixtext(dst, SURFACE_WIDTH * 2, work, fontcy); + } + if (dirty & UPDATE_VRAM) { + makemix_mixgrph(dst, SURFACE_WIDTH * 2, + makescrn.disp1 + (pos << 5), fontcy); + } if (fontcy < makescrn.fontcy) { - makemix_remcpy(dst, fontcy * 2, makescrn.fontcy * 2); + makemix_cpy200(dst, fontcy, makescrn.fontcy); } } pos = LOW11(pos + 1); @@ -78,6 +84,7 @@ void width80x12_200l(void) { // 8 UINT8 *lp; UINT x; REG8 udtmp; + REG8 dirty; UINT8 work[MAKETEXT_STEP * 2]; const UINT8 *src; UINT lines; @@ -93,18 +100,25 @@ const UINT8 *src; x = makescrn.surfcx; do { udtmp = updatetmp[pos]; - if (udtmp & makescrn.dispflag) { - updatetmp[pos] = (UINT8)(udtmp & (~makescrn.dispflag)); + dirty = (udtmp & makescrn.dispflag); + if (dirty) { + updatetmp[pos] = (UINT8)(udtmp ^ dirty); newline = TRUE; - ZeroMemory(work, sizeof(work)); - makechr16(work, pos, fontcy, udtmp); - src = makescrn.disp1 + (LOW10(pos) << 5); - makemix_mix(dst, SURFACE_WIDTH * 4, work, src, fontcy); - makemix_mix(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4, - work + MAKETEXT_STEP, src + GRAM_HALFSTEP, fontcy); - makemix_doubler(dst, fontcy * 2, 0x40404040); + if (dirty & UPDATE_TRAM) { + ZeroMemory(work, sizeof(work)); + makechr16(work, pos, fontcy, udtmp); + makemix_mixtext(dst, SURFACE_WIDTH * 4, work, fontcy); + makemix_mixtext(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4, + work + MAKETEXT_STEP, fontcy); + } + if (dirty & UPDATE_VRAM) { + src = makescrn.disp1 + (LOW10(pos) << 5); + makemix_mixgrph(dst, SURFACE_WIDTH * 4, src, fontcy); + makemix_mixgrph(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4, + src + GRAM_HALFSTEP, fontcy); + } if (fontcy < makescrn.fontcy) { - makemix_remcpy(dst, fontcy * 4, makescrn.fontcy * 4); + makemix_cpy200(dst, fontcy * 2, makescrn.fontcy * 2); } } pos = LOW11(pos + 1); @@ -160,13 +174,11 @@ void width80x20l(void) { newline = TRUE; ZeroMemory(work, sizeof(work)); makechr8(work, pos, fontcy, udtmp); - makemix_txt(dst, SURFACE_WIDTH * 2, work, fontcy); - makemix_doubler(dst, fontcy, 0x40404040); + makemix_settext(dst, SURFACE_WIDTH * 2, work, fontcy); if (fontcy < makescrn.fontcy) { - makemix_remcpy(dst, fontcy * 2, makescrn.fontcy * 2); + makemix_cpy200(dst, fontcy, makescrn.fontcy); } - makemix_ul20(dst + SURFACE_WIDTH * makescrn.fontcy * 2, - pos, 0x40404040); + makemix_ul20(dst + SURFACE_WIDTH * makescrn.fontcy * 2, pos); } pos = LOW11(pos + 1); dst += 8; @@ -221,15 +233,13 @@ void width80x10l(void) { newline = TRUE; ZeroMemory(work, sizeof(work)); makechr16(work, pos, fontcy, udtmp); - makemix_txt(dst, SURFACE_WIDTH * 4, work, fontcy); - makemix_txt(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4, + makemix_settext(dst, SURFACE_WIDTH * 4, work, fontcy); + makemix_settext(dst + SURFACE_WIDTH * 2, SURFACE_WIDTH * 4, work + MAKETEXT_STEP, fontcy); - makemix_doubler(dst, fontcy * 2, 0x40404040); if (fontcy < makescrn.fontcy) { - makemix_remcpy(dst, fontcy * 4, makescrn.fontcy * 4); + makemix_cpy200(dst, fontcy * 2, makescrn.fontcy * 2); } - makemix_ul10(dst + SURFACE_WIDTH * makescrn.fontcy * 4, - pos, 0x40404040); + makemix_ul10(dst + SURFACE_WIDTH * makescrn.fontcy * 4, pos); } pos = LOW11(pos + 1); dst += 8;