void modexEnter(sword vq, boolean cmem, global_game_variables_t *gv)\r
{\r
word i;\r
- dword far*ptr=(dword far*)vga_state.vga_graphics_ram;//VGA; /* used for faster screen clearing */\r
struct vga_mode_params cm;\r
int CRTParmCount;\r
\r
/* clear video memory */\r
switch (cmem)\r
{\r
- case 1:\r
- /* clear video memory */\r
- vga_write_sequencer(2/*map mask register*/,0xf/*all 4 planes*/);\r
- for(i=0; i<0x8000; i++) ptr[i] = 0x0000;\r
+ case 1: {\r
+ /* clear video memory */\r
+ dword far*ptr=(dword far*)vga_state.vga_graphics_ram;//VGA; /* used for faster screen clearing */\r
+ vga_write_sequencer(2/*map mask register*/,0xf/*all 4 planes*/);\r
+ for(i = 0;i < 0x4000; i++) ptr[i] = 0x0000; // 0x4000 x dword = 64KB\r
+ }\r
break;\r
}\r
gv->video.page[0].tilesw = gv->video.page[0].sw/TILEWH;\r
void modexprint(page_t *page, word x, word y, word t, word col, word bgcol, const byte *str)\r
{\r
word s, o, w;\r
+ word x_draw = x;\r
word addr = (word) romFontsData.l;\r
word addrq = (page->width/4) * y + (x / 4) + ((word)page->data);\r
+ word addrr = addrq;\r
byte c;\r
\r
s=romFonts[t].seg;\r
for(; *str != '\0'; str++)\r
{\r
c = (*str);\r
- if((c=='\n'/* || c=="\\r
-"*/) || romFontsData.chw\r
->=page->width)\r
+ if(c=='\n')\r
{\r
- romFontsData.chw=0;\r
- y+=romFonts[t].charSize;\r
+ x = x_draw;\r
+ romFontsData.chw = 0;\r
+ addrq += (page->width / 4) * 8;\r
+ addrr = addrq;\r
+ y += 8;\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
-//TODO: OPTIMIZE THIS!!!!\r
- modexDrawCharPBuf(page, x/*for mode X planar use*/, y/*redunant, remove*/, t, col, bgcol, addrq);\r
- addrq += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */\r
\r
- //if(!q) getch();\r
+ // load the character into romFontsData.l\r
+ // no need for inline assembly!\r
+ // NTS: It might even be faster to just let the modexDrawChar point directly at ROM font than to copy per char! --J.C.\r
+ _fmemcpy(romFontsData.l,MK_FP(s,o)/*ROM font location*/,w/*char size*/);\r
+ modexDrawChar(page, x_draw/*for mode X planar use*/, t, col, bgcol, addrr);\r
+ x_draw += 8; /* track X for edge of screen */\r
+ addrr += 2; /* move 8 pixels over (2 x 4 planar pixels per byte) */\r
}\r
}\r
\r
_fmemset(Where, color, page->width*(page->height)/4);\r
}\r
\r
-/*void\r
+void\r
modexWaitBorder() {\r
while(inp(INPUT_STATUS_1) & 8) {\r
// spin\r
while(!(inp(INPUT_STATUS_1) & 8)) {\r
// spin\r
}\r
-}*/\r
+}\r
\r
void bios_cls() {\r
VGA_ALPHA_PTR ap;\r