Return to BSD News archive
Newsgroups: comp.os.386bsd.bugs Path: sserve!newshost.anu.edu.au!munnari.oz.au!metro!ipso!runxtsa!bde From: bde@runx.oz.au (Bruce Evans) Subject: pccons initialization bugs with mono screen Message-ID: <1993Mar14.050211.3739@runx.oz.au> Organization: RUNX Un*x Timeshare. Sydney, Australia. Date: Sun, 14 Mar 93 05:02:11 GMT Lines: 53 The following bugs showed up on an old system with a mono screen and a kernel compiled by gcc-2.3.3. 1. kdb_init() is called before the console driver is initialized from isa_configure(). So when there are no symbols, ddb calls the console driver before the latter is initialized. pccons supports this (sput() is self-initializing) but it is inconvenient for all console drivers to have to support it. 2. gcc-2.3.3 optimized out the 0xA55A color/mono test, so the screen type defaulted to 'color'. Reading the bogus CRTC registers gave a bogus cursor offset, perhaps 0xFFFF, but pehaps larger so that crtat = Crtat + cursorat was an unmapped address and caused a panic. 3. After (2) was fixed, kernel messages were printed with the color intense black on black == black. I had been using pcvt so I don't have the hard-coded escape sequence to set the color in init_main.c. This escape sequence was necessary to make the mono kernel colors readable. The patches fix the color/mono test and the mono kernel color. The out of bounds cursor offset is not fixed. *** /isa/pccons.c~~ Fri Mar 5 13:50:46 1993 --- /isa/pccons.c Sun Mar 14 05:45:08 1993 *************** *** 568,572 **** if (crtat == 0) { ! u_short *cp = Crtat + (CGA_BUF-MONO_BUF)/CHR, was; unsigned cursorat; --- 627,632 ---- if (crtat == 0) { ! u_short volatile *cp = Crtat + (CGA_BUF-MONO_BUF)/CHR; ! u_short was; unsigned cursorat; *************** *** 601,605 **** if (vs.color == 0) { ! vs.kern_fg_at = FG_INTENSE; vs.so_at = FG_BLACK | BG_LIGHTGREY; } else { --- 661,665 ---- if (vs.color == 0) { ! vs.kern_fg_at = FG_UNDERLINE; vs.so_at = FG_BLACK | BG_LIGHTGREY; } else { -- Bruce Evans bde%runx.oz.au@ips.oz.au