cramer@kontron.UUCP (02/25/87)
There is a little trick to making the cursor appear when using the 43-line mode of the EGA: the little trick is that the standard cursor block is more than eight pixels high, but in 43-line mode, the character box is eight by eight pixels. The result is that if you change to 43-line mode, your cursor disappears. The trick is to use the INT 10H call that sets the height of the cursor. The following piece of Microsoft C V3.0 sets you up in 43-line mode: /*===========================================================================*\ NAME: Set43LineMode AUTHOR: Clayton E. Cramer FUNCTION: Turns on the 43 line mode of the EGA. PARAMETERS: Color TRUE: color display FALSE: monochrome display OTHER INPUTS: none RETURNS: none OUTPUTS: Does some ROM BIOS interrupts to set the mode. Doesn't (can't) check if this is an EGA or not. SIDE EFFECTS: none PORTABILITY: Specific to the PC family \*========================================================================*/ Set43LineMode(Color) { union REGS InRegs, OutRegs; if (Color) InRegs.h.al = 0x3; /* Color, 80x43 */ else InRegs.h.al = 0x7; /* Monochrome, 80x43 */ int86 (0x10, &InRegs, &OutRegs); InRegs.x.ax = 0x1112; /* character generator BIOS routine */ InRegs.h.bl = 0; /* load 8x8 double dot character font */ int86 (0x10, &InRegs, &OutRegs); InRegs.x.ax = 0x1200; /* alternate screen routine */ InRegs.h.bl = 0x20; /* alternate print screen routine */ int86 (0x10, &InRegs, &OutRegs); InRegs.x.ax = 0x100; InRegs.h.ch = 0; InRegs.h.cl = 7; int86 (0x10, &InRegs, &OutRegs); /* set cursor type */ } The following function puts you back into 25-line mode: /*===========================================================================*\ NAME: Reset43LineMode AUTHOR: Clayton E. Cramer FUNCTION: Turns off the 43 line mode of the EGA. PARAMETERS: Color TRUE: color display FALSE: monochrome display OTHER INPUTS: none RETURNS: none OUTPUTS: Does some ROM BIOS interrupts to set the mode. Doesn't check if this is an EGA or not. Because the COMPAQ seems slightly incompatible, we also run the DOS command MODE CO80 to force everything back to the correct form. SIDE EFFECTS: none PORTABILITY: Specific to the PC family \*========================================================================*/ Reset43LineMode(Color) { union REGS InRegs, OutRegs; if (Color) InRegs.h.al = 0x3; /* Color, 80x25 */ else InRegs.h.al = 0x7; /* Monochrome, 80x25 */ int86 (0x10, &InRegs, &OutRegs); InRegs.x.ax = 0x1101; /* character generator BIOS routine */ InRegs.h.bl = 0; /* load 8x8 double dot character font */ int86 (0x10, &InRegs, &OutRegs); InRegs.x.ax = 0x1200; /* alternate screen routine */ InRegs.h.bl = 0x20; /* alternate print screen routine */ int86 (0x10, &InRegs, &OutRegs); } I hope these save someone else some time. Clayton E. Cramer