[mythtv] Matrox G200 TV out works! HOWTO!

Colin Panisset mythtv-dev@snowman.net
Tue, 17 Dec 2002 16:17:00 -0800


Since I've just spent a hair-pulling time getting this lot going, I figured 
I'd share the joy and perhaps help others work out how to get this beast 
set up. Perhaps it'll even be useful for those using a G400 with TV-out on 
the second head.

This is kinda long...

WARNINGS:
	** keep a rescue floppy/CD!
	** don't blame me if you fry your hardware/TV/monitor trying this. Tweaking 
	video card settings at the register level can cause signals which may drive 
	display hardware beyond their design specs. You can kill hardware like 
	this.
	** no warranty expressed or implied, contents under pressure, not suitable 
	for children, not a floatation device, sell-by date on bottom of package. 

So, here we go:

Step 1: Upgrade the G200 BIOS

Step 1.1: Download the latest BIOS for the card from 
	http://www.matrox.com/mga/support/drivers/bios/home2.cfm

Step 1.2: You'll need to use DOS to flash the BIOS -- I used the FreeDOS 
	install floppy (available from 
http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/beta8/instdisk/1.44/) 
	as a temporary boot disk. dd the image to a floppy, then mount it. Delete 
	most of the contents, except for the command.com and kernel.sys. Copy in 
	all the .bin files from the bios .ZIP, plus ubiosdos.exe, dos4gw.exe, 
	english.mmf,  and progbios.exe. 
	Leave the disk writeable.

Step 1.3: boot the machine from the FreeDOS floppy, and execute:
	
	ubiosdos

	I didn't make a backup disk, just pressed enter and let it flash 
	(note: if things screw up, this could be your undoing)

Step 1.4: force the G200 BIOS to turn on the TV out at boot time:

	progbios -maven ntsc (use pal for PAL, and off for, um, off)

Step 1.5: reboot. At this point, I already had my TV connected to the 
	external breakout box, and was delighted to see the Award BIOS boot 
	messages. I was able to alter PC BIOS settings, and all. This could be 
	important... :)

Step 2: Build an appropriate kernel

Step 2.1: I built the following into the kernel (not built as modules):
	Character devices -> I2C support -> I2C support
	Character devices -> I2C support -> I2C bit-banging interfaces
	Character devices -> I2C support -> I2C device interface
	Character devices -> I2C support -> I2C /proc interface
	Console drivers -> Frame-buffer support -> Matrox acceleration
	Console drivers -> Frame-buffer support -> G100/G200/ ...
	Console drivers -> Frame-buffer support -> Matrox I2C support
	Console drivers -> Frame-buffer support -> G400 second head support
	Console drivers -> Frame-buffer support -> Matrox /proc interface

	NOTE: you need the G400 second head support even if you have a G200. It
	builds the driver for the MAVEN chip, which actually does the TV-out 
	conversion.

Step 2.2: make dep, make bzImage, make modules, make modules_install. Copy 
	bzImage to the boot wherever and lilo it. Read 
	/usr/src/linux/Documentation/fb/matroxfb.txt for options you can pass to 
	the Matrox framebuffer driver through lilo

You could boot the new kernel at this point if you liked, but make sure 
you've kept your monitor attached to the PC, because the MGA console driver 
switches to a VESA mode that my TV couldn't display.

Step 3: Set up XFree86

Step 3.1: In your /etc/X11/XF86Config-4, put something like this:

---- Begin snippet ----

Section "Monitor"
        Identifier "TV"
        VendorName "Unknown"
        ModelName  "Unknown"
        HorizSync 31-50
        VertRefresh 60		# This is for NTSC. PAL should use 50
EndSection

Section "Device"
        Identifier "My Video Card"
        Driver "mga"
        BoardName "Unknown"
        Option "UseFBDev" "on"
        Option "HWCursor" "off"
EndSection

Section "Device"
        Identifier "Linux Frame Buffer"
        Driver "fbdev"
        BoardName "Unknown"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device "My Video Card"
        Monitor "TV"
        DefaultDepth 16
        Subsection "Display"
                Depth 16
                Modes "800x600"
        EndSubSection
EndSection

---- End snippet ----

Step 3.2: restart X (ctrl-alt-backspace) to make sure it's using the fb 
	device. Check /var/log/XFree86.0.log to make sure.

Step 3.3: Get matroxset from the MPlayer distribution 
	(http://www.mplayerhq.hu/homepage/), build and install it (it's in the 
	TVout subdirectory of the source). Also build and install fbset from the 
	same distribution.

	Get maven-prog from http://platan.vc.cvut.cz/~vana/matroxfb.html -- build 
	it (it'll end up being called "matrox", but you can rename it) and install 
	it.

Step 3.4: Mirror the framebuffer onto the TV out with matroxset:

	matroxset -f /dev/fb/0 -m 3	# use -m 1 for monitor-only, -m 2 for TV only
	matroxset -f /dev/fb/0 -o 1 2	# set output 1 to NTSC. Use -o 1 1 for PAL

Step 3.5: Tweak the display

	This is where you may end up typing blind. See 
	http://davedina.apestaart.org/download/doc/Matrox-TVOUT-HOWTO-0.1.txt for a 
	great explanation

	When you have the size and location of the screen set to your liking, use  
	"maven-prog" (or "matrox", if you didn't rename it) from above to set the 
	black level, white level, saturation, hue, antialiasing, and whatnot. My 
	settings are:
	
		matrox 0x0e 0x3f	# sets the black level
		matrox 0x1e 0xcf	# sets the white level
		matrox 0x22 0x76	# sets the hue

	See http://platan.vc.cvut.cz/~vana/maven/mavenreg.html for a description of 
	the MAVEN chip registers.

	I put the resulting fbset and matrox commands in my mythtv user's 
	.xsession.

Step 3.6: To put the text console back on the TV after the boot process 
	turns it off, I put the following lines in /etc/rc.sysinit, right after 
	devfsd is launched:

		/sbin/matroxset -f /dev/fb/0 -m 3       # both monitor and TV
		/sbin/matroxset -f /dev/fb/0 -o 1 2     # set TV to NTSC

Step 4: Beer (or tea, coffee, wine, spring water, or whatever)

That's it. I only wish it had been as quick and easy to figure out as it was 
to type this up :)

Notes: 
	** if you built ALSA drivers for a previous kernel, you'll probably have to 
	build and install them again.
	** The G200 (and, presumably, the G400) will display up to 1024x768 through 
	the miracle of scan conversion, but 800x600 works well for MythTV for me.
	** don't be concerned if it seems like X is taking a long time to start up 
	in a mode that the TV can sync to. My TV also flashes like crazy for about 
	5 seconds while this is going on. Eventually, it gets there.
	** My Shuttle SV24 locks up sometimes with this card. It's reproducible, so 
	must be a driver problem. It happens when running "make xconfig" from the 
	linux kernel tree, and sometimes when dragging the scrollbar up or down in 
	Mozilla. Turning off various acceleration features may resolve this, but I 
	haven't tried that yet.
	** I have run mplayer with the normal Xvideo output in this mode, and it's 
	just fine. You could also build it with the mga driver and have it use the 
	hardware acceleration, but I haven't got there yet.