+ word x;\r
+ word yy=0;\r
+\r
+ for(x=0;x<xh*4;x+=4)\r
+ {\r
+ if(x+4>=page[0].sw-1){ x=0; yy+=4; }\r
+ modexClearRegion(page, x+xl, y+yy, 4, 4, color);\r
+ }\r
+ //modexputPixel(page, x+xl, y, color);\r
+}\r
+\r
+void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str)\r
+{\r
+ word i, s, o, w, j, xp;\r
+ byte l[1024];\r
+ word addr = (word) l;\r
+ word chw=0;\r
+ byte c;\r
+\r
+ switch(t)\r
+ {\r
+ case 0:\r
+ w=14;\r
+ break;\r
+ case 1:\r
+ w=8;\r
+ break;\r
+ case 2:\r
+ w=8;\r
+ break;\r
+ case 3:\r
+ w=16;\r
+ break;\r
+ default:\r
+ t=3;\r
+ w=16;\r
+ break;\r
+ }\r
+\r
+ s=romFonts[t].seg;\r
+ o=romFonts[t].off;\r
+\r
+ for(; *str != '\0'; str++)\r
+ {\r
+ c = (*str);\r
+ if((c=='\n'/* || c=="\\r
+"*/) || chw\r
+>=page->width)\r
+ {\r
+ chw=0;\r
+ y+=w;\r
+ continue;\r
+ }\r
+ //load the letter 'A'\r
+ __asm {\r
+ MOV DI, addr\r
+ MOV SI, o\r
+ MOV ES, s\r
+ SUB AH, AH\r
+ MOV AL, c ; the letter\r
+ MOV CX, w\r
+ MUL CX\r
+ ADD SI, AX ;the address of charcter\r
+ L1: MOV AX, ES:SI\r
+ MOV DS:DI, AX\r
+ INC SI\r
+ INC DI\r
+ DEC CX\r
+ JNZ L1\r
+ }\r
+\r
+ for(i=0; i<w; i++)\r
+ {\r
+ j=1<<8;\r
+ xp=0;\r
+ while(j)\r
+ {\r
+ modexputPixel(page, x+xp+chw, y+i, l[i] & j ? col:bgcol);\r
+ xp++;\r
+ j>>=1;\r
+ }\r
+ }\r
+ chw += xp;\r
+ }\r
+}\r
+\r
+void modexprintbig(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str)\r
+{\r
+ word i, s, o, w, j, xp;\r
+ byte l[1024];\r
+ word addr = (word) l;\r
+ word chw=0;\r
+ byte c;\r
+\r
+ switch(t)\r
+ {\r
+ case 0:\r
+ w=14;\r
+ break;\r
+ case 1:\r
+ w=8;\r
+ break;\r
+ case 2:\r
+ w=8;\r
+ break;\r
+ case 3:\r
+ w=16;\r
+ break;\r
+ default:\r
+ t=3;\r
+ w=16;\r
+ break;\r
+ }\r
+\r
+ s=romFonts[t].seg;\r
+ o=romFonts[t].off;\r
+\r
+ for(; *str != '\0'; str++)\r
+ {\r
+ c = (*str);\r
+ if((c=='\n'/* || c=="\\r
+"*/)/* || chw>=page->width*/)\r
+ {\r
+ chw=0;\r
+ y+=w;\r
+ continue;\r
+ }\r
+ //load the letter 'A'\r
+ __asm {\r
+ MOV DI, addr\r
+ MOV SI, o\r
+ MOV ES, s\r
+ SUB AH, AH\r
+ MOV AL, c ; the letter\r
+ MOV CX, w\r
+ MUL CX\r
+ ADD SI, AX ;the address of charcter\r
+ L1: MOV AX, ES:SI\r
+ MOV DS:DI, AX\r
+ INC SI\r
+ INC DI\r
+ DEC CX\r
+ JNZ L1\r
+ }\r
+\r
+ for(i=0; i<w; i++)\r
+ {\r
+ j=1<<8;\r
+ xp=0;\r
+ while(j)\r
+ {\r
+ //modexputPixel(page, x+xp+chw, y+i, l[i] & j ? col:bgcol);\r
+ modexClearRegion(page, (x+xp+chw)*8, (y+i)*8, 8, 8, l[i] & j ? col:bgcol);\r
+ xp++;\r
+ j>>=1;\r
+ }\r
+ }\r
+ chw += xp;\r
+ }\r
+}\r
+\r
+/* palette dump on display! */\r
+void pdump(page_t *pee)\r
+{\r
+ int mult=(QUADWH);\r
+ int palq=(mult)*TILEWH;\r
+ int palcol=0;\r
+ int palx, paly;\r
+ for(paly=0; paly<palq; paly+=mult){\r
+ for(palx=0; palx<palq; palx+=mult){\r
+ modexClearRegion(pee, palx+TILEWH, paly+TILEWH, mult, mult, palcol);\r
+ palcol++;\r
+ }\r
+ }\r
+}\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+// //\r
+// cls() - This clears the screen to the specified color, on the VGA or on //\r
+// the Virtual screen. //\r
+// //\r
+/////////////////////////////////////////////////////////////////////////////\r
+void cls(page_t *page, byte color, byte *Where)\r
+{\r
+ //modexClearRegion(page, 0, 0, page->width, page->height, color);\r
+ /* set map mask to all 4 planes */\r
+ outpw(SC_INDEX, 0xff02);\r
+ //_fmemset(VGA, color, 16000);\r
+ _fmemset(Where, color, page->width*(page->height));\r