[comp.unix.i386] X problem with 386ix 2.0.2 and mono VGA screen

jeff@hcr.uucp (Jeffrey Roberts) (02/20/90)

I recently encountered an interesting problem while installing
'X' windows version 1.1.1 under 386ix 2.0.2.  The installation went
smoothly and a new kernel was built and installed with no difficulty.
When 'X' is started up from any virtual terminal, ie: console, vt01 etc..
'X' starts up with no problem.  If I switch to another virtual terminal
I can see the cursor but nothing else, ie: any characters that I type
are invisible.  I can switch back to the 'X' window and everything
looks fine.  When I leave 'X' my initial virtual terminal goes into this
state as well which is a problem because the only way to fix the problem
is to reboot the machine.  This is difficult when you cannot see what
you are typing.

This only happens when a mono VGA monitor is used.  My work around
is to boot the system with a color VGA monitor attached and after the
system is up in level 2 or 3 I replace the monitor with the mono one.
The mono one works fine with this work around.  You may be interested to
know that the color monitor does appear in color so the driver really
does think that it is color.  The hardware is a Compaq 386/20E with
a builtin VGA mono/color controller.  'X' works fine under 386ix 1.0.6
so I presume that something has changed under 2.0.2.

Has anybody seen this problem?  Could it be related to my 'X' configuration?

My Xconfig is as follows:

#	386/ix X Window System Configuration file
#ident	@(#)Xconfig	1.10 - 89/09/28

# RESOURCE	TYPE	INFO		NUMBER	DEVICE
#dev type	manuf	extra		dpy.scr	device		# comment
keyboard	AT	101		0	/dev/console:/dev/vt%02d
mouse		LOGI-B	3		0	/dev/logi
display		VGA	"640x480 16 10x7" 0	/dev/console

Please mail any suggestions to me.

-- 
-------------------------------------------------- 
Jeffrey Roberts		{utzoo,utcsri,uunet}!hcr!jeff
HCR Corporation		Tel:(416)922-1937
Toronto, Canada		Fax:(416)922-8397

randy@chinet.chi.il.us (Randy Suess) (02/24/90)

In article <1990Feb19.195600.7778@hcr.uucp> jeff@hcr.uucp (Jeffrey Roberts) writes:
]When 'X' is started up from any virtual terminal, ie: console, vt01 etc..
]'X' starts up with no problem.  If I switch to another virtual terminal
]I can see the cursor but nothing else, ie: any characters that I type
]are invisible.  

	This happens with any mono vga monitor.  I understand it is a
	bug in the VGA drivers.  Quickest way to get around it that I have
	found is to run VPIX from a blanked out virtual console.  This
	seems to re-initialize the vga card.

-randy

-- 
Randy Suess
randy@chinet.chi.il.us

logan@inpnms.UUCP (Jim Logan) (02/28/90)

In article <1990Feb19.195600.7778@hcr.uucp> jeff@hcr.uucp (Jeffrey Roberts) writes:
# I recently encountered an interesting problem while installing
# 'X' windows version 1.1.1 under 386ix 2.0.2.  The installation went
# smoothly and a new kernel was built and installed with no difficulty.
# When 'X' is started up from any virtual terminal, ie: console, vt01 etc..
# 'X' starts up with no problem.  If I switch to another virtual terminal
# I can see the cursor but nothing else, ie: any characters that I type
# are invisible.  I can switch back to the 'X' window and everything
# looks fine.  When I leave 'X' my initial virtual terminal goes into this
# state as well which is a problem because the only way to fix the problem
# is to reboot the machine.  This is difficult when you cannot see what
# you are typing.
# 
# This only happens when a mono VGA monitor is used.

Not true.  This also happens to me when I use X with an EGA
board.  I intend to look through the documentation to see if
there is an ioctl() call that can be used to re-initialize the
screen(s).  I'll let you in on it if I find anything.

-- 
James Logan                       UUCP: uunet!inpnms!logan
Data General Telecommunications   Inet: logan%inpnms@uunet.uu.net
(301) 590-3198

durden@dell.dell.com (George A. Durden) (03/02/90)

In article <232@inpnms.UUCP> logan@inpnms.UUCP (Jim Logan) writes:
}In article <1990Feb19.195600.7778@hcr.uucp> jeff@hcr.uucp (Jeffrey Roberts) writes:
}# I recently encountered an interesting problem while installing
}# 'X' windows version 1.1.1 under 386ix 2.0.2.  The installation went
}# smoothly and a new kernel was built and installed with no difficulty.
}# When 'X' is started up from any virtual terminal, ie: console, vt01 etc..
}# 'X' starts up with no problem.  If I switch to another virtual terminal
}# I can see the cursor but nothing else, ie: any characters that I type
}# are invisible.  I can switch back to the 'X' window and everything
}# looks fine.  When I leave 'X' my initial virtual terminal goes into this
}# state as well which is a problem because the only way to fix the problem
}# is to reboot the machine.  This is difficult when you cannot see what
}# you are typing.
}# 
}# This only happens when a mono VGA monitor is used.
}
}Not true.  This also happens to me when I use X with an EGA
}board.  I intend to look through the documentation to see if
}there is an ioctl() call that can be used to re-initialize the
}screen(s).  I'll let you in on it if I find anything.
}

