;////////////////////////////////////////////////////////////////////////////////////////
;//
;// Note that this code is highly unoptimized, but might be useful to learn from or so.
;//

ViewScreenMatrix = 0
Giftag           = 4
Color            = 5
Data             = 6
Dest             = 30

.global         g_PbVu1_Envmap
.global         g_PbVu1_Envmap_End                
.global         g_Vu1_Triangle
.global         g_Vu1_Triangle_End                
                        
                .p2align 4  ; This aligns the following data to quadword alignment
                .vu

g_PbVu1_Envmap:

                nop                             xtop        vi14
                                
                nop                             lq          vf28, 0(vi00)
                nop                             lq          vf29, 1(vi00)
                nop                             lq          vf30, 2(vi00)
                nop                             lq          vf31, 3(vi00)

                nop                             lq          vf24, 4(vi00)
                nop                             lq          vf25, 5(vi00)
                nop                             lq          vf26, 6(vi00)
                nop                             lq          vf27, 7(vi00)

                nop                             iaddiu      vi02, vi14, 246         ; 
                nop                             iaddiu      vi03, vi14, 246         ; xgkick adree
                nop                             iaddiu      vi01, vi14, 1           ; coord adress
                
                nop                             lq.xyzw     vf06, 0(vi14)     ; giftag
                nop                             sqi.xyzw    vf06, (vi02++)          ; store the giftag
                
                nop                             iaddiu      vi05, vi00, 80
                add.xyzw    vf06,vf00,vf00      loi 125.0
                addi        vf07,vf00,I         loi 220.0
                addi        vf10,vf00,I         nop
                ftoi0       vf10, vf10          nop
t_loop:      
                nop                             lqi         vf05, (vi01++)          ; XYZ
                nop                             lqi         vf09, (vi01++)          ; Normal

                ;////////////////////////////////////////////////////////////////////////////////////////
                ;// Project point

                mulax     acc,  vf28, vf05x     nop                                 
                madday    acc,  vf29, vf05y     nop                                 
                maddaz    acc,  vf30, vf05z     nop                                 
                maddw     vf05, vf31, vf05w     nop                                 
                nop                             div         q, vf00w, vf05w         
                
                ;/////////////////////////////////////////////////////////////////////////////////////////
                ;// Rotate normal

                mulax     acc,   vf24, vf09x    nop                                 
                madday    acc,   vf25, vf09y    nop                                 
                maddaz    acc,   vf26, vf09z    nop                                 
                maddw     vf09,  vf27, vf09w    loi         0.5 ;// 127.0
               
                ;/////////////////////////////////////////////////////////////////////////////////////////
                ;// trunc if negative
                
                muli      vf09,  vf09, i        nop
                addi.xy   vf09xy, vf09xy, i     waitq
                
                mulq      vf05, vf05, q         nop                                 
                ftoi4     vf05, vf05            nop                              ; fixedpoint for gif
                mulq.xy   vf09xy, vf09xy, q     nop       
                addq.z    vf09z,  vf00z, q      nop        
                nop                             sqi         vf09, (vi02++)       ; ST
                nop                             sqi         vf10, (vi02++)       ; RGA
                nop                             sqi         vf05, (vi02++)       ; XYZ
                
                nop                             iaddi       vi05, vi05, -1       ; 
                nop                             nop                              ;
                nop                             ibne        vi05, vi00, t_loop   ; loop check
                nop                             nop
                nop                             xgkick      vi03
                nop[e]                          nop
                nop                             nop

g_PbVu1_Envmap_End: