                    ;//======================================================================
                    ;//======================================================================
                    ;//==                                                                  ==                       
                    ;//==  -PSX2-   FACE REMOVER - PERSPECTIVE - NON FOG - TRIANGLE LIST   ==
                    ;//==                                                                  ==                   
                    ;//==                                                                  ==                   
                    ;//== Features : Transform vertices into screen space. Rgbas are       ==                   
                    ;//==            converted from float to integer. Uv to stq            ==                   
                    ;//==            perspective correction. clear adc/fog field.          ==   
                    ;//==            Support 24 bits and 16 bits Zbuffers.                 ==           
                    ;//==                                                                  ==                   
                    ;//==            Optimal!!!                                 -CHECKED-  ==                   
                    ;//==                                                                  ==                   
                    ;//======================================================================
                    ;//======================================================================


    ;----------------------------------------------------------------------------
    MULx.w VF21, VF00, VF00             LQ.xyz VF03,  (0+0*vertexSize)(VI01)    ; Clean fog-1           - Load position-1
    MULx.w VF22, VF00, VF00             LQ.xy VF09,   (1+0*vertexSize)(VI01)    ; Cleam fog-2           - Load uv-1
    MULx.w VF23, VF00, VF00             LQ.xyzw VF15, (2+0*vertexSize)(VI01)    ; Clean fog-3           - Load rgba-1
    MULAw.xyzw ACC, VF31, VF00          MR32.z VF09, VF00                       ; Transform pos-1       - Build stq-1
    MADDAx.xyw ACC, VF28, VF03          LQ.xyz VF04,  (0+1*vertexSize)(VI01)    ; Transform pos-1       - Load position-2
    MADDAy.xyw ACC, VF29, VF03          LQ.xy VF10,   (1+1*vertexSize)(VI01)    ; Transform pos-1       - Load uv-2
    MADDz.xyzw VF03, VF30, VF03         LQ.xyzw VF16, (2+1*vertexSize)(VI01)    ; Transform pos-1       - Load rgba-2
    MULAw.xyzw ACC, VF31, VF00          MR32.z VF10, VF00                       ; Transform pos-2       - Build stq-2
    MADDAx.xyw ACC, VF28, VF04          LQ.xyz VF05,  (0+2*vertexSize)(VI01)    ; Transform pos-2       - Load position-3
    MADDAy.xyw ACC, VF29, VF04          DIV Q, VF00w, VF03w                     ; Transform pos-2       - Compute 1/posz-1
    MADDz.xyzw VF04, VF30, VF04         LQ.xy VF11,   (1+2*vertexSize)(VI01)    ; Transform pos-2       - Load uv-3 
    MULAw.xyzw ACC, VF31, VF00          LQ.xyzw VF17, (2+2*vertexSize)(VI01)    ; Transform pos-3       - Load rgba-3
    MADDAx.xyw ACC, VF28, VF05          MR32.z VF11, VF00                       ; Transform pos-3       - Build stq-3
    MADDAy.xyw ACC, VF29, VF05          ISW.x VI08, 0(VI14)                     ; Transform pos-3       - Store number of vertices      
    MADDz.xyzw VF05, VF30, VF05         IADDIU VI06, VI01, 0                    ; Transform pos-3       - Clone input buffer adress
    MULAw.xyz ACC, VF02, VF00           IADDIU VI05, VI14, 1                    ; Project pos-1         - Clone output buffer adress
    MADDq.xyz VF21, VF03, Q             DIV Q, VF00w, VF04w                     ; Project pos-1         - Compute 1/posz-2
    MULq.xyz VF09, VF09, Q              SQ.yzw VF01, 0(VI14)                    ; Build stq-1           - Store Gif-Tag     
    FTOI0.xyzw VF15, VF15               IADDIU VI08, VI00, 0x4000               ; Float rgba-1          - Prepare ADC flag 
    FTOI0.xyzw VF16, VF16               IADD VI08, VI08, VI08                   ; Float rgba-2          - Prepare ADC flag
    MULx.w VF24, VF00, VF00             MR32.w VF26, VF00                       ; Clean fog-4           - Clean fog-6
    MULx.w VF25, VF00, VF00             ILW.z VI07, vuSDVUSwitch(VI00)          ; Clean fog-5           - Load Back/Front remover control