Boy am I familiar with these bugs. First, let me comment on the X/mono
bug. I just spent a few weeks tracking this down. We, Dell, produce a
UNIX product based on ISC 2.0.2. I assumed the bug was in the Xvga
server management of the VGA controller state in vt switching. I was
wrong. The bug is in the UNIX console driver. I have fixed it in our
UNIX product Dell UNIX 1.1 update 1.1.2 and will be feeding it back
to ISC so they can provide it to their customers. I believe that a
similar problem could cause the EGA bug. The deal is for you folks
with source, the register values in the table used for reloading
the fonts for a monochrome VGA are incorrect. Sorry can't be more
specific due to Licensing Agreements (ya know the deal). You can
cause the same failure without X by starting a vpix session on
a vt and running some graphics app (ex. flight sim) and then doing
a vt flip to a UNIX vt. Notice the cursor is positioned properly,
just no characters on screen (due to lack of fonts for controller
to utilize).

 A workaround is to do:
	stty ENH_C80x25		# Change mode to anything else
 then do:
	stty VGA_MONO80x25	# Changing back causes font reload

 voila - everythings okay (at least until you vt flip into X and out
         again...)

 or

 on one of the blank VTs, start vpix and quit. Voila - fixed again.


 Hope this helps...
 Contact me via email for more discussion of this or other topics.

 George
-- 
	George A. Durden	
	Dell Computer Corporation	P#: (512) 338-8621
	9505 Arboretum Blvd.		!s: cs.utexas.edu!dell!durden
	Austin, Texas 78759		@s: durden@dell.dell.com

logan@inpnms.UUCP (Jim Logan) (03/02/90)

In article <232@inpnms.UUCP> logan@inpnms.UUCP I wrote:
# In article <1990Feb19.195600.7778@hcr.uucp> jeff@hcr.uucp (Jeffrey Roberts)
# writes:
# # When 'X' is started up from any virtual terminal, ie: console, vt01 etc..
# # 'X' starts up with no problem.  If I switch to another virtual terminal
# # I can see the cursor but nothing else, ie: any characters that I type
# # are invisible.
# # This only happens when a mono VGA monitor is used.
# 
# Not true.  This also happens to me when I use X with an EGA
# board.  I intend to look through the documentation to see if
# there is an ioctl() call that can be used to re-initialize the
# screen(s).  I'll let you in on it if I find anything.

Here is a temporary solution to the problem, and a way to access
the EGA 43-line mode.  It's just a quick hack, but it works.

------------------8<--------------------------------------------------------
/*
 *	mode.c		James Logan	Tue Feb 27 19:13:07 EST 1990
 *		Change video modes on the current virtual terminal.
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/at_ansi.h>
#include <sys/vt.h>
#include <sys/kd.h>

#define MAXMODES	19

extern void
	exit(),
	perror();

char
	*MyName;
int
	ModeNum,
	Modes[MAXMODES] = {
		SW_B40x25,
		SW_C40x25,
		SW_B80x25,
		SW_C80x25,
		SW_BG320,
		SW_CG320,
		SW_BG640,
		SW_CG320_D,
		SW_CG640_E,
		SW_EGAMONOAPA,
		SW_CG640x350,
		SW_ENH_CG640,
		SW_EGAMONO80x25,
		SW_ENHB40x25,
		SW_ENHC40x25,
		SW_ENHB80x25,
		SW_ENHC80x25,
		SW_ENHB80x43,
		SW_ENHC80x43
	};


int	main(argc, argv)
	int	argc;
	char	**argv;
{
	MyName = *argv;

	if (argc != 2) {
		(void) fprintf(stderr, "Usage: %s mode-number\n", MyName);
		exit(2);
		/*NOTREACHED*/
	}

	ModeNum = atoi(argv[1]);
	if (ModeNum < 0 || ModeNum > MAXMODES) {
		(void) fprintf(stderr, "%s: mode-number must be between 0 and %d.\n", MyName);
		exit(1);
		/*NOTREACHED*/
	}

	if (ioctl(0, Modes[ModeNum], 0) == -1) {
		perror("ioctl");
		exit(1);
		/*NOTREACHED*/
	}
	exit(0);
	/*NOTREACHED*/
}

------------------8<--------------------------------------------------------



-- 
James Logan                       UUCP: uunet!inpnms!logan
Data General Telecommunications   Inet: logan%inpnms@uunet.uu.net
(301) 590-3198