Graphics

There is no picture on the screen, but the drawing loop is running
You are probably handing a bad segment address to the RSP graphics pipeline. This problem is easy to overlook, as there are no warnings. Make sure you thoroughly understand how a MIPS family processor performs addressing and how KSEG0 works (most games run in KSEG0). It allows cached access with no TLB translation. All CPU registers are accessible. KSEG addresses use the most significant bits of the address to indicate the addressing modes.

Figure 2.2.1  CPU KSEG0-3 Addresses

The RSP uses a segment addressing scheme with base pointers. It is very easy to hand a CPU KSEG0 address to the RSP by mistake and spend hours locating a simple error. Note that KSEG0 CPU address would reference a invalid segment if decoded as an RSP address.

Figure 2.2.2  RSP Addresses

For example, if you have the following code, the RSP/RDP pipeline will receive garbage:

Mtx matrix;
gSPMatrix(gdl++, &matrix, G_MTX_.....);

matrix is a KSEG0 CPU address 0x8xxxxxxx. When this is handed to RSP, it fetches garbage. Below is a list of common commands with pointers:

Keep in mind that CPU addresses and RSP/RDP addresses uses different addressing schemes and are not interchangeable.

One useful way to debug possible display list problems is to link with the GBI dumping routines in libgu, and print out the display list. This will immediately show bad pointers and garbage matrices. See the man page for guParseGbiDL (3P) and guParseRdpDL (3P).

Ending a Display List
Make sure that your recent gbi display edit has gSPEndDisplayList in each display list. Without this, the RSP will probably hang. The RDP requires a gDPFullSync at the end of the entire display list sequence to make the DP interrupt the CPU for notification.

Flaky Video
The beginning of the framebuffer and z-buffer addresses must be 64 byte aligned.

Copyright © 1999
Nintendo of America Inc. All Rights Reserved
Nintendo and N64 are registered trademarks of Nintendo
Last Updated January, 1999