FRLgeneratorLoop:;---------------------------------------------------------------   
    FTOI4.xyzw VF03, VF21               IADDIU VI06, VI06, (3*vertexSize)       ; Convert pos-1         - Increment input buffer adress
    FTOI0.xyzw VF17, VF17               LQ.xyz VF06,  (0+0*vertexSize)(VI06)    ; Float rgba-3          - Load position-4 
    MULAw.xyz ACC, VF02, VF00           LQ.xy VF12,   (1+0*vertexSize)(VI06)    ; Project pos-2         - Load uv-4
    MADDq.xyz VF22, VF04, Q             DIV Q, VF00w, VF05w                     ; Project pos-2         - Compute 1/posz-3 
    MULq.xyz VF10, VF10, Q              LQ.xyzw VF18, (2+0*vertexSize)(VI06)    ; Build stq-2           - Load rgba-4   
    MULAw.xyzw ACC, VF31, VF00          MR32.z VF12, VF00                       ; Transform pos-4       - Buils stq-4
    MADDAx.xyw ACC, VF28, VF06          SQI.xyzw VF09, (VI05++)                 ; Transform pos-4       - Store stq-1 
    MADDAy.xyw ACC, VF29, VF06          SQI.xyzw VF15, (VI05++)                 ; Transform pos-4       - Store rgba-1 
    MADDz.xyzw VF06, VF30, VF06         SQI.xyzw VF03, (VI05++)                 ; Transform pos-4       - Store position-1 
    FTOI4.xyzw VF04, VF22               NOP                                     ; Convert pos-2             
    MULAw.xyz ACC, VF02, VF00           LQ.xyz VF07,  (0+1*vertexSize)(VI06)    ; Project pos-3         - Load position-5
    MADDq.xyz VF23, VF05, Q             LQ.xy VF13,   (1+1*vertexSize)(VI06)    ; Project pos-3         - Load uv-5
    MULq.xyz VF11, VF11, Q              LQ.xyzw VF19, (2+1*vertexSize)(VI06)    ; Build stq-3           - Load rgba-5
    SUB.xyzw VF22, VF22, VF21           MR32.z VF13, VF00                       ; Build BF vector-1     - Build stq-5
    MULAw.xyzw ACC, VF31, VF00          SQI.xyzw VF10, (VI05++)                 ; Transform pos-5       - Store stq-2
    SUB.xyzw VF21, VF23, VF21           DIV Q, VF00w, VF06w                     ; Build BF vector-2     - Compute 1/zpos-4
    MADDAx.xyw ACC, VF28, VF07          SQI.xyzw VF16, (VI05++)                 ; Transform pos-5       - Store rgba-2
    MADDAy.xyw ACC, VF29, VF07          SQI.xyzw VF04, (VI05++)                 ; Transform pos-5       - Store position-2 
    MADDz.xyzw VF07, VF30, VF07         NOP                                     ; Transform pos-5
    OPMULA.xyz ACC, VF22, VF21          LQ.xyz VF08,  (0+2*vertexSize)(VI06)    ; Cross product trig-1  - Load position-6 
    OPMSUB.xyz VF21, VF21, VF22         LQ.xy VF14,   (1+2*vertexSize)(VI06)    ; Cross product trig-1  - Load uv-6
    FTOI4.xyzw VF05, VF23               LQ.xyzw VF20, (2+2*vertexSize)(VI06)    ; Convert pos-3         - Load rgba-6
    MULAw.xyzw ACC, VF31, VF00          MR32.z VF14, VF00                       ; Transform pos-6       - Build stq-6
    MADDAx.xyw ACC, VF28, VF08          IADDIU VI04, VI00, 0x0020               ; Transform pos-6       - Mask MAC flag 0000 0000 0010 0000
    MADDAy.xyw ACC, VF29, VF08          FMAND VI03, VI04                        ; Transform pos-6       - Extract z sign flag
    MADDz.xyzw VF08, VF30, VF08         IBNE VI03, VI07, FRLwarper1             ; Transform pos-6       - Face removal test
    MULAw.xyz ACC, VF02, VF00           SQI.xyzw VF11, (VI05++)                 ; Project pos-4         - Store stq-3
    NOP                                 MFIR.w VF05, VI08                       ;                       - Apply ADC flag if test failed
