------------------------------------------------------------------
The micro codes in this archive.
------------------------------------------------------------------
(1) gspF3DEX.fifo.o/gspF3DEX.NoN.fifo.o:

They are based on Fast3D ucode. And supports 32 vertices cache, 2 
triangles' instruction and more DL links (10->18).

gspF3DEX.fifo.o is with near clipping, gspF3DEX.NoN.fifo.o is 
without near clipping.

(2) gspF3DLX.fifo.o/gspF3DLX.NoN.fifo.o:

They have no subpixel calculation of y screen to get more 
performance. So, some wrinkles may appear on the texture.

F3DLX supports all F3DEX's gbi. And, F3DLX can control clipping 
enable/disable. If disable clipping, you can get more 
performance. See "NewFunctions."

gspF3DLX.fifo.o is with near clipping, gspF3DLX.NoN.fifo.o is 
without near clipping.
    
These ucodes are supported in release 0.94 and later.

(3) gspF3DLX.Rej.fifo.o/gspF3DLP.Rej.fifo.o:

They don't support clipping but supports triangle rejection.
    
	"Triangle rejection" works ...

	+ Triangles which are entirely inside the rejecting 
	  rectangle are drawn. 
	+ Triangles which stretch from inside the rejection 
	  rectangle to outside or entirely outside the rectangle 
	  are rejected.

This rejection rectangle name is the rejection box.  Rejection box 
is 2-6 times size of the screen rectangle.  By default, rejection
box is 2 times of the screen rectangle.  We can change the ratio 
of the rejection box with g*SPClipRatio().  g*SPClipRation() accepts 
FRUSTRATIO_2 to FRUSTRATIO_6.  And triangles are tested with far 
plane in z direction.  Near plane rejection is not available. 

             -160                        480
          -120 +--------------------------+
               |                          | ___Rejection box
               |      0           320     |/   (FRUSTRATIO_2)
               |    0 +------------+      |
               |      |            |      |
               |      |            |      |
               |      | TV screen  |      |
               |      |            |      |
               |      |            |      |
               |   240+------------+      |
               |                          |
               |                          |
           360 +--------------------------+

A large triangle one vertex are outside are not drawn by 
rejected.  To avoid this, large triangle may be divided to small 
triangles in modeling stage.

F3DLX.Rej and F3DLP.Rej are optimized for executing 
g*SP2Triangle. So you'd better use g*SPTriangle to get more 
performance.

Texture perspective correction is available in F3DLX.Rej, 
otherwise not avialable in F3DLP.Rej. But, F3DLP.Rej is faster 
than F3DLX.Rej.

F3DLX.Rej and F3DLP.Rej don't support G_CULL_BOTH.

These ucodes are supported in release 0.96 and later.

(4) gspL3DEX.fifo.o:

This is based on Line3D ucode. And supports 32 vertices cache.  
This may be used to draw wireframe objects specified by 
1Triangle, 2Triangles and 1Quadrangle.  These ucodes are 
supported in release 1.00 and later.


------------------------------------------------------------------
Header files:

	headers-2.0e/*.h	Header files for U64 Dev 2.0e
	headers-2.0f/*.h	Header files for U64 Dev 2.0f
	headers-2.0g/*.h	Header files for U64 Dev 2.0g

        Copy one of them to /usr/include/PR.

About compatibility of GBI.

These's *not* binary level compatibility of some GBI macros 
between Fast3D(original) and this released ucode.

But, we can get source level compatibility by gbi.h. Using 
compile option, gbi.h translates DL to new GBI for 
F3DEX/LX/LX.Rej/LP.Rej.  When you'd like to use this released 
ucode, you can get new GBI by definition the keyword of 
"F3DEX_GBI" before including ultra64.h.

When you made DL for new ucode in static_ex.c, you should add 
"#define F3DEX_GBI" before "#include <ultra64.h>" as:

  static_ex.c:

	|
	|#define  F3DEX_GBI
	|#include <ultra64.h>
	|
  
In release 0.96 or later, all gbi commands held compatibility 
between F3DEX, F3DLX, F3DLX.Rej and F3DLP.Rej. So you can use 
same gbi binary data in each ucode.  But, there is a small 
difference about rejecting between F3DL*.Rej and F3DEX/LX. So, 
it's necessary to be care for the difference.


------------------------------------------------------------------
Minimum size of fifo buffer:

F3DEX/LX/LX.Rej/LP.Rej/L3DEX ucodes need 0x300 bytes for fifo 
buffer at least. Please remember it is greater than Fast3D's 
(= 0x180 bytes).


------------------------------------------------------------------
OS patches:

In directory os_patches/ , there are some patches for libultra 
to support g*SPLoadUcode GBI. If you use g*SPLoadUcode GBI, you 
should patch up libultra*.a.

Type following to make patched libultra*.a.

    % cd os_patches
    % make

After `make', you can find patched libultra.a, libultra_rom.a 
and libultra_d.a in directory os_patches/. Please move them into 
/usr/lib and use them.

	Yoshitaka Yasumoto
	R&D3 Nintendo. Co., Ltd.
