Modern GPU programming

Peter Stuge stuge-linuxbios at cdy.org
Sat Sep 21 01:51:01 CEST 2002


Hi!

I found this on the sourceforge page about xbox-linux.  It briefly discusses
the capabilities of a modern graphics processing unit, specifically the
nVidia model found in Xboxes.  It also shows how to set up 80x25 text mode
on these chips.  This should be useful information for the LinuxBIOS project
as well.

http://xbox-linux.sourceforge.net/articles.php?aid=2002181091439

Basically it contains this code:

void crtcout(unsigned char reg, unsigned char data) {
	/* a single 16 bit access might also work */
	_asm {
		mov al, reg
		mov ebx, 0xFD6013d4
		mov [ebx], al
		mov al, data
		mov 1[ebx], al
	}
}

void settextmode() {
	crtcout(0x00, 0x5F);
	crtcout(0x01, 0x4F);
	crtcout(0x04, 0x54);
	crtcout(0x05, 0x80);
	crtcout(0x07, 0x1F);
	crtcout(0x10, 0x9C);
	crtcout(0x17, 0xA3);
}

crtcout() uses MMIO to access the CRTC registers since legacy IO is disabled
in the Xbox.  The MMIO memory region is programmed into the GPU by the BIOS.
(0xFD000000 with vanilla Xbox kernel)  However, the offset of the CRTC in
this memory region is "magic" and probably only known by the chipset
manufacturer, unless reverse engineered.  The web page also mentions the
need to set up a font on that particular hardware, however most PC graphics
cards should already have a font onboard, right?

Anyway, I thought this might be of interest to members of this list.


//Peter



More information about the coreboot mailing list