FRLwarper1:;---------------------------------------------------------------------   
    MADDq.xyz VF24, VF06, Q             DIV Q, VF00w, VF07w                     ; Project pos-4         - Compute 1/posz-5
    MULq.xyz VF12, VF12, Q              SQI.xyzw VF17, (VI05++)                 ; Build stq-4           - Store rgba-3
    FTOI0.xyzw VF18, VF18               IBEQ VI06, VI10, FRLgeneratorEnd        ; Float rgba-4          - End test
    FTOI0.xyzw VF19, VF19               SQI.xyzw VF05, (VI05++)                 ; Float rgba-5          - store position-3
    FTOI4.xyzw VF06, VF24               IADDIU VI06, VI06, (3*vertexSize)       ; Convert pos-4         - Increment input buffer adress
    FTOI0.xyzw VF20, VF20               LQ.xyz VF03,  (0+0*vertexSize)(VI06)    ; Float rgba-6          - Load position-1  
    MULAw.xyz ACC, VF02, VF00           LQ.xy VF09,   (1+0*vertexSize)(VI06)    ; Project pos-5         - Load uv-1
    MADDq.xyz VF25, VF07, Q             DIV Q, VF00w, VF08w                     ; Project pos-5         - Compute 1/posz-6 
    MULq.xyz VF13, VF13, Q              LQ.xyzw VF15, (2+0*vertexSize)(VI06)    ; Build stq-5           - Load rgba-1
    MULAw.xyzw ACC, VF31, VF00          MR32.z VF09, VF00                       ; Transform pos-1       - Build stq-1
    MADDAx.xyw ACC, VF28, VF03          SQI.xyzw VF12, (VI05++)                 ; Transform pos-1       - Store stq-4   
    MADDAy.xyw ACC, VF29, VF03          SQI.xyzw VF18, (VI05++)                 ; Transform pos-1       - Store rgba-4
    MADDz.xyzw VF03, VF30, VF03         SQI.xyzw VF06, (VI05++)                 ; Transform pos-1       - Store position-4
    FTOI4.xyzw VF07, VF25               NOP                                     ; Convert pos-5
    MULAw.xyz ACC, VF02, VF00           LQ.xyz VF04,  (0+1*vertexSize)(VI06)    ; Project pos-6         - Load position-2
    MADDq.xyz VF26, VF08, Q             LQ.xy VF10,   (1+1*vertexSize)(VI06)    ; Project pos-6         - Load uv-2
    MULq.xyz VF14, VF14, Q              LQ.xyzw VF16, (2+1*vertexSize)(VI06)    ; Build stq-6           - Load rgba-2
    SUB.xyzw VF25, VF25, VF24           MR32.z VF10, VF00                       ; Build BF vector-1     - Build stq-2
    MULAw.xyzw ACC, VF31, VF00          SQI.xyzw VF13, (VI05++)                 ; Transform pos-2       - Store stq-5
    SUB.xyzw VF24, VF26, VF24           DIV Q, VF00w, VF03w                     ; Build BF vector-2     - Compute 1/posz-1
    MADDAx.xyw ACC, VF28, VF04          SQI.xyzw VF19, (VI05++)                 ; Transform pos-2       - Store rgba-5
    MADDAy.xyw ACC, VF29, VF04          SQI.xyzw VF07, (VI05++)                 ; Transform pos-2       - Store position-5
    MADDz.xyzw VF04, VF30, VF04         NOP                                     ; Transform pos-2
    OPMULA.xyz ACC, VF25, VF24          LQ.xyz VF05,  (0+2*vertexSize)(VI06)    ; Cross product trig-2  - Load position-3
    OPMSUB.xyz VF24, VF24, VF25         LQ.xy VF11,   (1+2*vertexSize)(VI06)    ; Cross product trig-2  - Load uv-3
    FTOI4.xyzw VF08, VF26               LQ.xyzw VF17, (2+2*vertexSize)(VI06)    ; Convert pos-6         - Load rgba-3
    MULAw.xyzw ACC, VF31, VF00          MR32.z VF11, VF00                       ; Transform pos-3       - Build stq-3
    MADDAx.xyw ACC, VF28, VF05          IADDIU VI04, VI00, 0x0020               ; Transform pos-3       - Mask MAC flag 0000 0000 0010 0000
    MADDAy.xyw ACC, VF29, VF05          FMAND VI03, VI04                        ; Transform pos-3       - Extract z sign flag
    MADDz.xyzw VF05, VF30, VF05         IBNE VI03, VI07, FRLwarper2             ; Transform pos-3       - Face removal test
    MULAw.xyz ACC, VF02, VF00           SQI.xyzw VF14, (VI05++)                 ; Project pos-1         - Store stq-6
    NOP                                 MFIR.w VF08, VI08                       ;                       - Apply ADC flag if test failed
FRLwarper2:;---------------------------------------------------------------------   
    MADDq.xyz VF21, VF03, Q             DIV Q, VF00w, VF04w                     ; Project pos-1         - Compute 1/posz-2
    MULq.xyz VF09, VF09, Q              SQI.xyzw VF20, (VI05++)                 ; Build stq-1           - Store rgba-6
    FTOI0.xyzw VF15, VF15               IBNE VI06, VI10, FRLgeneratorLoop       ; Float rgba-1          - End test 
    FTOI0.xyzw VF16, VF16               SQI.xyzw VF08, (VI05++)                 ; Float rgba-2          - Store position-6
FRLgeneratorEnd:;----------------------------------------------------------------

                        
;//================================================================================================================
;//=======================================                  =======================================================
;//===================                          THE END                                   =========================
;//=======================================                  =======================================================
;//================================================================================================ JCL Mars 2001 =
