- crtat = CRT_TXTADDR; bzero (crtat,COL*ROW*CHR);
- }
- if (crtat >= (CRT_TXTADDR+COL*ROW*CHR)) {
- crtat = CRT_TXTADDR+COL*(ROW-1); row = 0;
+
+ /* XXX probe to find if a color or monochrome display */
+ was = *(u_short *)Crtat;
+ *(u_short *)Crtat = 0xA55A;
+ if (*(u_short *)Crtat != 0xA55A) {
+ Crtat = (u_char *) MONO_BUF;
+ addr_6845 = MONO_BASE;
+ }
+ *(u_short *)Crtat = was;
+
+ /* Extract cursor location */
+ outb(addr_6845,14);
+ cursorat = inb(addr_6845+1)<<8 ;
+ outb(addr_6845,15);
+ cursorat |= inb(addr_6845+1);
+
+ if(cursorat <= COL*ROW) {
+ crtat = Crtat + cursorat*CHR;
+ att = crtat[1]; /* use current attribute present */
+ } else crtat = Crtat;
+
+ /* clean display */
+ for (cp = crtat; cp < Crtat+ROW*COL*CHR; cp += 2) {
+ cp[0] = ' ';
+ cp[1] = att;
+ }