vertexSize=4 ExpandBuffer1=0x228 ExpandBuffer2=0x2FA XExpandBuffer2=0x2A1 ClippingBuffer=0x31A TLClipRedLine=0x37E TSClipRedLine=0x392 vuSymbGifTag=0x3CD # VI12: output buffer1 # VI13: output buffer2 # VI14: current output buffer # VI12 and VI13 are swapped. VI14 = VI12 always # include TransMatrix 0: SUB.z VF28, VF28, VF28 LOI 0.5 8: SUB.z VF29, VF29, VF29 LQ.xyw VF28, vuSDmat0(VI00) 10: SUB.z VF30, VF30, VF30 LQ.xyw VF29, vuSDmat1(VI00) 18: ADDw.z VF31, VF00, VF00 LQ.xyw VF30, vuSDmat2(VI00) 20: SUB.w VF02, VF02, VF02 LQ.xyw VF31, vuSDmat3(VI00) 28: MULi.w VF21, VF28, I ILw.x VI02, vuSDVUSwitch(VI00) 30: MULi.w VF22, VF29, I LQ.xyz VF02, vuSDoffXoffYzShift(VI00) 38: MULi.w VF23, VF30, I IADDIU VI03, VI00, 2 40: MULi.w VF25, VF31, I LQ.xyz VF05, vuSDcamWcamHzScale(VI00) 48: SUBw.xy VF28, VF28, VF21 IAND VI03, VI02, VI03 50: SUBw.xy VF29, VF29, VF22 LQ.xy VF03, vuSDrealOffset(VI00) 58: SUBw.xy VF30, VF30, VF23 IBEQ VI03, VI00, SwitchNoClip 60: SUBw.xy VF31, VF31, VF25 IADDIU VI05, VI00, 4 SwitchClipping: 68: MUL.xy VF28, VF28, VF05 IAND VI05, VI02, VI05 70: MUL.xy VF29, VF29, VF05 IADDIU VI06, VI00, 8 78: MUL.xy VF30, VF30, VF05 IADDIU VI12, VI00, ExpandBuffer1 80: MUL.xyz VF31, VF31, VF05 IBEQ VI05, VI00, SwitchTSCLip 88: ADD.xy VF02, VF02, VF03 IAND VI06, VI02, VI06 SwitchTLCLip: 90: NOP IADDIU VI13, VI00, XExpandBuffer2 98: NOP IADD VI14, VI00, VI12 A0: NOP IBEQ VI06, VI00, SwithSystemExit A8: NOP IADDIU VI15, VI00, TLCullRender B0: NOP B SwithSystemExit B8: NOP IADDIU VI15, VI00, TLClipRender SwitchTSCLip: C0: NOP IADDIU VI13, VI00, XExpandBuffer2 C8: NOP IADD VI14, VI00, VI12 D0: NOP IBEQ VI06, VI00, SwithSystemExit D8: NOP IADDIU VI15, VI00, TSCullRender E0: NOP B SwithSystemExit E8: NOP IADDIU VI15, VI00, TSClipRender SwitchNoClip: F0: MUL.xy VF28, VF28, VF05 IADDIU VI04, VI00, 1 F8: MUL.xy VF29, VF29, VF05 IAND VI04, VI02, VI04 100: MUL.xy VF30, VF30, VF05 IADDIU VI12, VI00, ExpandBuffer1 108: MUL.xyz VF31, VF31, VF05 IADDIU VI13, VI00, ExpandBuffer2 110: ADD.xy VF02, VF02, VF03 IBEQ VI04, VI00, SwitchNoFog 118: NOP IADD VI14, VI00, VI12 120: NOP B SwithSystemExit 128: NOP IADDIU VI15, VI00, FoggedRender SwitchNoFog: 130: NOP IADDIU VI15, VI00, GenericRender SwithSystemExit: 138: NOP ISw.y VI15, vuSDVUSwitch(VI00) # end include PRSrestart: 140: NOP XTOP VI01 ; input buffer 148: NOP XITOP VI09 ; vertex count 150: NOP IADD VI10, VI09, VI09 158: NOP IADD VI10, VI10, VI09 160: NOP IADD VI10, VI10, VI09 168: NOP IADDIU VI08, VI00, 0x7FF0 170: NOP IADDIU VI11, VI10, (3*vertexSize) 178: NOP ILw.y VI15, vuSDVUSwitch(VI00) 180: NOP IAND VI11, VI11, VI08 188: NOP IADD VI10, VI01, VI10 190: NOP IADD VI11, VI01, VI11 # decompress vertices 198: NOP IADD VI02, VI00, VI01 1A0: NOP LQ.xyz VF10, (0+0*vertexSize)(VI02) ; - load position-1 1A8: NOP LQ.xyzw VF07, (1+0*vertexSize)(VI02) ; - load uv-1 1B0: NOP LOI 0.000976562 ; - vertex scale 1/1024 1B8: ADDi.y VF04, VF00, I LQ.xyzw VF08, (3+0*vertexSize)(VI02) ; - load normal 1C0: ITOF0.xyz VF11, VF10 NOP 1C8: ITOF0.xyzw VF07, VF07 LOI 0.000244141 ; - uv scale 1/4096 1D0: ADDi.x VF03, VF00, I NOP 1D8: ITOF0.xyzw VF08, VF08 LOI 255 1E0: MULi.xyzw VF01, VF00, I LQ.xyzw VF10, (1+1*vertexSize)(VI02) 1E8: MULy.xyz VF06, VF11, VF04 LQ.xyz VF09, (0+1*vertexSize)(VI02) ; scale position-1 1F0: MULx.xyzw VF07, VF07, VF03 LOI 0.0078125 ; scale uv-1 - normal scale 1/128 1F8: MULi.xyzw VF08, VF08, I LQ.xyzw VF11, (3+1*vertexSize)(VI02) ; scale normal-1 200: MAX.xyzw VF05, VF01, VF01 NOP ; rbga-1 = 0,0,0,255 DecompressionLoop: 208: NOP SQ.xyz VF06, (0+0*vertexSize)(VI02) ; - store position-1 210: ITOF0.xyz VF13, VF09 SQ.xyzw VF07, (1+0*vertexSize)(VI02) ; - store uv-1 218: NOP SQ.xyzw VF08, (3+0*vertexSize)(VI02) ; - store normal-1 220: ITOF0.xyzw VF14, VF10 IADDIU VI03, VI02, vertexSize 228: ITOF0.xyzw VF15, VF11 LQ.xyz VF16, (0+2*vertexSize)(VI02) 230: MULy.xyz VF13, VF13, VF04 LQ.xyzw VF17, (1+2*vertexSize)(VI02) 238: MAX.xyzw VF12, VF01, VF01 LQ.xyzw VF18, (3+2*vertexSize)(VI02) 240: MULx.xyzw VF14, VF14, VF03 IBEQ VI03, VI10, DecompressionLoopEnd 248: MULi.xyzw VF15, VF15, I SQ.xyzw VF05, (2+0*vertexSize)(VI02) ; - store rgba-1 250: NOP SQ.xyz VF13, (0+0*vertexSize)(VI03) 258: ITOF0.xyz VF06, VF16 SQ.xyzw VF12, (2+0*vertexSize)(VI03) 260: NOP SQ.xyzw VF14, (1+0*vertexSize)(VI03) 268: ITOF0.xyzw VF07, VF17 IADDIU VI02, VI03, vertexSize 270: ITOF0.xyzw VF08, VF18 LQ.xyz VF09, (0+2*vertexSize)(VI03) 278: MULy.xyz VF06, VF06, VF04 LQ.xyzw VF10, (1+2*vertexSize)(VI03) 280: MAX.xyzw VF05, VF01, VF01 LQ.xyzw VF11, (3+2*vertexSize)(VI03) 288: MULx.xyzw VF07, VF07, VF03 IBEQ VI02, VI10, DecompressionLoopEnd 290: MULi.xyzw VF08, VF08, I SQ.xyzw VF15, (3+0*vertexSize)(VI03) 298: ITOF0.xyz VF17, VF09 SQ.xyz VF06, (0+0*vertexSize)(VI02) 2A0: ITOF0.xyzw VF13, VF11 SQ.xyzw VF05, (2+0*vertexSize)(VI02) 2A8: ITOF0.xyzw VF14, VF10 SQ.xyzw VF07, (1+0*vertexSize)(VI02) 2B0: NOP IADDIU VI03, VI02, vertexSize 2B8: MULy.xyz VF16, VF17, VF04 LQ.xyz VF12, (0+2*vertexSize)(VI02) 2C0: MULi.xyzw VF18, VF13, I LQ.xyzw VF13, (1+2*vertexSize)(VI02) 2C8: MULx.xyzw VF17, VF14, VF03 LQ.xyzw VF14, (3+2*vertexSize)(VI02) 2D0: MAX.xyzw VF15, VF01, VF01 IBEQ VI03, VI10, DecompressionLoopEnd 2D8: NOP SQ.xyzw VF08, (3+0*vertexSize)(VI02) 2E0: NOP LQ.xyzw VF11, (3+2*vertexSize)(VI03) 2E8: ITOF0.xyz VF10, VF12 SQ.xyz VF16, (0+0*vertexSize)(VI03) 2F0: ITOF0.xyzw VF07, VF13 SQ.xyzw VF15, (2+0*vertexSize)(VI03) 2F8: ITOF0.xyzw VF08, VF14 SQ.xyzw VF17, (1+0*vertexSize)(VI03) 300: NOP IADDIU VI02, VI03, vertexSize 308: MULy.xyz VF06, VF10, VF04 LQ.xyzw VF10, (1+2*vertexSize)(VI03) 310: MULx.xyzw VF07, VF07, VF03 LQ.xyz VF09, (0+2*vertexSize)(VI03) 318: MULi.xyzw VF08, VF08, I IBNE VI02, VI10, DecompressionLoop 320: MAX.xyzw VF05, VF01, VF01 SQ.xyzw VF18, (3+0*vertexSize)(VI03) DecompressionLoopEnd: 328: SUB.w VF15, VF00, VF00 MOVE.yz VF27, VF00 # include lighting 330: NOP LQ.xyzw VF03, vuSDsurfProps(VI00) 338: ADDx.w VF25, VF00, VF00 ILw.w VI03, (vuSDLightOffset+4)(VI00) ; - first light 340: ADDw.xyz VF25, VF00, VF00 LOI 0.0078125 348: NOP LQ.xyzw VF08, (vuSDLightOffset+0)(VI00) ; - light matrix-1 350: ADDx.w VF24, VF03, VF00 LQ.xyzw VF09, (vuSDLightOffset+1)(VI00) ; - light matrix-2 358: SUBw.w VF27, VF00, VF03 IBEQ VI03, VI00, exitLighting 360: ADDw.x VF27, VF00, VF03 IADDIU VI04, VI00, vuEnumLightDirectional 368: NOP LQ.xyzw VF10, (vuSDLightOffset+2)(VI00) ; - light matrix-3 370: NOP FMAND VI03, VI04 378: MULw.xyz VF08, VF08, VF08 IADDIU VI05, VI00, vuEnumLightAmbient 380: MULw.xyz VF09, VF09, VF08 IADDIU VI02, VI00, vuSDLightOffset+3 388: MULw.xyz VF10, VF10, VF08 NOP 390: MULi.xyzw VF26, VF27, I LQi.xyzw VF11, (VI02++) ; - light matrix-4 nextLight: 398: NOP ILw.w VI03, 0(VI02) ; light type 3A0: NOP LQ.xyzw VF05, 1(VI02) ; light param 1 3A8: NOP LQ.xyzw VF06, 2(VI02) ; light param 2 3B0: NOP LQ.xyzw VF04, 0(VI02) ; light color 3B8: NOP IBEQ VI03, VI05, lightAmbient 3C0: MULAx.xyz ACC, VF08, VF05 IADDIU VI06, VI00, vuEnumLightPoint 3C8: MADDAy.xyz ACC, VF09, VF05 IBEQ VI03, VI04, lightDirectional 3D0: MADDz.xyz VF07, VF10, VF05 IADDIU VI07, VI00, vuEnumLightSpot 3D8: MADDAz.xyz ACC, VF10, VF05 IBEQ VI03, VI06, lightPoint 3E0: MADDw.xyz VF05, VF11, VF00 IADDIU VI06, VI00, vuEnumLightSpotSoft 3E8: NOP IBEQ VI03, VI07, lightSpot 3F0: NOP LOI 255 3F8: NOP IBEQ VI03, VI06, lightSpotSoft # Clamp colors to 255 # scale by color scale (material color) 400: NOP LQ.xyzw VF12, (2+0*vertexSize)(VI01) ; - load rgba-1 408: NOP LQ.xyzw VF13, (2+1*vertexSize)(VI01) ; - load rgba-2 410: NOP LQ.xyzw VF14, (2+2*vertexSize)(VI01) ; - load rgba-3 418: NOP LQ.xyzw VF15, (2+3*vertexSize)(VI01) ; - load rgba-4 420: MINIi.xyzw VF16, VF12, I LQ.xyzw VF20, vuSDcolScale(VI00) ; clamp rbga-1 - load color scale 428: MINIi.xyzw VF17, VF13, I IADDIU VI03, VI01, 4*vertexSize ; clamp rbga-2 430: MINIi.xyzw VF18, VF14, I NOP ; clamp rbga-3 438: MINIi.xyzw VF19, VF15, I NOP ; clamp rbga-4 postProcessLoop: 440: MUL.xyzw VF16, VF16, VF20 LQ.xyzw VF12, (2+0*vertexSize)(VI03) ; scale rgba-1 - load rgba-1 448: MUL.xyzw VF17, VF17, VF20 LQ.xyzw VF13, (2+1*vertexSize)(VI03) ; scale rgba-2 - load rgba-2 450: MUL.xyzw VF18, VF18, VF20 LQ.xyzw VF14, (2+2*vertexSize)(VI03) ; scale rgba-3 - load rgba-3 458: MUL.xyzw VF19, VF19, VF20 LQ.xyzw VF15, (2+3*vertexSize)(VI03) ; scale rgba-4 - load rgba-4 460: NOP SQ.xyzw VF16, (2-4*vertexSize)(VI03) ; - store rgba-1 468: NOP SQ.xyzw VF17, (2-3*vertexSize)(VI03) ; - store rgba-2 470: MINIi.xyzw VF16, VF12, I SQ.xyzw VF18, (2-2*vertexSize)(VI03) ; clamp rgba-1 - store rgba-3 478: MINIi.xyzw VF17, VF13, I SQ.xyzw VF19, (2-1*vertexSize)(VI03) ; clamp rgba-2 - store rgba-4 480: MINIi.xyzw VF18, VF14, I IBNE VI03, VI11, postProcessLoop ; clamp rgba-3 488: MINIi.xyzw VF19, VF15, I IADDIU VI03, VI03, 4*vertexSize ; clamp rgba-4 490: NOP B exitLighting 498: NOP NOP lightDirectional: 4A0: SUB.xyz VF07, VF00, VF07 LQ.xyz VF12, (3+0*vertexSize)(VI01) 4A8: MULz.xyz VF04, VF04, VF03 LQ.xyz VF13, (3+1*vertexSize)(VI01) 4B0: NOP LQ.xyz VF14, (3+2*vertexSize)(VI01) 4B8: NOP LQ.xyz VF15, (3+3*vertexSize)(VI01) 4C0: MUL.xyz VF12, VF12, VF07 NOP 4C8: MUL.xyz VF13, VF13, VF07 NOP 4D0: MUL.xyz VF14, VF14, VF07 NOP 4D8: MUL.xyz VF15, VF15, VF07 NOP 4E0: ADDz.x VF12, VF12, VF12 NOP 4E8: ADDx.y VF13, VF13, VF13 NOP 4F0: ADDy.z VF14, VF14, VF14 IADDIU VI03, VI01, 0 4F8: ADDz.y VF15, VF15, VF15 MR32.xyzw VF26, VF15 directionalLoop: 500: ADDy.x VF24, VF12, VF12 LQ.xyz VF12, (3+4*vertexSize)(VI03) 508: ADDz.y VF24, VF13, VF13 LQ.xyz VF13, (3+5*vertexSize)(VI03) 510: ADDx.z VF24, VF14, VF14 LQ.xyz VF14, (3+6*vertexSize)(VI03) 518: ADDy.w VF24, VF26, VF15 LQ.xyz VF15, (3+7*vertexSize)(VI03) 520: NOP LQ.xyz VF16, (2+0*vertexSize)(VI03) 528: MUL.xyz VF12, VF12, VF07 LQ.xyz VF17, (2+1*vertexSize)(VI03) 530: MUL.xyz VF13, VF13, VF07 LQ.xyz VF18, (2+2*vertexSize)(VI03) 538: MAXx.xyzw VF24, VF24, VF00 NOP 540: MUL.xyz VF14, VF14, VF07 LQ.xyz VF19, (2+3*vertexSize)(VI03) 548: MUL.xyz VF15, VF15, VF07 NOP 550: ADDA.xyz ACC, VF16, VF00 NOP 558: MADDx.xyz VF20, VF04, VF24 NOP 560: ADDA.xyz ACC, VF17, VF00 NOP 568: MADDy.xyz VF21, VF04, VF24 NOP 570: ADDA.xyz ACC, VF18, VF00 IADDIU VI03, VI03, 4*vertexSize 578: MADDz.xyz VF22, VF04, VF24 SQ.xyz VF20, (2-4*vertexSize)(VI03) 580: ADDA.xyz ACC, VF19, VF00 MR32.xyzw VF26, VF15 588: MADDw.xyz VF23, VF04, VF24 SQ.xyz VF21, (2-3*vertexSize)(VI03) 590: ADDz.x VF12, VF12, VF12 NOP 598: ADDx.y VF13, VF13, VF13 SQ.xyz VF22, (2-2*vertexSize)(VI03) 5A0: ADDy.z VF14, VF14, VF14 IBNE VI03, VI11, directionalLoop 5A8: ADDz.y VF15, VF15, VF15 SQ.xyz VF23, (2-1*vertexSize)(VI03) 5B0: NOP B nextLight 5B8: NOP IADDIU VI02, VI02, 2 lightAmbient: 5C0: MULx.xyz VF04, VF04, VF03 LQ.xyz VF12, (2+0*vertexSize)(VI01) 5C8: NOP LQ.xyz VF13, (2+1*vertexSize)(VI01) 5D0: NOP LQ.xyz VF14, (2+2*vertexSize)(VI01) 5D8: NOP LQ.xyz VF15, (2+3*vertexSize)(VI01) 5E0: NOP IADDIU VI03, VI01, 4*vertexSize ambientLoop: 5E8: ADD.xyz VF16, VF12, VF04 LQ.xyz VF12, (2+0*vertexSize)(VI03) 5F0: ADD.xyz VF17, VF13, VF04 LQ.xyz VF13, (2+1*vertexSize)(VI03) 5F8: ADD.xyz VF18, VF14, VF04 LQ.xyz VF14, (2+2*vertexSize)(VI03) 600: ADD.xyz VF19, VF15, VF04 LQ.xyz VF15, (2+3*vertexSize)(VI03) 608: NOP SQ.xyz VF16, (2-4*vertexSize)(VI03) 610: NOP SQ.xyz VF17, (2-3*vertexSize)(VI03) 618: NOP SQ.xyz VF18, (2-2*vertexSize)(VI03) 620: NOP SQ.xyz VF19, (2-1*vertexSize)(VI03) 628: NOP IBNE VI03, VI11, ambientLoop 630: NOP IADDIU VI03, VI03, 4*vertexSize 638: NOP B nextLight 640: NOP IADDIU VI02, VI02, 1 lightPoint: 648: MUL.w VF05, VF05, VF08 LQ.xyz VF20, 0(VI01) 650: MULz.xyz VF04, VF04, VF03 LQ.xyz VF21, 4(VI01) 658: SUB.w VF04, VF04, VF04 LQ.xyz VF22, 8(VI01) 660: NOP LQ.xyz VF12, 3(VI01) 668: SUB.xyz VF20, VF05, VF20 DIV Q, VF00w, VF05w 670: SUB.xyz VF21, VF05, VF21 LQ.xyz VF13, 7(VI01) 678: NOP LQ.xyz VF14, 11(VI01) 680: NOP IADDIU VI03, VI01, 0 688: MUL.xyz VF26, VF20, VF20 NOP 690: MUL.xyz VF12, VF20, VF12 NOP 698: MUL.xyz VF27, VF21, VF21 NOP 6A0: MUL.xyz VF13, VF21, VF13 NOP 6A8: ADDAz.x ACC, VF26, VF26 NOP 6B0: MADDy.x VF26, VF25, VF26 NOP 6B8: ADDAz.x ACC, VF12, VF12 NOP 6C0: MADDy.x VF12, VF25, VF12 NOP 6C8: SUBq.w VF04, VF04, Q NOP 6D0: ADDAz.x ACC, VF27, VF27 RSQRT Q, VF00w, VF26x 6D8: MADDy.x VF27, VF25, VF27 NOP 6E0: MAXx.x VF12, VF12, VF00 NOP 6E8: NOP NOP 6F0: NOP NOP 6F8: NOP NOP 700: MULx.xyz VF12, VF04, VF12 NOP 708: SUB.xyz VF22, VF05, VF22 NOP 710: ADDAz.x ACC, VF13, VF13 NOP 718: MADDy.x VF13, VF25, VF13 NOP 720: MULAw.xyz ACC, VF12, VF04 WAITQ 728: MADDq.xyz VF12, VF12, Q RSQRT Q, VF00w, VF27x 730: MAXx.x VF13, VF13, VF00 NOP 738: MUL.xyz VF24, VF22, VF22 NOP 740: MUL.xyz VF14, VF22, VF14 NOP 748: MAXx.xyz VF12, VF12, VF00 LQ.xyz VF16, 2(VI03) 750: MULx.xyz VF13, VF04, VF13 NOP 758: ADDAz.x ACC, VF24, VF24 LQ.xyz VF23, 12(VI03) 760: MADDy.x VF24, VF25, VF24 NOP 768: ADD.xyz VF16, VF16, VF12 LQ.xyz VF15, 15(VI03) 770: ADDAz.x ACC, VF14, VF14 IADDIU VI03, VI03, 4 778: MADDy.x VF14, VF25, VF14 NOP 780: SUB.xyz VF23, VF05, VF23 IBEQ VI03, VI10, 0x8C8 788: MULAw.xyz ACC, VF13, VF04 SQ.xyz VF16, -2(VI03) 790: MADDq.xyz VF13, VF13, Q RSQRT Q, VF00w, VF24x 798: MAXx.x VF14, VF14, VF00 NOP 7A0: MUL.xyz VF07, VF23, VF23 NOP 7A8: MUL.xyz VF15, VF23, VF15 NOP 7B0: MAXx.xyz VF13, VF13, VF00 LQ.xyz VF17, 2(VI03) 7B8: MULx.xyz VF14, VF04, VF14 NOP 7C0: ADDAz.x ACC, VF07, VF07 LQ.xyz VF20, 12(VI03) 7C8: MADDy.x VF07, VF25, VF07 NOP 7D0: ADD.xyz VF17, VF17, VF13 LQ.xyz VF12, 15(VI03) 7D8: ADDAz.x ACC, VF15, VF15 IADDIU VI03, VI03, 4 7E0: MADDy.x VF15, VF25, VF15 NOP 7E8: SUB.xyz VF20, VF05, VF20 IBEQ VI03, VI10, 0x8C8 7F0: MULAw.xyz ACC, VF14, VF04 SQ.xyz VF17, -2(VI03) 7F8: MADDq.xyz VF14, VF14, Q RSQRT Q, VF00w, VF07x 800: MAXx.x VF15, VF15, VF00 NOP 808: MUL.xyz VF26, VF20, VF20 NOP 810: MUL.xyz VF12, VF20, VF12 NOP 818: MAXx.xyz VF14, VF14, VF00 LQ.xyz VF18, 2(VI03) 820: MULx.xyz VF15, VF04, VF15 NOP 828: ADDAz.x ACC, VF26, VF26 LQ.xyz VF21, 12(VI03) 830: MADDy.x VF26, VF25, VF26 NOP 838: ADD.xyz VF18, VF18, VF14 LQ.xyz VF13, 15(VI03) 840: ADDAz.x ACC, VF12, VF12 IADDIU VI03, VI03, 4 848: MADDy.x VF12, VF25, VF12 NOP 850: SUB.xyz VF21, VF05, VF21 IBEQ VI03, VI10, 0x8C8 858: MULAw.xyz ACC, VF15, VF04 SQ.xyz VF18, -2(VI03) 860: MADDq.xyz VF15, VF15, Q RSQRT Q, VF00w, VF26x 868: MAXx.x VF12, VF12, VF00 NOP 870: MUL.xyz VF27, VF21, VF21 NOP 878: MUL.xyz VF13, VF21, VF13 NOP 880: MAXx.xyz VF15, VF15, VF00 LQ.xyz VF19, 2(VI03) 888: MULx.xyz VF12, VF04, VF12 NOP 890: ADDAz.x ACC, VF27, VF27 LQ.xyz VF22, 12(VI03) 898: MADDy.x VF27, VF25, VF27 NOP 8A0: ADD.xyz VF19, VF19, VF15 LQ.xyz VF14, 15(VI03) 8A8: ADDAz.x ACC, VF13, VF13 IADDIU VI03, VI03, 4 8B0: MADDy.x VF13, VF25, VF13 NOP 8B8: SUB.xyz VF22, VF05, VF22 IBNE VI03, VI10, 0x728 8C0: MULAw.xyz ACC, VF12, VF04 SQ.xyz VF19, -2(VI03) 8C8: NOP B nextLight 8D0: NOP IADDIU VI02, VI02, 2 lightSpot: 8D8: MUL.w VF05, VF05, VF08 LQ.xyz VF20, 0(VI01) 8E0: MULAx.xyz ACC, VF08, VF06 LQ.xyz VF21, 4(VI01) 8E8: MADDAy.xyz ACC, VF09, VF06 LQ.xyz VF12, 3(VI01) 8F0: MADDz.xyz VF06, VF10, VF06 LQ.xyz VF13, 7(VI01) 8F8: SUB.xyz VF20, VF05, VF20 DIV Q, VF00w, VF05w 900: SUB.xyz VF21, VF05, VF21 NOP 908: SUB.w VF04, VF04, VF04 IADDIU VI03, VI01, 0 910: MULz.xyz VF04, VF04, VF03 NOP 918: MUL.xyz VF26, VF20, VF20 NOP 920: MUL.xyz VF12, VF20, VF12 NOP 928: MUL.xyz VF20, VF20, VF06 NOP 930: MUL.xyz VF27, VF21, VF21 NOP 938: ADDAz.x ACC, VF26, VF26 NOP 940: MADDy.x VF26, VF25, VF26 NOP 948: ADDAz.x ACC, VF12, VF12 NOP 950: MADDy.x VF12, VF25, VF12 NOP 958: ADDAz.x ACC, VF20, VF20 NOP 960: MADDy.x VF20, VF25, VF20 RSQRT Q, VF00w, VF26x 968: SUBq.w VF04, VF04, Q NOP 970: MAXx.x VF12, VF12, VF00 NOP 978: MUL.xyz VF13, VF21, VF13 NOP 980: MUL.xyz VF21, VF21, VF06 NOP 988: ADDAz.x ACC, VF27, VF27 NOP 990: MADDy.x VF27, VF25, VF27 NOP 998: MULx.xyz VF12, VF04, VF12 NOP 9A0: ADDAz.x ACC, VF13, VF13 NOP 9A8: MADDy.x VF13, VF25, VF13 WAITQ 9B0: MULQ.x VF20, VF20, Q RSQRT Q, VF00w, VF27x 9B8: MULAw.xyz ACC, VF12, VF04 LQ.xyz VF22, 8(VI03) 9C0: MADDq.xyz VF12, VF12, Q NOP 9C8: MAXx.x VF13, VF13, VF00 NOP 9D0: SUBx.w VF20, VF06, VF20 NOP 9D8: SUB.xyz VF22, VF05, VF22 LQ.xyz VF14, 11(VI03) 9E0: MAXx.xyz VF12, VF12, VF00 LQ.xyz VF16, 2(VI03) 9E8: ADDAz.x ACC, VF21, VF21 IADDIU VI06, VI00, 0x10 9F0: MADDy.x VF21, VF25, VF21 FMAND VI07, VI06 9F8: MUL.xyz VF24, VF22, VF22 IBNE VI07, VI00, 0xA10 A00: MUL.xyz VF14, VF22, VF14 NOP A08: ADD.xyz VF16, VF16, VF12 NOP A10: MUL.xyz VF22, VF22, VF06 IADDIU VI03, VI03, 4 A18: MULx.xyz VF13, VF04, VF13 NOP A20: ADDAz.x ACC, VF24, VF24 IBEQ VI03, VI10, 0xBE0 A28: MADDy.x VF24, VF25, VF24 SQ.xyz VF16, -2(VI03) A30: ADDAz.x ACC, VF14, VF14 NOP A38: MADDy.x VF14, VF25, VF14 WAITQ A40: MULQ.x VF21, VF21, Q RSQRT Q, VF00w, VF24x A48: MULAw.xyz ACC, VF13, VF04 LQ.xyz VF23, 8(VI03) A50: MADDq.xyz VF13, VF13, Q NOP A58: MAXx.x VF14, VF14, VF00 NOP A60: SUBx.w VF21, VF06, VF21 NOP A68: SUB.xyz VF23, VF05, VF23 LQ.xyz VF15, 11(VI03) A70: MAXx.xyz VF13, VF13, VF00 LQ.xyz VF17, 2(VI03) A78: ADDAz.x ACC, VF22, VF22 IADDIU VI06, VI00, 0x10 A80: MADDy.x VF22, VF25, VF22 FMAND VI07, VI06 A88: MUL.xyz VF07, VF23, VF23 IBNE VI07, VI00, 0xAA0 A90: MUL.xyz VF15, VF23, VF15 NOP A98: ADD.xyz VF17, VF17, VF13 NOP AA0: MUL.xyz VF23, VF23, VF06 IADDIU VI03, VI03, 4 AA8: MULx.xyz VF14, VF04, VF14 NOP AB0: ADDAz.x ACC, VF07, VF07 IBEQ VI03, VI10, 0xBE0 AB8: MADDy.x VF07, VF25, VF07 SQ.xyz VF17, -2(VI03) AC0: ADDAz.x ACC, VF15, VF15 NOP AC8: MADDy.x VF15, VF25, VF15 WAITQ AD0: MULQ.x VF22, VF22, Q RSQRT Q, VF00w, VF07x AD8: MULAw.xyz ACC, VF14, VF04 LQ.xyz VF20, 8(VI03) AE0: MADDq.xyz VF14, VF14, Q NOP AE8: MAXx.x VF15, VF15, VF00 NOP AF0: SUBx.w VF22, VF06, VF22 NOP AF8: SUB.xyz VF20, VF05, VF20 LQ.xyz VF12, 11(VI03) B00: MAXx.xyz VF14, VF14, VF00 LQ.xyz VF18, 2(VI03) B08: ADDAz.x ACC, VF23, VF23 IADDIU VI06, VI00, 0x10 B10: MADDy.x VF23, VF25, VF23 FMAND VI07, VI06 B18: MUL.xyz VF26, VF20, VF20 IBNE VI07, VI00, 0xB30 B20: MUL.xyz VF12, VF20, VF12 NOP B28: ADD.xyz VF18, VF18, VF14 NOP B30: MUL.xyz VF20, VF20, VF06 IADDIU VI03, VI03, 4 B38: MULx.xyz VF15, VF04, VF15 NOP B40: ADDAz.x ACC, VF26, VF26 IBEQ VI03, VI10, 0xBE0 B48: MADDy.x VF26, VF25, VF26 SQ.xyz VF18, -2(VI03) B50: ADDAz.x ACC, VF12, VF12 NOP B58: MADDy.x VF12, VF25, VF12 WAITQ B60: MULQ.x VF23, VF23, Q RSQRT Q, VF00w, VF26x B68: MULAw.xyz ACC, VF15, VF04 LQ.xyz VF21, 8(VI03) B70: MADDq.xyz VF15, VF15, Q NOP B78: MAXx.x VF12, VF12, VF00 NOP B80: SUBx.w VF23, VF06, VF23 NOP B88: SUB.xyz VF21, VF05, VF21 LQ.xyz VF13, 11(VI03) B90: MAXx.xyz VF15, VF15, VF00 LQ.xyz VF19, 2(VI03) B98: ADDAz.x ACC, VF20, VF20 IADDIU VI06, VI00, 0x10 BA0: MADDy.x VF20, VF25, VF20 FMAND VI07, VI06 BA8: MUL.xyz VF27, VF21, VF21 IBNE VI07, VI00, 0xBC0 BB0: MUL.xyz VF13, VF21, VF13 NOP BB8: ADD.xyz VF19, VF19, VF15 NOP BC0: MUL.xyz VF21, VF21, VF06 IADDIU VI03, VI03, 4 BC8: MULx.xyz VF12, VF04, VF12 NOP BD0: ADDAz.x ACC, VF27, VF27 IBNE VI03, VI10, 0x9A0 BD8: MADDy.x VF27, VF25, VF27 SQ.xyz VF19, -2(VI03) BE0: NOP B nextLight BE8: NOP IADDIU VI02, VI02, 3 lightSpotSoft: BF0: ADD.w VF07, VF00, VF06 LQ.xyz VF20, 0(VI01) BF8: MUL.w VF05, VF05, VF08 LQ.xyz VF12, 3(VI01) C00: MULAx.xyz ACC, VF08, VF06 LQ.xyz VF21, 4(VI01) C08: MADDAy.xyz ACC, VF09, VF06 LQ.xyz VF13, 7(VI01) C10: SUB.xyz VF20, VF05, VF20 ERCPR P, VF07 C18: MADDz.xyz VF06, VF10, VF06 DIV Q, VF00w, VF05w C20: SUB.w VF04, VF04, VF04 IADDIU VI03, VI01, 0 C28: MULz.xyz VF04, VF04, VF03 NOP C30: MUL.xyz VF26, VF20, VF20 NOP C38: MUL.xyz VF12, VF20, VF12 NOP C40: MUL.xyz VF20, VF20, VF06 NOP C48: SUB.xyz VF21, VF05, VF21 NOP C50: ADDAz.x ACC, VF26, VF26 NOP C58: MADDy.x VF26, VF25, VF26 NOP C60: ADDAz.x ACC, VF12, VF12 NOP C68: MADDy.x VF12, VF25, VF12 NOP C70: ADDAz.x ACC, VF20, VF20 NOP C78: MADDy.x VF20, VF25, VF20 MFP.w VF09, P C80: SUBq.w VF04, VF04, Q RSQRT Q, VF00w, VF26x C88: MAXx.x VF12, VF12, VF00 NOP C90: MULw.w VF06, VF06, VF05 NOP C98: MUL.xyz VF27, VF21, VF21 NOP CA0: MUL.xyz VF13, VF21, VF13 NOP CA8: MUL.xyz VF21, VF21, VF06 NOP CB0: MULx.xyz VF12, VF04, VF12 NOP CB8: ADDAz.x ACC, VF27, VF27 NOP CC0: MADDy.x VF27, VF25, VF27 NOP CC8: ADDAz.x ACC, VF13, VF13 NOP CD0: MADDy.x VF13, VF25, VF13 NOP CD8: ADDAz.x ACC, VF21, VF21 NOP CE0: MADDy.x VF21, VF25, VF21 NOP CE8: MULQ.x VF20, VF20, Q RSQRT Q, VF00w, VF27x CF0: MULAw.xyz ACC, VF12, VF04 LQ.xyz VF22, 8(VI03) CF8: MADDq.xyz VF12, VF12, Q NOP D00: ADDAx.w ACC, VF06, VF00 NOP D08: MSUBx.w VF20, VF05, VF20 NOP D10: SUB.xyz VF22, VF05, VF22 LQ.xyz VF14, 11(VI03) D18: MAXx.xyz VF12, VF12, VF00 LQ.xyz VF16, 2(VI03) D20: MAXx.x VF13, VF13, VF00 NOP D28: MAXx.w VF20, VF20, VF00 NOP D30: MUL.xyz VF24, VF22, VF22 NOP D38: MUL.xyz VF14, VF22, VF14 NOP D40: ADDA.xyz ACC, VF16, VF00 NOP D48: MADDw.xyz VF16, VF12, VF20 NOP D50: MUL.xyz VF22, VF22, VF06 IADDIU VI03, VI03, 4 D58: MULx.xyz VF13, VF04, VF13 NOP D60: ADDAz.x ACC, VF24, VF24 IBEQ VI03, VI10, 0xF68 D68: MADDy.x VF24, VF25, VF24 SQ.xyz VF16, -2(VI03) D70: ADDAz.x ACC, VF14, VF14 NOP D78: MADDy.x VF14, VF25, VF14 NOP D80: ADDAz.x ACC, VF22, VF22 NOP D88: MADDy.x VF22, VF25, VF22 NOP D90: MULQ.x VF21, VF21, Q RSQRT Q, VF00w, VF24x D98: MULAw.xyz ACC, VF13, VF04 LQ.xyz VF23, 8(VI03) DA0: MADDq.xyz VF13, VF13, Q NOP DA8: ADDAx.w ACC, VF06, VF00 NOP DB0: MSUBx.w VF21, VF05, VF21 NOP DB8: SUB.xyz VF23, VF05, VF23 LQ.xyz VF15, 11(VI03) DC0: MAXx.xyz VF13, VF13, VF00 LQ.xyz VF17, 2(VI03) DC8: MAXx.x VF14, VF14, VF00 NOP DD0: MAXx.w VF21, VF21, VF00 NOP DD8: MUL.xyz VF07, VF23, VF23 NOP DE0: MUL.xyz VF15, VF23, VF15 NOP DE8: ADDA.xyz ACC, VF17, VF00 NOP DF0: MADDw.xyz VF17, VF13, VF21 NOP DF8: MUL.xyz VF23, VF23, VF06 IADDIU VI03, VI03, 4 E00: MULx.xyz VF14, VF04, VF14 NOP E08: ADDAz.x ACC, VF07, VF07 IBEQ VI03, VI10, 0xF68 E10: MADDy.x VF07, VF25, VF07 SQ.xyz VF17, -2(VI03) E18: ADDAz.x ACC, VF15, VF15 NOP E20: MADDy.x VF15, VF25, VF15 NOP E28: ADDAz.x ACC, VF23, VF23 NOP E30: MADDy.x VF23, VF25, VF23 NOP E38: MULQ.x VF22, VF22, Q RSQRT Q, VF00w, VF07x E40: MULAw.xyz ACC, VF14, VF04 LQ.xyz VF20, 8(VI03) E48: MADDq.xyz VF14, VF14, Q NOP E50: ADDAx.w ACC, VF06, VF00 NOP E58: MSUBx.w VF22, VF05, VF22 NOP E60: SUB.xyz VF20, VF05, VF20 LQ.xyz VF12, 11(VI03) E68: MAXx.xyz VF14, VF14, VF00 LQ.xyz VF18, 2(VI03) E70: MAXx.x VF15, VF15, VF00 NOP E78: MAXx.w VF22, VF22, VF00 NOP E80: MUL.xyz VF26, VF20, VF20 NOP E88: MUL.xyz VF12, VF20, VF12 NOP E90: ADDA.xyz ACC, VF18, VF00 NOP E98: MADDw.xyz VF18, VF14, VF22 NOP EA0: MUL.xyz VF20, VF20, VF06 IADDIU VI03, VI03, 4 EA8: MULx.xyz VF15, VF04, VF15 NOP EB0: ADDAz.x ACC, VF26, VF26 IBEQ VI03, VI10, 0xF68 EB8: MADDy.x VF26, VF25, VF26 SQ.xyz VF18, -2(VI03) EC0: ADDAz.x ACC, VF12, VF12 NOP EC8: MADDy.x VF12, VF25, VF12 NOP ED0: ADDAz.x ACC, VF20, VF20 NOP ED8: MADDy.x VF20, VF25, VF20 NOP EE0: MULQ.x VF23, VF23, Q RSQRT Q, VF00w, VF26x EE8: MULAw.xyz ACC, VF15, VF04 LQ.xyz VF21, 8(VI03) EF0: MADDq.xyz VF15, VF15, Q NOP EF8: ADDAx.w ACC, VF06, VF00 NOP F00: MSUBx.w VF23, VF05, VF23 NOP F08: SUB.xyz VF21, VF05, VF21 LQ.xyz VF13, 11(VI03) F10: MAXx.xyz VF15, VF15, VF00 LQ.xyz VF19, 2(VI03) F18: MAXx.x VF12, VF12, VF00 NOP F20: MAXx.w VF23, VF23, VF00 NOP F28: MUL.xyz VF27, VF21, VF21 NOP F30: MUL.xyz VF13, VF21, VF13 NOP F38: ADDA.xyz ACC, VF19, VF00 NOP F40: MADDw.xyz VF19, VF15, VF23 NOP F48: MUL.xyz VF21, VF21, VF06 IADDIU VI03, VI03, 4 F50: MULx.xyz VF12, VF04, VF12 NOP F58: ADDAz.x ACC, VF27, VF27 IBNE VI03, VI10, 0xCC8 F60: MADDy.x VF27, VF25, VF27 SQ.xyz VF19, -2(VI03) F68: NOP B nextLight F70: NOP IADDIU VI02, VI02, 3 exitLighting: # end include RenderManager: F78: NOP JR VI15 F80: NOP XTOP VI11 ; input buffer # Transform vertices, write to output buffer and xgkick GenericRender: F88: NOP LQ.yzw VF01, vuSDgifTag(VI00) F90: NOP IADDIU VI08, VI00, 0x4000 F98: NOP IADD VI08, VI08, VI08 FA0: NOP IOR VI09, VI08, VI09 # include MP_Generator FA8: MULAw.xyzw ACC, VF31, VF00 LQ.xyz VF09, (0+0*vertexSize)(VI11) ; xform pos-1 - load pos-1 FB0: MADDAx.xyw ACC, VF28, VF09 NOP ; xform pos-1 FB8: MADDAy.xyw ACC, VF29, VF09 NOP ; xform pos-1 FC0: MADDz.xyzw VF08, VF30, VF09 NOP ; xform pos-1 FC8: NOP DIV Q, VF00w, VF08w ; - get pos-1 recip FD0: NOP NOP FD8: ADDw.z VF04, VF00, VF00 LQ.xy VF03, (1+0*vertexSize)(VI11) ; set Q to 1 - load st-1 FE0: ADDw.z VF03, VF00, VF00 LQ.xyz VF10, (0+1*vertexSize)(VI11) ; set Q to 1 FE8: ADDw.z VF05, VF00, VF00 IADDIU VI01, VI11, 0 ; set Q to 1 FF0: ADDw.z VF06, VF00, VF00 LQ.xyzw VF07, (2+0*vertexSize)(VI11) ; set Q to 1 FF8: MULAw.xyzw ACC, VF31, VF00 LQ.xy VF04, (1+1*vertexSize)(VI11) 1000: MULQ.xyz VF11, VF03, Q ISw.x VI09, 0(VI14) - divide st-1 1008: MADDAx.xyw ACC, VF28, VF10 LQ.xyzw VF09, (2+1*vertexSize)(VI11) 1010: MADDAy.xyw ACC, VF29, VF10 SQ.yzw VF01, 0(VI14) 1018: MADDz.xyzw VF10, VF30, VF10 IADDIU VI02, VI14, 1 1020: MULAw.xyz ACC, VF02, VF00 SQ.xyz VF11, (0+0*OutverSize)(VI02) ; get xyz offset - store stq-1 MPgeneratorLoop: 1028: MADDq.xyz VF08, VF08, Q LQ.xyz VF11, (0+2*vertexSize)(VI01) ; divide pos-1 and add offset 1030: MULQ.xyz VF13, VF03, Q DIV Q, VF00w, VF10w 1038: FTOI0.xyzw VF12, VF07 LQ.w VF08, (0+0*vertexSize)(VI01) ; - load ADC-1 1040: MULAw.xyzw ACC, VF31, VF00 IADDIU VI03, VI01, vertexSize 1048: FTOI4.xyz VF08, VF08 LQ.xy VF05, (1+2*vertexSize)(VI01) ; pos-1 to fixed 1050: MADDAx.xyw ACC, VF28, VF11 SQ.xyz VF13, (0+0*OutverSize)(VI02) ; - store stq-1 1058: MADDAy.xyw ACC, VF29, VF11 SQ.xyzw VF12, (1+0*OutverSize)(VI02) ; - store rgba-1 1060: MADDz.xyzw VF12, VF30, VF11 LQ.xyzw VF11, (2+2*vertexSize)(VI01) 1068: NOP IBEQ VI03, VI10, MPgeneratorEnd 1070: MULAw.xyz ACC, VF02, VF00 SQ.xyzw VF08, (2+0*OutverSize)(VI02) ; - store xyz-1 1078: MADDq.xyz VF07, VF10, Q LQ.xyz VF13, (0+2*vertexSize)(VI03) 1080: MULQ.xyz VF08, VF04, Q DIV Q, VF00w, VF12w 1088: FTOI0.xyzw VF14, VF09 LQ.w VF07, (0+0*vertexSize)(VI03) 1090: MULAw.xyzw ACC, VF31, VF00 IADDIU VI01, VI03, vertexSize 1098: FTOI4.xyz VF07, VF07 LQ.xy VF06, (1+2*vertexSize)(VI03) 10A0: MADDAx.xyw ACC, VF28, VF13 SQ.xyz VF08, (0+1*OutverSize)(VI02) 10A8: MADDAy.xyw ACC, VF29, VF13 SQ.xyzw VF14, (1+1*OutverSize)(VI02) 10B0: MADDz.xyzw VF14, VF30, VF13 LQ.xyzw VF13, (2+2*vertexSize)(VI03) 10B8: NOP IBEQ VI01, VI10, MPgeneratorEnd 10C0: MULAw.xyz ACC, VF02, VF00 SQ.xyzw VF07, (2+1*OutverSize)(VI02) 10C8: MADDq.xyz VF09, VF12, Q LQ.xyz VF07, (0+2*vertexSize)(VI01) 10D0: MULQ.xyz VF10, VF05, Q DIV Q, VF00w, VF14w 10D8: FTOI0.xyzw VF08, VF11 LQ.w VF09, (0+0*vertexSize)(VI01) 10E0: MULAw.xyzw ACC, VF31, VF00 IADDIU VI03, VI01, vertexSize 10E8: FTOI4.xyz VF09, VF09 LQ.xy VF03, (1+2*vertexSize)(VI01) 10F0: MADDAx.xyw ACC, VF28, VF07 SQ.xyz VF10, (0+2*OutverSize)(VI02) 10F8: MADDAy.xyw ACC, VF29, VF07 SQ.xyzw VF08, (1+2*OutverSize)(VI02) 1100: MADDz.xyzw VF08, VF30, VF07 LQ.xyzw VF07, (2+2*vertexSize)(VI01) 1108: NOP IBEQ VI03, VI10, MPgeneratorEnd 1110: MULAw.xyz ACC, VF02, VF00 SQ.xyzw VF09, (2+2*OutverSize)(VI02) 1118: MADDq.xyz VF11, VF14, Q LQ.xyz VF09, (0+2*vertexSize)(VI03) 1120: MULQ.xyz VF12, VF06, Q DIV Q, VF00w, VF08w 1128: FTOI0.xyzw VF10, VF13 LQ.w VF11, (0+0*vertexSize)(VI03) 1130: MULAw.xyzw ACC, VF31, VF00 IADDIU VI01, VI03, vertexSize 1138: FTOI4.xyz VF11, VF11 LQ.xy VF04, (1+2*vertexSize)(VI03) 1140: MADDAx.xyw ACC, VF28, VF09 SQ.xyz VF12, (0+3*OutverSize)(VI02) 1148: MADDAy.xyw ACC, VF29, VF09 SQ.xyzw VF10, (1+2*OutverSize)(VI02) 1150: MADDz.xyzw VF10, VF30, VF09 LQ.xyzw VF09, (2+2*vertexSize)(VI03) 1158: NOP SQ.xyzw VF11, (2+2*OutverSize)(VI02) 1160: NOP IBNE VI01, VI10, MPgeneratorLoop 1168: MULAw.xyz ACC, VF02, VF00 IADDIU VI02, VI02, 4*OutverSize MPgeneratorEnd: # end include 1170: NOP IADDIU VI02, VI00, vuSymbGifTag 1178: NOP XGKICK VI02 1180: NOP IADD VI15, VI00, VI12 1188: NOP IADD VI12, VI00, VI13 1190: NOP IADD VI13, VI00, VI15 1198: NOP XGKICK VI14 11A0: NOP B DoubleBufferStage 11A8: NOP IADD VI14, VI00, VI12 FoggedRender: 11B0: NOP LQ.yzw VF01, vuSDgifTag(VI00) 11B8: NOP IADDIU VI08, VI00, 0x4000 11C0: NOP IADD VI08, VI08, VI08 11C8: NOP IOR VI09, VI08, VI09 # include MPF_Generator 11D0: MAX.xyz VF03, VF31, VF31 LQ.zw VF07, vuSDxMaxyMax(VI00) ; - load fog values 11D8: MAX.xy VF04, VF28, VF28 NOP 11E0: MAX.xyz VF06, VF30, VF30 LOI 255 11E8: MULAi.w ACC, VF00, I NOP 11F0: MULz.w VF03, VF31, VF07 NOP 11F8: MULz.w VF04, VF28, VF07 NOP 1200: MULz.w VF05, VF29, VF07 NOP 1208: MULz.w VF06, VF30, VF07 IADDIU VI02, VI11, 0 1210: MULz.w VF10, VF07, VF07 LQ.xyz VF13, (0+0*vertexSize)(VI02) ; - load position-1 1218: SUB.xyz VF10, VF00, VF02 MOVE.xy VF05, VF29 1220: MADDz.w VF12, VF07, VF07 NOP 1228: MULAw.xyzw ACC, VF03, VF00 LQ.xyz VF12, (0+1*vertexSize)(VI02) 1230: MADDAx.xyw ACC, VF04, VF13 NOP 1238: MADDAy.xyw ACC, VF05, VF13 LQ.xyzw VF15, (2+0*vertexSize)(VI02) ; - load rgba-1 1240: MADDz.xyzw VF13, VF06, VF13 LOI 2048.5 ; - ADC value as float 1248: MULAw.xyzw ACC, VF10, VF00 LQ.xy VF09, (1+2*vertexSize)(VI02) ; - load st-1 1250: MSUBi.xyzw VF11, VF00, I ILw.w VI04, (0+2*vertexSize)(VI02) ; prepare fog value with ADC flag 1258: FTOI0.xyzw VF15, VF15 DIV Q, VF07z, VF13w 1260: MAX.w VF13, VF13, VF10 LQ.xyzw VF16, (2+2*vertexSize)(VI02) 1268: MULAw.xyzw ACC, VF03, VF00 ILw.w VI03, (0+0*vertexSize)(VI02) 1270: MADDAx.xyw ACC, VF04, VF12 MR32.z VF08, VF00 1278: MADDAy.xyw ACC, VF05, VF12 LQ.xy VF08, (1+0*vertexSize)(VI02) 1280: MADDz.xyzw VF17, VF06, VF12 SQ.yzw VF01, 0(VI14) 1288: MINI.w VF13, VF13, VF12 ISw.x VI09, 0(VI14) 1290: MULQ.xyz VF13, VF13, Q MR32.z VF09, VF00 ; - q = 1 1298: MULQ.xyz VF14, VF08, Q IADDIU VI05, VI14, 1 12A0: MAX.w VF07, VF17, VF10 IBNE VI03, VI00, 0x12C0 MPFgeneratorLoop: 12A8: NOP DIV Q, VF07z, VF17w 12B0: SUB.xyzw VF13, VF13, VF10 B 0x12D0 12B8: MULAw.xyzw ACC, VF03, VF00 SQ.xyz VF14, (0+0*OutverSize)(VI05) ; - store stq-1 12C0: SUB.xyzw VF13, VF13, VF11 B 0x12D0 12C8: MULAw.xyzw ACC, VF03, VF00 SQ.xyz VF14, (0+0*OutverSize)(VI05) ; - store stq-1 12D0: NOP LQ.xyz VF12, 8(VI02) 12D8: FTOI4.xyzw VF20, VF13 NOP ; pos-1 to fix 12E0: MINI.w VF14, VF07, VF12 ILw.w VI03, (0+2*vertexSize)(VI02) 12E8: MADDAx.xyw ACC, VF04, VF12 LQ.xy VF08, (1+2*vertexSize)(VI02) 12F0: MADDAy.xyw ACC, VF05, VF12 IADDIU VI06, VI02, vertexSize 12F8: MADDz.xyzw VF20, VF06, VF12 SQ.xyzw VF20, (2+0*OutverSize)(VI05) ; - store pos-1 1300: FTOI0.xyzw VF18, VF16 SQ.xyzw VF15, (1+0*OutverSize)(VI05) ; - store rgba-1 1308: MULQ.xyz VF14, VF17, Q IBEQ VI06, VI10, MPFgeneratorEnd 1310: MULQ.xyz VF12, VF09, Q LQ.xyzw VF19, (2+2*vertexSize)(VI02) ; - divide st-1 1318: MAX.w VF07, VF20, VF10 IBNE VI04, VI00, 0x1338 1320: NOP DIV Q, VF07z, VF20w 1328: SUB.xyzw VF21, VF14, VF10 B 0x1348 1330: MULAw.xyzw ACC, VF03, VF00 SQ.xyz VF12, (0+1*OutverSize)(VI05) 1338: SUB.xyzw VF21, VF14, VF11 B 0x1348 1340: MULAw.xyzw ACC, VF03, VF00 SQ.xyz VF12, (0+1*OutverSize)(VI05) 1348: NOP LQ.xyz VF17, (0+2*vertexSize)(VI06) 1350: MINI.w VF13, VF07, VF12 ILw.w VI04, (0+2*vertexSize)(VI06) 1358: FTOI4.xyzw VF14, VF21 LQ.xy VF09, (1+2*vertexSize)(VI06) 1360: MADDAx.xyw ACC, VF04, VF17 IADDIU VI02, VI06, vertexSize 1368: MADDAy.xyw ACC, VF05, VF17 SQ.xyzw VF18, (1+1*OutverSize)(VI05) 1370: MADDz.xyzw VF17, VF06, VF17 LQ.xyzw VF16, (2+2*vertexSize)(VI06) 1378: FTOI0.xyzw VF15, VF19 SQ.xyzw VF14, (2+1*OutverSize)(VI05) 1380: MULQ.xyz VF13, VF20, Q IBNE VI02, VI10, MPFgeneratorLoop 1388: MULQ.xyz VF14, VF08, Q IADDIU VI05, VI05, 2*OutverSize MPFgeneratorEnd: # end include 1390: NOP IADDIU VI02, VI00, vuSymbGifTag 1398: NOP XGKICK VI02 13A0: NOP IADD VI15, VI00, VI12 13A8: NOP IADD VI12, VI00, VI13 13B0: NOP IADD VI13, VI00, VI15 13B8: NOP XGKICK VI14 13C0: NOP B DoubleBufferStage 13C8: NOP IADD VI14, VI00, VI12 TSClipRender: 13D0: SUB.w VF23, VF00, VF00 FCSET 0 13D8: SUB.w VF25, VF00, VF00 IADDIU VI04, VI00, 0 13E0: SUB.xzw VF17, VF00, VF00 LQ.xyzw VF26, vuSDClipvec1(VI00) 13E8: ADDw.y VF17, VF00, VF00 LQ.xyzw VF03, 0(VI11) 13F0: ADDw.z VF19, VF00, VF00 LQ.xyzw VF27, vuSDClipvec2(VI00) 13F8: SUB.xyw VF19, VF00, VF00 LQ.xyzw VF04, 4(VI11) 1400: MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF05, 8(VI11) 1408: MADDAx.xyw ACC, VF28, VF03 MR32.x VF26, VF26 1410: MADDAy.xyw ACC, VF29, VF03 MR32.x VF24, VF26 1418: MADDz.xyzw VF03, VF30, VF03 LQ.yz VF24, vuSDClipvec2(VI00) 1420: MULAw.xyzw ACC, VF31, VF00 MR32.x VF27, VF27 1428: MADDAx.xyw ACC, VF28, VF04 NOP 1430: MADDAy.xyw ACC, VF29, VF04 NOP 1438: MADDz.xyzw VF04, VF30, VF04 NOP 1440: MULAw.xyzw ACC, VF31, VF00 NOP 1448: MADDAx.xyw ACC, VF28, VF05 IADDIU VI02, VI00, 0xC0 1450: MADDAy.xyw ACC, VF29, VF05 MOVE.xyzw VF16, VF03 1458: MADDz.xyzw VF05, VF30, VF05 MOVE.xyzw VF18, VF04 1460: ADDA.z ACC, VF00, VF26 IADDIU VI09, VI00, 0 1468: MUL.xy VF01, VF03, VF24 IADDIU VI07, VI00, ClippingBuffer 1470: MADDw.z VF01, VF24, VF03 IADDIU VI11, VI11, 8 1478: MUL.xy VF23, VF04, VF24 IADDIU VI05, VI00, 1 1480: MADDw.z VF23, VF24, VF04 SQ.xyzw VF00, 3(VI14) 1488: MUL.xy VF25, VF05, VF24 SQ.xyzw VF17, 5(VI14) 1490: MADDw.z VF25, VF24, VF05 SQ.xyzw VF19, 1(VI14) 1498: CLIPw.xyz VF00, VF00 LQ.xyzw VF15, 4(VI11) 14A0: CLIPw.xyz VF01, VF03 SQ.xyzw VF03, 4(VI14) 14A8: CLIPw.xyz VF23, VF04 SQ.xyzw VF04, 0(VI14) 14B0: CLIPw.xyz VF25, VF05 SQ.xyzw VF05, 2(VI14) 14B8: NOP ILw.w VI01, 0(VI11) 14C0: MULAw.xyzw ACC, VF31, VF00 MOVE.xyzw VF01, VF23 14C8: MADDAx.xyw ACC, VF28, VF15 IADDIU VI08, VI14, 6 14D0: MADDAy.xyw ACC, VF29, VF15 IADDIU VI03, VI14, 0 14D8: MADDz.xyzw VF15, VF30, VF15 IBNE VI01, VI00, 0x1CB8 14E0: ADDx.xyzw VF23, VF25, VF00 FCAND VI01, 0xFFFFFF 14E8: ADDx.xyzw VF16, VF03, VF00 IBEQ VI01, VI00, 0x1BF8 14F0: NOP FCOR VI01, 0x7DF7DF 14F8: ADDw.y VF06, VF00, VF18 IBNE VI01, VI00, 0x1CB8 1500: ADDw.x VF06, VF00, VF03 FCAND VI01, 0x820820 1508: NOP IBEQ VI01, VI00, 0x15F0 1510: SUBw.w VF20, VF18, VF16 LQ.xyzw VF17, -1(VI08) 1518: CLIPw.xyz VF00, VF00 IADDIU VI04, VI08, 0 1520: SUBw.xy VF07, VF06, VF27 LQ.xyzw VF08, 2(VI03) 1528: ADDy.x VF06, VF00, VF06 LQ.xyzw VF19, 1(VI03) 1530: MUL.xy VF09, VF18, VF24 IADDIU VI03, VI03, 2 1538: ADDA.z ACC, VF00, VF26 DIV Q, VF00w, VF20w 1540: ADDw.y VF06, VF00, VF08 FMAND VI01, VI02 1548: MADDw.z VF09, VF24, VF18 IBEQ VI01, VI02, 0x15D0 1550: MULAy.xyzw ACC, VF16, VF07 MOVE.xyzw VF16, VF18 1558: MSUBx.xyzw VF22, VF18, VF07 IBEQ VI01, VI00, 0x15C0 1560: MULAy.xyzw ACC, VF17, VF07 NOP 1568: MSUBx.xyzw VF21, VF19, VF07 NOP 1570: NOP NOP 1578: MULQ.xyw VF22, VF22, Q NOP 1580: SUBw.z VF20, VF00, VF27 NOP 1588: MULQ.xyzw VF21, VF21, Q IADDIU VI02, VI00, 0x40 1590: NOP NOP 1598: MUL.xy VF20, VF22, VF24 SQI.xyzw VF22, (VI08++) 15A0: NOP NOP 15A8: NOP SQI.xyzw VF21, (VI08++) 15B0: NOP IBEQ VI01, VI02, 0x15D0 15B8: CLIPw.xyz VF20, VF22 IADDIU VI02, VI00, 0xC0 15C0: NOP SQI.xyzw VF18, (VI08++) 15C8: CLIPw.xyz VF09, VF18 SQI.xyzw VF19, (VI08++) 15D0: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, 0x1520 15D8: SUBw.w VF20, VF08, VF16 MOVE.xyzw VF17, VF19 15E0: NOP IBEQ VI08, VI04, 0x1CB8 15E8: NOP LQ.xyzw VF16, -2(VI08) 15F0: NOP FCAND VI01, 0x7DF7DF 15F8: NOP IBEQ VI01, VI00, 0x1AD0 1600: SUBw.y VF06, VF00, VF18 FCOR VI01, 0xBEFBEF 1608: SUBw.x VF06, VF00, VF16 IBNE VI01, VI00, 0x1CB8 1610: NOP FCAND VI01, 0x410410 1618: NOP IBEQ VI01, VI00, 0x16E8 1620: NOP LQ.xyzw VF17, -1(VI08) 1628: SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 1630: ADDw.xy VF07, VF06, VF26 LQ.xyzw VF08, 2(VI03) 1638: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 1640: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 1648: ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y 1650: SUBw.y VF06, VF00, VF08 FMAND VI01, VI02 1658: MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, 0x16C0 1660: MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF22, 0(VI08) 1668: MULAy.xyzw ACC, VF17, VF07 SQ.xyzw VF17, 1(VI08) 1670: MSUBx.xyzw VF21, VF19, VF07 IBEQ VI01, VI00, 0x16C0 1678: NOP IADDIU VI08, VI08, 2 1680: NOP NOP 1688: MULQ.xyzw VF22, VF22, Q IADDIU VI02, VI00, 0x40 1690: MULQ.xyzw VF21, VF21, Q NOP 1698: NOP IBEQ VI01, VI02, 0x16B0 16A0: NOP IADDIU VI02, VI00, 0xC0 16A8: NOP ISUBIU VI08, VI08, 2 16B0: NOP SQI.xyzw VF22, (VI08++) 16B8: NOP SQI.xyzw VF21, (VI08++) 16C0: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, 0x1630 16C8: SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 16D0: NOP LQ.xyzw VF16, -2(VI08) 16D8: NOP IBEQ VI08, VI04, 0x1CB8 16E0: NOP NOP 16E8: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x3CF3CF 16F0: MADDy.y VF06, VF27, VF18 IBEQ VI01, VI00, 0x1AD0 16F8: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xDF7DF7 1700: MADDy.x VF06, VF27, VF16 IBNE VI01, VI00, 0x1CB8 1708: NOP FCAND VI01, 0x208208 1710: NOP IBEQ VI01, VI00, 0x17E8 1718: NOP LQ.xyzw VF17, -1(VI08) 1720: SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 1728: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 2(VI03) 1730: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 1738: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 1740: ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y 1748: ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 1750: MADDy.y VF06, VF27, VF08 SQ.xyzw VF22, 0(VI08) 1758: MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, 0x17C0 1760: MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 1(VI08) 1768: MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, 0x17C0 1770: MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 2 1778: NOP NOP 1780: NOP IADDIU VI02, VI00, 0x40 1788: MULQ.xyzw VF22, VF22, Q NOP 1790: MULQ.xyzw VF21, VF21, Q NOP 1798: NOP IBEQ VI01, VI02, 0x17B0 17A0: NOP IADDIU VI02, VI00, 0xC0 17A8: NOP ISUBIU VI08, VI08, 2 17B0: NOP SQI.xyzw VF22, (VI08++) 17B8: NOP SQI.xyzw VF21, (VI08++) 17C0: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, 0x1728 17C8: SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 17D0: NOP LQ.xyzw VF16, -2(VI08) 17D8: NOP IBEQ VI08, VI04, 0x1CB8 17E0: NOP NOP 17E8: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x1C71C7 17F0: MSUBy.y VF06, VF27, VF18 IBEQ VI01, VI00, 0x1AD0 17F8: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xEFBEFB 1800: MSUBy.x VF06, VF27, VF16 IBNE VI01, VI00, 0x1CB8 1808: NOP FCAND VI01, 0x104104 1810: NOP IBEQ VI01, VI00, 0x18E8 1818: NOP LQ.xyzw VF17, -1(VI08) 1820: SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 1828: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 2(VI03) 1830: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 1838: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 1840: ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y 1848: ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 1850: MSUBy.y VF06, VF27, VF08 SQ.xyzw VF22, 0(VI08) 1858: MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, 0x18C0 1860: MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 1(VI08) 1868: MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, 0x18C0 1870: MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 2 1878: NOP NOP 1880: NOP IADDIU VI02, VI00, 0x40 1888: MULQ.xyzw VF22, VF22, Q NOP 1890: MULQ.xyzw VF21, VF21, Q NOP 1898: NOP IBEQ VI01, VI02, 0x18B0 18A0: NOP IADDIU VI02, VI00, 0xC0 18A8: NOP ISUBIU VI08, VI08, 2 18B0: NOP SQI.xyzw VF22, (VI08++) 18B8: NOP SQI.xyzw VF21, (VI08++) 18C0: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, 0x1828 18C8: SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 18D0: NOP LQ.xyzw VF16, -2(VI08) 18D8: NOP IBEQ VI08, VI04, 0x1CB8 18E0: NOP NOP 18E8: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0xC30C3 18F0: MADDx.y VF06, VF26, VF18 IBEQ VI01, VI00, 0x1AD0 18F8: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xF7DF7D 1900: MADDx.x VF06, VF26, VF16 IBNE VI01, VI00, 0x1CB8 1908: NOP FCAND VI01, 0x82082 1910: NOP IBEQ VI01, VI00, 0x19E8 1918: NOP LQ.xyzw VF17, -1(VI08) 1920: SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 1928: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 2(VI03) 1930: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 1938: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 1940: ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y 1948: ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 1950: MADDx.y VF06, VF26, VF08 SQ.xyzw VF22, 0(VI08) 1958: MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, 0x19C0 1960: MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 1(VI08) 1968: MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, 0x19C0 1970: MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 2 1978: NOP NOP 1980: NOP IADDIU VI02, VI00, 0x40 1988: MULQ.xyzw VF22, VF22, Q NOP 1990: MULQ.xyzw VF21, VF21, Q NOP 1998: NOP IBEQ VI01, VI02, 0x19B0 19A0: NOP IADDIU VI02, VI00, 0xC0 19A8: NOP ISUBIU VI08, VI08, 2 19B0: NOP SQI.xyzw VF22, (VI08++) 19B8: NOP SQI.xyzw VF21, (VI08++) 19C0: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, 0x1928 19C8: SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 19D0: NOP LQ.xyzw VF16, -2(VI08) 19D8: NOP IBEQ VI08, VI04, 0x1CB8 19E0: NOP NOP 19E8: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x41041 19F0: MSUBx.y VF06, VF26, VF18 IBEQ VI01, VI00, 0x1AD0 19F8: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xFBEFBE 1A00: MSUBx.x VF06, VF26, VF16 IBNE VI01, VI00, 0x1CB8 1A08: NOP FCAND VI01, 0x41041 1A10: NOP IBEQ VI01, VI00, 0x1AD0 1A18: NOP LQ.xyzw VF17, -1(VI08) 1A20: SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 1A28: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 2(VI03) 1A30: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 1A38: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 1A40: ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y 1A48: ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 1A50: MSUBx.y VF06, VF26, VF08 SQ.xyzw VF22, 0(VI08) 1A58: MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, 0x1AC0 1A60: MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 1(VI08) 1A68: MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, 0x1AC0 1A70: MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 2 1A78: NOP NOP 1A80: NOP IADDIU VI02, VI00, 0x40 1A88: MULQ.xyzw VF22, VF22, Q NOP 1A90: MULQ.xyzw VF21, VF21, Q NOP 1A98: NOP IBEQ VI01, VI02, 0x1AB0 1AA0: NOP IADDIU VI02, VI00, 0xC0 1AA8: NOP ISUBIU VI08, VI08, 2 1AB0: NOP SQI.xyzw VF22, (VI08++) 1AB8: NOP SQI.xyzw VF21, (VI08++) 1AC0: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, 0x1A28 1AC8: SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 1AD0: NOP LOI 2047 1AD8: ADDi.w VF01, VF00, I IBEQ VI08, VI04, 0x1CB8 1AE0: NOP NOP 1AE8: NOP LQi.xyw VF03, (VI04++) 1AF0: NOP LQi.yzw VF14, (VI04++) 1AF8: NOP LQ.xy VF08, -7(VI11) 1B00: NOP LQ.xy VF09, -3(VI11) 1B08: NOP LQ.xyzw VF11, -6(VI11) 1B10: MAX.z VF03, VF31, VF31 LQ.xyzw VF12, -2(VI11) 1B18: NOP LQ.xy VF10, 1(VI11) 1B20: MAX.z VF06, VF31, VF31 IADDIU VI07, VI07, 4 1B28: MULAy.xy ACC, VF08, VF14 LQ.xyzw VF13, 2(VI11) 1B30: MADDAz.xy ACC, VF09, VF14 SQ.xyzw VF03, -4(VI07) 1B38: MADDw.xy VF07, VF10, VF14 LQD.yzw VF16, (--VI08) 1B40: MULAy.xyzw ACC, VF11, VF14 LQD.xyw VF06, (--VI08) 1B48: MADDAz.xyzw ACC, VF12, VF14 SQ.w VF01, -3(VI07) 1B50: MADDw.xyzw VF14, VF13, VF14 LQ.w VF07, 0(VI11) 1B58: NOP ISUB VI01, VI08, VI04 1B60: NOP SQ.xyzw VF03, 0(VI07) 1B68: NOP LQi.xyw VF03, (VI04++) 1B70: MULAy.xy ACC, VF08, VF16 SQ.xyw VF07, 1(VI07) 1B78: MADDAz.xy ACC, VF09, VF16 SQ.xyzw VF14, 2(VI07) 1B80: MADDw.xy VF07, VF10, VF16 LQi.yzw VF17, (VI04++) 1B88: MULAy.xyzw ACC, VF11, VF16 IADDIU VI07, VI07, 4 1B90: MADDAz.xyzw ACC, VF12, VF16 IBLTZ VI01, 0x1BE8 1B98: MADDw.xyzw VF18, VF13, VF16 IADDIU VI09, VI09, 1 1BA0: NOP ISUB VI01, VI08, VI04 1BA8: NOP LQD.yzw VF16, (--VI08) 1BB0: NOP SQ.xyzw VF06, 0(VI07) 1BB8: MULAy.xy ACC, VF08, VF17 SQ.xyw VF07, 1(VI07) 1BC0: MADDAz.xy ACC, VF09, VF17 SQ.xyzw VF18, 2(VI07) 1BC8: MADDw.xy VF07, VF10, VF17 IADDIU VI07, VI07, 4 1BD0: MULAy.xyzw ACC, VF11, VF17 LQD.xyw VF06, (--VI08) 1BD8: MADDAz.xyzw ACC, VF12, VF17 IBGEZ VI01, 0x1B58 1BE0: MADDw.xyzw VF14, VF13, VF17 IADDIU VI09, VI09, 1 1BE8: NOP B 0x1CB8 1BF0: NOP IADDIU VI09, VI09, 1 1BF8: NOP LOI 2047 1C00: ADDi.w VF01, VF00, I IBEQ VI05, VI00, 0x1C78 1C08: NOP IADDIU VI09, VI09, 1 1C10: NOP LQ.xyzw VF09, -6(VI11) 1C18: NOP LQ.xy VF07, -7(VI11) 1C20: MAX.w VF07, VF01, VF01 LQ.xy VF06, -3(VI11) 1C28: NOP LQ.xyzw VF08, -2(VI11) 1C30: MAX.w VF06, VF01, VF01 SQ.xyzw VF09, 2(VI07) 1C38: NOP IADDIU VI09, VI09, 2 1C40: NOP SQ.xyw VF07, 1(VI07) 1C48: NOP SQ.xyzw VF08, 6(VI07) 1C50: NOP SQ.xyw VF06, 5(VI07) 1C58: NOP SQ.xyzw VF04, 4(VI07) 1C60: NOP SQ.xyzw VF03, 0(VI07) 1C68: NOP IADDIU VI07, VI07, 8 1C70: NOP IADDIU VI05, VI00, 0 1C78: NOP LQ.w VF01, 0(VI11) 1C80: NOP LQ.xyzw VF06, 2(VI11) 1C88: NOP LQ.xy VF03, 1(VI11) 1C90: ITOF4.w VF03, VF01 SQ.xyzw VF05, 0(VI07) 1C98: NOP IADDIU VI07, VI07, 4 1CA0: NOP SQ.xyzw VF06, -2(VI07) 1CA8: NOP B 0x1CC0 1CB0: MULw.z VF25, VF24, VF15 SQ.xyw VF03, -3(VI07) 1CB8: MULw.z VF25, VF24, VF15 IADDIU VI05, VI00, 1 1CC0: ADDx.xyzw VF03, VF04, VF00 ISUBIU VI01, VI07, TSClipRedLine 1CC8: ADDx.xyzw VF04, VF05, VF00 IADDIU VI11, VI11, 4 1CD0: MUL.xy VF25, VF15, VF24 IBGEZ VI01, 0x1CF0 1CD8: ADDx.xyzw VF05, VF15, VF00 LQ.xyzw VF15, 4(VI11) 1CE0: ADD.z VF25, VF25, VF26 IBNE VI11, VI10, 0x14A0 1CE8: CLIPw.xyz VF00, VF00 MOVE.xyzw VF18, VF04 1CF0: NOP IADD VI07, VI00, VI07 1CF8: NOP ISUBIU VI05, VI09, 3 1D00: NOP LQ.yzw VF01, vuSDgifTag(VI00) 1D08: NOP IBLTZ VI05, DoubleBufferStage 1D10: NOP IADDIU VI01, VI00, ClippingBuffer 1D18: NOP BAL VI08, CTSprocessor 1D20: NOP IADD VI15, VI00, VI12 1D28: NOP IADD VI12, VI00, VI13 1D30: NOP IADD VI13, VI00, VI15 1D38: NOP IBEQ VI11, VI10, DoubleBufferStage 1D40: NOP IADD VI14, VI00, VI12 1D48: NOP B TSClipRender 1D50: NOP ISUBIU VI11, VI11, 8 # discard any triangles that are not completely inside the frustum # insert ALL triangles into clipping buffer until TSClipRedLine, discarded ones with ADC flag # draw them with all passes # loop until input buffer is depleted TSCullRender: 1D58: NOP LQ.xyz VF03, (0+0*vertexSize)(VI11) ; - load pos-1 1D60: NOP LQ.yz VF01, vuSDClipvec1(VI00) 1D68: MULAw.xyzw ACC, VF31, VF00 LOI 2047 ; xform pos-1 1D70: ADDi.w VF04, VF00, I NOP ; load ADC flag 0x8000 1D78: MADDAx.xyw ACC, VF28, VF03 LQ.xyz VF04, (0+1*vertexSize)(VI11) ; xform pos-1 - load pos-2 1D80: MADDAy.xyw ACC, VF29, VF03 NOP ; xform pos-1 1D88: MADDz.xyzw VF06, VF30, VF03 MR32.x VF03, VF01 ; xform pos-1 1D90: MULAw.xyzw ACC, VF31, VF00 LQ.yz VF03, vuSDClipvec2(VI00) ; xform pos-2 1D98: MADDAx.xyw ACC, VF28, VF04 LQ.xyzw VF08, (2+0*vertexSize)(VI11) ; xform pos-2 1DA0: MADDAy.xyw ACC, VF29, VF04 LQ.xyzw VF09, (2+1*vertexSize)(VI11) ; xform pos-2 1DA8: MADDz.xyzw VF07, VF30, VF04 LQ.xyz VF05, (0+2*vertexSize)(VI11) ; xform pos-2 - load pos-3 1DB0: MUL.xy VF04, VF06, VF03 LQ.xy VF10, (1+0*vertexSize)(VI11) 1DB8: ITOF4.w VF10, VF04 IADDIU VI09, VI00, 0 1DC0: ITOF4.w VF01, VF04 IADDIU VI07, VI00, ClippingBuffer 1DC8: MUL.xy VF08, VF07, VF03 SQ.xyzw VF08, (2+0*vertexSize)(VI07) ; - store rgba-1 1DD0: MULAw.xyzw ACC, VF31, VF00 SQ.xyzw VF06, (0+0*vertexSize)(VI07) ; xform pos-3 - store pos-1 1DD8: MADDAx.xyw ACC, VF28, VF05 SQ.xyzw VF07, (0+1*vertexSize)(VI07) ; xform pos-3 - store pos-2 1DE0: MADDAy.xyw ACC, VF29, VF05 SQ.xyzw VF09, (2+1*vertexSize)(VI07) ; xform pos-3 - store rgba-2 1DE8: MADDz.xyzw VF05, VF30, VF05 SQ.xyw VF10, (1+0*vertexSize)(VI07) ; xform pos-3 - store st-1 1DF0: ADDA.z ACC, VF00, VF01 IADDIU VI09, VI09, 2 1DF8: MADDw.z VF04, VF03, VF06 LQ.xy VF01, (1+1*vertexSize)(VI11) 1E00: MADDw.z VF08, VF03, VF07 FCSET 0 1E08: MUL.xy VF07, VF05, VF03 LQ.xyz VF06, (0+3*vertexSize)(VI11) 1E10: MADDw.z VF07, VF03, VF05 IADDIU VI11, VI11, 2*vertexSize 1E18: CLIPw.xyz VF04, VF06 SQ.xyw VF01, (1+1*vertexSize)(VI07) ; - store st-2 1E20: CLIPw.xyz VF08, VF07 IADDIU VI07, VI07, 2*vertexSize GTSCullExpLoop: 1E28: MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF10, (2+0*vertexSize)(VI11) 1E30: CLIPw.xyz VF07, VF05 LQ.w VF01, (0+0*vertexSize)(VI11) 1E38: MADDAx.xyw ACC, VF28, VF06 LQ.xyz VF08, (1+0*vertexSize)(VI11) 1E40: MADDAy.xyw ACC, VF29, VF06 IADDIU VI11, VI11, vertexSize 1E48: MADDz.xyzw VF09, VF30, VF06 SQ.xyzw VF05, (0+0*vertexSize)(VI07) 1E50: NOP FCAND VI01, 0x3FFFF 1E58: NOP IBNE VI01, VI00, GTSCullExpCull 1E60: NOP SQ.xyzw VF10, (2+0*vertexSize)(VI07) 1E68: ITOF4.w VF08, VF01 NOP 1E70: MULw.z VF04, VF03, VF09 B GTSCullExpSkipCull 1E78: MUL.xy VF07, VF09, VF03 NOP GTSCullExpCull: 1E80: MULw.z VF04, VF03, VF09 MOVE.w VF08, VF04 1E88: MUL.xy VF07, VF09, VF03 NOP GTSCullExpSkipCull: 1E90: NOP IADDIU VI07, VI07, vertexSize 1E98: NOP ISUBIU VI01, VI07, TSClipRedLine 1EA0: NOP SQ.xyzw VF08, (1-1*vertexSize)(VI07) 1EA8: NOP IBGEZ VI01, GTSCullExpExit 1EB0: NOP IADDIU VI09, VI09, 1 1EB8: MAX.xyzw VF05, VF09, VF09 LQ.xyz VF06, (0+1*vertexSize)(VI11) 1EC0: ADD.z VF07, VF04, VF01 IBNE VI11, VI10, GTSCullExpLoop 1EC8: NOP NOP GTSCullExpExit: 1ED0: NOP ISUBIU VI05, VI09, 3 1ED8: NOP LQ.yzw VF01, vuSDgifTag(VI00) 1EE0: NOP IBLTZ VI05, DoubleBufferStage 1EE8: NOP IADDIU VI01, VI00, ClippingBuffer 1EF0: NOP BAL VI08, CTSprocessor 1EF8: NOP IADD VI15, VI00, VI12 1F00: NOP IADD VI12, VI00, VI13 1F08: NOP IADD VI13, VI00, VI15 1F10: NOP IBEQ VI11, VI10, DoubleBufferStage 1F18: NOP IADD VI14, VI00, VI12 1F20: NOP B TSCullRender 1F28: NOP ISUBIU VI11, VI11, 2*vertexSize TLClipRender: 1F30: SUB.zw VF01, VF00, VF00 NOP 1F38: SUB.zw VF06, VF00, VF00 FCSET 0 1F40: SUB.zw VF07, VF00, VF00 IADDIU VI04, VI00, 0 1F48: SUB.xzw VF17, VF00, VF00 LQ.xyzw VF26, vuSDClipvec1(VI00) ; 0100 1F50: ADDw.y VF17, VF00, VF00 LQ.xyzw VF03, (0+0*vertexSize)(VI11) ; 0100 - load pos-1 1F58: ADDw.z VF19, VF00, VF00 LQ.xyzw VF27, vuSDClipvec2(VI00) ; 0010 1F60: SUB.xyw VF19, VF00, VF00 LQ.xyzw VF04, (0+1*vertexSize)(VI11) ; 0010 - load pos-2 1F68: MULAw.xyzw ACC, VF31, VF00 MR32.x VF26, VF26 ; xform pos-1 1F70: MADDAx.xyw ACC, VF28, VF03 MR32.x VF24, VF26 ; xform pos-1 1F78: MADDAy.xyw ACC, VF29, VF03 SQ.xyzw VF00, 3(VI14) ; xform pos-1 - store 0001 1F80: MADDz.xyzw VF03, VF30, VF03 SQ.xyzw VF17, 5(VI14) ; xform pos-1 - store 0100 1F88: MULAw.xyzw ACC, VF31, VF00 SQ.xyzw VF19, 1(VI14) ; xform pos-2 - store 0010 1F90: MADDAx.xyw ACC, VF28, VF04 IADDIU VI09, VI00, 0 ; xform pos-2 1F98: MADDAy.xyw ACC, VF29, VF04 LQ.xyzw VF05, (0+2*vertexSize)(VI11) ; xform pos-2 - load pos-3 1FA0: MADDz.xyzw VF18, VF30, VF04 IADDIU VI02, VI00, 0xC0 ; xform pos-2 - xy sign flag 1FA8: MADDz.xyzw VF04, VF30, VF04 IADDIU VI05, VI00, ClippingBuffer ; xform pos-2 1FB0: ADDx.xyzw VF16, VF03, VF00 SQ.xyzw VF03, 4(VI14) ; - store inter-1 1FB8: ADDx.yz VF24, VF27, VF00 MR32.x VF27, VF27 TLEExpanderLoop: 1FC0: MULAw.xyzw ACC, VF31, VF00 LQ.xy VF01, (1+0*vertexSize)(VI11) ; xform pos-3 - load st-1 1FC8: MADDAx.xyw ACC, VF28, VF05 LQ.xy VF06, (1+1*vertexSize)(VI11) ; xform pos-3 - load st-2 1FD0: MADDAy.xyw ACC, VF29, VF05 LQ.xy VF07, (1+2*vertexSize)(VI11) ; xform pos-3 - load st-3 1FD8: MADDz.xyzw VF05, VF30, VF05 SQ.xyzw VF04, 0(VI14) ; xform pos-3 - store inter-2 1FE0: ADDA.z ACC, VF00, VF26 SQ.xyzw VF01, (1+0*vertexSize)(VI05) ; z offset - store st-1 1FE8: MUL.xy VF21, VF03, VF24 SQ.xyzw VF06, (1+1*vertexSize)(VI05) ; clip pos-1 - store st-2 1FF0: MADDw.z VF21, VF24, VF03 SQ.xyzw VF07, (1+2*vertexSize)(VI05) ; clip pos-1 - store st-3 1FF8: MUL.xy VF22, VF04, VF24 SQ.xyzw VF05, 2(VI14) ; clip pos-2 - store inter-3 2000: MADDw.z VF22, VF24, VF04 LQ.xyzw VF08, (2+0*vertexSize)(VI11) ; clip pos-2 - load rbga-1 2008: MUL.xy VF23, VF05, VF24 LQ.xyzw VF09, (2+1*vertexSize)(VI11) ; clip pos-3 - load rbga-2 2010: MADDw.z VF23, VF24, VF05 LQ.xyzw VF10, (2+2*vertexSize)(VI11) ; clip pos-3 - load rbga-3 2018: CLIPw.xyz VF00, VF00 LQ.xyzw VF03, (0+3*vertexSize)(VI11) ; clip clear 2020: CLIPw.xyz VF21, VF16 SQ.xyzw VF08, (2+0*vertexSize)(VI05) ; clip v1 - store rgba-1 2028: CLIPw.xyz VF22, VF18 SQ.xyzw VF09, (2+1*vertexSize)(VI05) ; clip v2 - store rgba-2 2030: CLIPw.xyz VF23, VF05 SQ.xyzw VF10, (2+2*vertexSize)(VI05) ; clip v3 - store rgba-3 2038: NOP ILw.w VI01, (0+2*vertexSize)(VI11) ; - get ADC flag 2040: MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF04, (0+4*vertexSize)(VI11) 2048: MADDAx.xyw ACC, VF28, VF03 IADDIU VI08, VI14, 6 ; - out buffer 2050: MADDAy.xyw ACC, VF29, VF03 IADDIU VI03, VI14, 0 ; - in buffer 2058: MADDz.xyzw VF03, VF30, VF03 IBNE VI01, VI00, TLEFullClip ; - skip ADC flagged tri # clip z = near TLEWall1: 2060: NOP FCAND VI01, 0xFFFFFF 2068: ADDw.y VF20, VF00, VF00 IBEQ VI01, VI00, TLEFullTrig ; - tri fully inside frustum 2070: ADDw.x VF12, VF00, VF16 FCOR VI01, 0x7DF7DF ; z1 - check -z 2078: ADDw.y VF12, VF00, VF18 IBNE VI01, VI00, TLEFullClip ; z2 - tri fully outside 2080: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x820820 ; - check -z 2088: MSUBw.y VF20, VF20, VF16 IBEQ VI01, VI00, TLEWall2 ; z2 - z1 - tri fully inside 2090: NOP LQ.xyzw VF17, -1(VI08) ; - load inter-1 2098: CLIPw.xyz VF00, VF00 IADDIU VI04, VI08, 0 ; - in buffer end TLERing1: 20A0: SUBw.xy VF13, VF12, VF27 LQ.xyzw VF14, 2(VI03) ; z12 - near - load next pos 20A8: ADDy.x VF12, VF00, VF12 LQ.xyzw VF19, 1(VI03) ; cycle z - load inter-2 20B0: MUL.xy VF23, VF18, VF24 IADDIU VI03, VI03, 2 ; clip pos-2 20B8: ADDA.z ACC, VF00, VF26 DIV Q, VF00w, VF20y ; z offset - 1/zdist 20C0: ADDw.y VF12, VF00, VF14 FMAND VI01, VI02 ; cycle z - result of z12-near 20C8: MADDw.z VF23, VF24, VF18 IBEQ VI01, VI02, TLENext1 ; clip pos-2 - edge fully clipped 20D0: MULAy.xyw ACC, VF16, VF13 MOVE.xyzw VF16, VF18 ; interp pos - cycle pos-1 20D8: MSUBx.xyw VF22, VF18, VF13 IBEQ VI01, VI00, TLESwap1 ; interp pos - edge fully inside 20E0: MULAy.xyzw ACC, VF17, VF13 NOP ; interp inter 20E8: MSUBx.xyzw VF21, VF19, VF13 NOP ; interp inter 20F0: NOP NOP 20F8: MULQ.xyw VF22, VF22, Q NOP ; scale pos 2100: SUBw.z VF20, VF00, VF27 NOP ; clip new pos 2108: MULQ.xyzw VF21, VF21, Q IADDIU VI02, VI00, 0x40 ; scale inter - z2-n sign 2110: NOP NOP 2118: MUL.xy VF20, VF22, VF24 SQI.xyzw VF22, (VI08++) ; clip new pos - store new pos 2120: NOP NOP 2128: NOP SQI.xyzw VF21, (VI08++) ; - store new inter 2130: NOP IBEQ VI01, VI02, TLENext1 ; - edge exits frustum 2138: CLIPw.xyz VF20, VF22 IADDIU VI02, VI00, 0xC0 TLESwap1: 2140: NOP SQI.xyzw VF18, (VI08++) ; - store pos-2 2148: CLIPw.xyz VF23, VF18 SQI.xyzw VF19, (VI08++) ; - store inter-2 TLENext1: 2150: ADDx.xyzw VF18, VF14, VF00 IBNE VI03, VI04, TLERing1 ; cycle pos-2 2158: SUBx.y VF20, VF12, VF12 MOVE.xyzw VF17, VF19 ; zdist - cycle inter 2160: NOP IBEQ VI08, VI04, TLEFullClip 2168: NOP LQ.xyzw VF16, -2(VI08) ; - load pos-1 # clip z = far TLEWall2: 2170: NOP FCAND VI01, 0x7DF7DF ; - check everything but -z 2178: NOP IBEQ VI01, VI00, TLEMetaFormer ; - fully inside frustum 2180: SUBw.y VF12, VF00, VF18 FCOR VI01, 0xBEFBEF ; -z2 - check +z 2188: SUBw.x VF12, VF00, VF16 IBNE VI01, VI00, TLEFullClip ; -z1 - fully outside 2190: NOP FCAND VI01, 0x410410 ; - check +z 2198: NOP IBEQ VI01, VI00, TLEWall3 ; - fully inside 21A0: NOP LQ.xyzw VF17, -1(VI08) ; - load inter-1 21A8: SUBx.y VF20, VF12, VF12 IADDIU VI04, VI08, 0 ; zdist - in buffer end TLERing2: 21B0: ADDw.xy VF13, VF12, VF26 LQ.xyzw VF14, 2(VI03) ; far-z12 - load next pos 21B8: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) ; - load inter-2 21C0: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 ; cycle pos-1 21C8: ADDy.x VF12, VF00, VF12 DIV Q, VF00w, VF20y 21D0: SUBw.y VF12, VF00, VF14 FMAND VI01, VI02 ; - get clip flags 21D8: MULAy.xy ACC, VF22, VF13 IBEQ VI01, VI02, TLENext2 ; interp pos - edge fully outide 21E0: MSUBx.xy VF22, VF16, VF13 SQ.xyzw VF22, 0(VI08) ; interp pos - store pos-1 21E8: MULAy.xyzw ACC, VF17, VF13 SQ.xyzw VF17, 1(VI08) ; interp inter - store inter-1 21F0: MSUBx.xyzw VF21, VF19, VF13 IBEQ VI01, VI00, TLENext2 ; interp inter - edge fully inside 21F8: MULw.w VF22, VF00, VF26 IADDIU VI08, VI08, 2 2200: MULQ.xy VF22, VF22, Q NOP ; scale pos 2208: NOP IADDIU VI02, VI00, 0x40 2210: MULQ.xyzw VF21, VF21, Q NOP ; scale inter 2218: NOP IBEQ VI01, VI02, TLESwap2 ; - edge is exiting frustum 2220: NOP IADDIU VI02, VI00, 0xC0 2228: NOP ISUBIU VI08, VI08, 2 ; - remove vert-1 as it was outside TLESwap2: 2230: NOP SQI.xyzw VF22, (VI08++) ; - store new pos 2238: NOP SQI.xyzw VF21, (VI08++) ; - store new interp TLENext2: 2240: ADDx.xyzw VF18, VF14, VF00 IBNE VI03, VI04, TLERing2 ; cycle pos-2 2248: SUBx.y VF20, VF12, VF12 MOVE.xyzw VF17, VF19 ; - cycle inter 2250: NOP LQ.xyzw VF16, -2(VI08) ; - load last pos 2258: NOP IBEQ VI08, VI04, TLEFullClip 2260: NOP NOP # clip y = -z TLEWall3: 2268: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x3CF3CF 2270: MADDy.y VF12, VF27, VF18 IBEQ VI01, VI00, TLEMetaFormer 2278: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xDF7DF7 2280: MADDy.x VF12, VF27, VF16 IBNE VI01, VI00, TLEFullClip 2288: NOP FCAND VI01, 0x208208 2290: NOP IBEQ VI01, VI00, TLEWall4 2298: NOP LQ.xyzw VF17, -1(VI08) 22A0: SUBx.y VF20, VF12, VF12 IADDIU VI04, VI08, 0 TLERing3: 22A8: ADD.xy VF13, VF12, VF00 LQ.xyzw VF14, 2(VI03) 22B0: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 22B8: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 22C0: ADDy.x VF12, VF00, VF12 DIV Q, VF00w, VF20y 22C8: ADDAw.y ACC, VF00, VF14 FMAND VI01, VI02 22D0: MADDy.y VF12, VF27, VF14 SQ.xyzw VF22, 0(VI08) 22D8: MULAy.xyzw ACC, VF22, VF13 IBEQ VI01, VI02, TLENext3 22E0: MSUBx.xyzw VF22, VF16, VF13 SQ.xyzw VF17, 1(VI08) 22E8: MULAy.xyzw ACC, VF17, VF13 IBEQ VI01, VI00, TLENext3 22F0: MSUBx.xyzw VF21, VF19, VF13 IADDIU VI08, VI08, 2 22F8: NOP IADDIU VI02, VI00, 0x40 2300: MULQ.xyzw VF22, VF22, Q NOP 2308: NOP NOP 2310: MULQ.xyzw VF21, VF21, Q NOP 2318: NOP IBEQ VI01, VI02, TLESwap3 2320: NOP IADDIU VI02, VI00, 0xC0 2328: NOP ISUBIU VI08, VI08, 2 TLESwap3: 2330: NOP SQI.xyzw VF22, (VI08++) 2338: NOP SQI.xyzw VF21, (VI08++) TLENext3: 2340: ADDx.xyzw VF18, VF14, VF00 IBNE VI03, VI04, TLERing3 2348: SUBx.y VF20, VF12, VF12 MOVE.xyzw VF17, VF19 2350: NOP LQ.xyzw VF16, -2(VI08) 2358: NOP IBEQ VI08, VI04, TLEFullClip 2360: NOP NOP # clip y = z TLEWall4: 2368: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x1C71C7 2370: MSUBy.y VF12, VF27, VF18 IBEQ VI01, VI00, TLEMetaFormer 2378: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xEFBEFB 2380: MSUBy.x VF12, VF27, VF16 IBNE VI01, VI00, TLEFullClip 2388: NOP FCAND VI01, 0x104104 2390: NOP IBEQ VI01, VI00, 0x2468 2398: NOP LQ.xyzw VF17, -1(VI08) 23A0: SUBx.y VF20, VF12, VF12 IADDIU VI04, VI08, 0 23A8: ADD.xy VF13, VF12, VF00 LQ.xyzw VF14, 2(VI03) 23B0: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 23B8: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 23C0: ADDy.x VF12, VF00, VF12 DIV Q, VF00w, VF20y 23C8: ADDAw.y ACC, VF00, VF14 FMAND VI01, VI02 23D0: MSUBy.y VF12, VF27, VF14 SQ.xyzw VF22, 0(VI08) 23D8: MULAy.xyzw ACC, VF22, VF13 IBEQ VI01, VI02, 0x2440 23E0: MSUBx.xyzw VF22, VF16, VF13 SQ.xyzw VF17, 1(VI08) 23E8: MULAy.xyzw ACC, VF17, VF13 IBEQ VI01, VI00, 0x2440 23F0: MSUBx.xyzw VF21, VF19, VF13 IADDIU VI08, VI08, 2 23F8: NOP IADDIU VI02, VI00, 0x40 2400: MULQ.xyzw VF22, VF22, Q NOP 2408: NOP NOP 2410: MULQ.xyzw VF21, VF21, Q NOP 2418: NOP IBEQ VI01, VI02, 0x2430 2420: NOP IADDIU VI02, VI00, 0xC0 2428: NOP ISUBIU VI08, VI08, 2 2430: NOP SQI.xyzw VF22, (VI08++) 2438: NOP SQI.xyzw VF21, (VI08++) 2440: ADDx.xyzw VF18, VF14, VF00 IBNE VI03, VI04, 0x23A8 2448: SUBx.y VF20, VF12, VF12 MOVE.xyzw VF17, VF19 2450: NOP LQ.xyzw VF16, -2(VI08) 2458: NOP IBEQ VI08, VI04, TLEFullClip 2460: NOP NOP 2468: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0xC30C3 2470: MADDx.y VF12, VF26, VF18 IBEQ VI01, VI00, TLEMetaFormer 2478: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xF7DF7D 2480: MADDx.x VF12, VF26, VF16 IBNE VI01, VI00, TLEFullClip 2488: NOP FCAND VI01, 0x82082 2490: NOP IBEQ VI01, VI00, 0x2568 2498: NOP LQ.xyzw VF17, -1(VI08) 24A0: SUBx.y VF20, VF12, VF12 IADDIU VI04, VI08, 0 24A8: ADD.xy VF13, VF12, VF00 LQ.xyzw VF14, 2(VI03) 24B0: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 24B8: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 24C0: ADDy.x VF12, VF00, VF12 DIV Q, VF00w, VF20y 24C8: ADDAw.y ACC, VF00, VF14 FMAND VI01, VI02 24D0: MADDx.y VF12, VF26, VF14 SQ.xyzw VF22, 0(VI08) 24D8: MULAy.xyzw ACC, VF22, VF13 IBEQ VI01, VI02, 0x2540 24E0: MSUBx.xyzw VF22, VF16, VF13 SQ.xyzw VF17, 1(VI08) 24E8: MULAy.xyzw ACC, VF17, VF13 IBEQ VI01, VI00, 0x2540 24F0: MSUBx.xyzw VF21, VF19, VF13 IADDIU VI08, VI08, 2 24F8: NOP IADDIU VI02, VI00, 0x40 2500: MULQ.xyzw VF22, VF22, Q NOP 2508: NOP NOP 2510: MULQ.xyzw VF21, VF21, Q NOP 2518: NOP IBEQ VI01, VI02, 0x2530 2520: NOP IADDIU VI02, VI00, 0xC0 2528: NOP ISUBIU VI08, VI08, 2 2530: NOP SQI.xyzw VF22, (VI08++) 2538: NOP SQI.xyzw VF21, (VI08++) 2540: ADDx.xyzw VF18, VF14, VF00 IBNE VI03, VI04, 0x24A8 2548: SUBx.y VF20, VF12, VF12 MOVE.xyzw VF17, VF19 2550: NOP LQ.xyzw VF16, -2(VI08) 2558: NOP IBEQ VI08, VI04, TLEFullClip 2560: NOP NOP 2568: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x41041 2570: MSUBx.y VF12, VF26, VF18 IBEQ VI01, VI00, TLEMetaFormer 2578: ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xFBEFBE 2580: MSUBx.x VF12, VF26, VF16 IBNE VI01, VI00, TLEFullClip 2588: NOP FCAND VI01, 0x41041 2590: NOP IBEQ VI01, VI00, TLEMetaFormer 2598: NOP LQ.xyzw VF17, -1(VI08) 25A0: SUBx.y VF20, VF12, VF12 IADDIU VI04, VI08, 0 25A8: ADD.xy VF13, VF12, VF00 LQ.xyzw VF14, 2(VI03) 25B0: ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) 25B8: ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 25C0: ADDy.x VF12, VF00, VF12 DIV Q, VF00w, VF20y 25C8: ADDAw.y ACC, VF00, VF14 FMAND VI01, VI02 25D0: MSUBx.y VF12, VF26, VF14 SQ.xyzw VF22, 0(VI08) 25D8: MULAy.xyzw ACC, VF22, VF13 IBEQ VI01, VI02, 0x2640 25E0: MSUBx.xyzw VF22, VF16, VF13 SQ.xyzw VF17, 1(VI08) 25E8: MULAy.xyzw ACC, VF17, VF13 IBEQ VI01, VI00, 0x2640 25F0: MSUBx.xyzw VF21, VF19, VF13 IADDIU VI08, VI08, 2 25F8: NOP IADDIU VI02, VI00, 0x40 2600: MULQ.xyzw VF22, VF22, Q NOP 2608: NOP NOP 2610: MULQ.xyzw VF21, VF21, Q NOP 2618: NOP IBEQ VI01, VI02, 0x2630 2620: NOP IADDIU VI02, VI00, 0xC0 2628: NOP ISUBIU VI08, VI08, 2 2630: NOP SQI.xyzw VF22, (VI08++) 2638: NOP SQI.xyzw VF21, (VI08++) 2640: ADDx.xyzw VF18, VF14, VF00 IBNE VI03, VI04, 0x25A8 2648: SUBx.y VF20, VF12, VF12 MOVE.xyzw VF17, VF19 TLEMetaFormer: 2650: NOP IBEQ VI08, VI04, TLEFullClip 2658: NOP NOP 2660: ADD.z VF05, VF00, VF31 LQD.yzw VF14, (--VI08) 2668: ADD.z VF11, VF00, VF31 NOP 2670: ADD.z VF12, VF00, VF31 NOP 2678: MULAy.xyzw ACC, VF01, VF14 NOP 2680: MADDAz.xyzw ACC, VF06, VF14 LQD.xyw VF05, (--VI08) 2688: MADDw.xyzw VF13, VF07, VF14 LQD.yzw VF16, (--VI08) 2690: MULAy.xyzw ACC, VF08, VF14 NOP 2698: MADDAz.xyzw ACC, VF09, VF14 NOP 26A0: MADDw.xyzw VF14, VF10, VF14 NOP 26A8: MULAy.xyzw ACC, VF01, VF16 NOP 26B0: MADDAz.xyzw ACC, VF06, VF16 NOP 26B8: MADDw.xyzw VF15, VF07, VF16 NOP 26C0: MULAy.xyzw ACC, VF08, VF16 NOP 26C8: MADDAz.xyzw ACC, VF09, VF16 NOP 26D0: MADDw.xyzw VF16, VF10, VF16 LQD.xyw VF11, (--VI08) TLEMetaFormerLoop: 26D8: NOP SQ.xyzw VF05, 0(VI05) 26E0: NOP LQD.yzw VF17, (--VI08) 26E8: NOP SQ.xyzw VF13, 1(VI05) 26F0: NOP LQD.xyw VF12, (--VI08) 26F8: NOP SQ.xyzw VF14, 2(VI05) 2700: MULAy.xyzw ACC, VF01, VF17 SQ.xyzw VF11, 4(VI05) 2708: MADDAz.xyzw ACC, VF06, VF17 SQ.xyzw VF15, 5(VI05) 2710: MADDw.xyzw VF15, VF07, VF17 SQ.xyzw VF16, 6(VI05) 2718: MULAy.xyzw ACC, VF08, VF17 SQ.xyzw VF12, 8(VI05) 2720: MADDAz.xyzw ACC, VF09, VF17 MOVE.xyzw VF11, VF12 2728: MADDw.xyzw VF16, VF10, VF17 IADDIU VI05, VI05, 12 2730: NOP IADDIU VI09, VI09, 3 2738: NOP SQ.xyzw VF15, -3(VI05) 2740: NOP IBNE VI04, VI08, TLEMetaFormerLoop 2748: NOP SQ.xyzw VF16, -2(VI05) 2750: NOP B TLEFullClip 2758: NOP NOP TLEFullTrig: 2760: NOP SQ.xyzw VF16, 0(VI05) 2768: NOP SQ.xyzw VF18, 4(VI05) 2770: NOP SQ.xyzw VF05, 8(VI05) 2778: NOP IADDIU VI05, VI05, 12 2780: NOP IADDIU VI09, VI09, 3 TLEFullClip: 2788: ADDx.xyzw VF16, VF03, VF00 ISUBIU VI01, VI05, TLClipRedLine 2790: MULAw.xyzw ACC, VF31, VF00 IADDIU VI11, VI11, 12 2798: MADDAx.xyw ACC, VF28, VF04 IBGEZ VI01, TLEOverLoad 27A0: MADDAy.xyw ACC, VF29, VF04 LQ.xyzw VF05, 8(VI11) 27A8: MADDz.xyzw VF18, VF30, VF04 IBNE VI11, VI10, TLEExpanderLoop 27B0: MADDz.xyzw VF04, VF30, VF04 SQ.xyzw VF03, 4(VI14) TLEOverLoad: 27B8: NOP IADD VI07, VI00, VI05 27C0: NOP ISUBIU VI05, VI09, 3 27C8: NOP LQ.yzw VF01, vuSDgifTag(VI00) 27D0: NOP IBLTZ VI05, DoubleBufferStage 27D8: NOP IADDIU VI01, VI00, ClippingBuffer 27E0: NOP BAL VI08, CTSprocessor 27E8: NOP IADD VI15, VI00, VI12 27F0: NOP IADD VI12, VI00, VI13 27F8: NOP IADD VI13, VI00, VI15 2800: NOP IBNE VI11, VI10, 0x1F30 2808: NOP IADD VI14, VI00, VI12 2810: NOP B DoubleBufferStage 2818: NOP NOP # discard any triangles that are not completely inside the frustum # insert triangles into clipping buffer until TLClipRedLine # draw them with all passes # loop until input buffer is depleted # # clip space is chosen such that xyz would be [-1, 1] in screen space TLCullRender: # include FXL_Cull_Expander 2820: SUB.zw VF04, VF00, VF00 LQ.xyz VF07, (0+0*vertexSize)(VI11) ; - position-1 2828: MULAw.xyzw ACC, VF31, VF00 LQ.xyz VF08, (0+1*vertexSize)(VI11) ; xform pos-1 - position-2 2830: MADDAx.xyw ACC, VF28, VF07 LQ.xyz VF09, (0+2*vertexSize)(VI11) ; xform pos-1 - position-3 2838: MADDAy.xyw ACC, VF29, VF07 LQ.yz VF01, vuSDClipvec1(VI00) ; xform pos-1 2840: MADDz.xyzw VF07, VF30, VF07 LQ.xyzw VF10, (2+0*vertexSize)(VI11) ; xform pos-1 2848: MULAw.xyzw ACC, VF31, VF00 MOVE.zw VF05, VF04 ; xform pos-2 2850: MADDAx.xyw ACC, VF28, VF08 MOVE.zw VF06, VF04 ; xform pos-2 2858: MADDAy.xyw ACC, VF29, VF08 MR32.x VF03, VF01 ; xform pos-2 2860: MADDz.xyzw VF08, VF30, VF08 IADDIU VI09, VI00, 0 ; xform pos-2 2868: MULAw.xyzw ACC, VF31, VF00 LQ.xy VF04, (1+0*vertexSize)(VI11) ; xform pos-3 2870: MADDAx.xyw ACC, VF28, VF09 LQ.yz VF03, vuSDClipvec2(VI00) ; xform pos-3 2878: MADDAy.xyw ACC, VF29, VF09 FCSET 0 ; xform pos-3 2880: MADDz.xyzw VF09, VF30, VF09 IADDIU VI07, VI00, ClippingBuffer ; xform pos-3 GTLCullExpLoop: 2888: ADDA.z ACC, VF00, VF01 SQ.xyzw VF08, (0+1*vertexSize)(VI07) 2890: MUL.xy VF12, VF07, VF03 LQ.xy VF05, (1+1*vertexSize)(VI11) 2898: MADDw.z VF12, VF03, VF07 LQ.xyzw VF11, (2+1*vertexSize)(VI11) 28A0: MUL.xy VF13, VF08, VF03 SQ.xyzw VF07, (0+0*vertexSize)(VI07) 28A8: MADDw.z VF13, VF03, VF08 SQ.xyzw VF04, (1+0*vertexSize)(VI07) 28B0: MUL.xy VF10, VF09, VF03 SQ.xyzw VF10, (2+0*vertexSize)(VI07) 28B8: MADDw.z VF10, VF03, VF09 LQ.xy VF06, (1+2*vertexSize)(VI11) 28C0: CLIPw.xyz VF12, VF07 LQ.xyz VF07, (0+3*vertexSize)(VI11) 28C8: CLIPw.xyz VF13, VF08 LQ.xyz VF08, (0+4*vertexSize)(VI11) 28D0: CLIPw.xyz VF10, VF09 SQ.xyzw VF05, (1+1*vertexSize)(VI07) 28D8: MULAw.xyzw ACC, VF31, VF00 ILw.w VI02, (0+2*vertexSize)(VI11) 28E0: MADDAx.xyw ACC, VF28, VF07 SQ.xyzw VF11, (2+1*vertexSize)(VI07) 28E8: MADDAy.xyw ACC, VF29, VF07 LQ.xyzw VF11, (2+2*vertexSize)(VI11) 28F0: MADDz.xyzw VF07, VF30, VF07 FCAND VI01, 0x3FFFF 28F8: MULAw.xyzw ACC, VF31, VF00 IADD VI01, VI01, VI02 2900: MADDAx.xyw ACC, VF28, VF08 LQ.xyz VF12, (0+5*vertexSize)(VI11) 2908: MADDAy.xyw ACC, VF29, VF08 IBNE VI01, VI00, GTLCullExpFullClip 2910: MADDz.xyzw VF08, VF30, VF08 SQ.xyzw VF06, (1+2*vertexSize)(VI07) 2918: NOP SQ.xyzw VF09, (0+2*vertexSize)(VI07) 2920: NOP SQ.xyzw VF11, (2+2*vertexSize)(VI07) 2928: NOP IADDIU VI07, VI07, 3*vertexSize 2930: NOP IADDIU VI09, VI09, 3 GTLCullExpFullClip: 2938: NOP ISUBIU VI01, VI07, TLClipRedLine 2940: MULAw.xyzw ACC, VF31, VF00 LQ.xy VF04, (1+3*vertexSize)(VI11) 2948: MADDAx.xyw ACC, VF28, VF12 IADDIU VI11, VI11, 3*vertexSize 2950: MADDAy.xyw ACC, VF29, VF12 IBGEZ VI01, GTLCullExpExit 2958: MADDz.xyzw VF09, VF30, VF12 LQ.xyzw VF10, (2+0*vertexSize)(VI11) 2960: NOP IBNE VI11, VI10, GTLCullExpLoop 2968: NOP NOP GTLCullExpExit: # end include 2970: NOP ISUBIU VI05, VI09, 3 2978: NOP LQ.yzw VF01, vuSDgifTag(VI00) 2980: NOP IBLTZ VI05, DoubleBufferStage 2988: NOP IADDIU VI01, VI00, ClippingBuffer 2990: NOP BAL VI08, CTSprocessor 2998: NOP IADD VI15, VI00, VI12 29A0: NOP IADD VI12, VI00, VI13 29A8: NOP IADD VI13, VI00, VI15 29B0: NOP IBNE VI11, VI10, TLCullRender 29B8: NOP IADD VI14, VI00, VI12 DoubleBufferStage: 29C0: NOP[e] IADDIU VI15, VI00, PRSrestart 29C8: NOP NOP 29D0: NOP JR VI15 29D8: NOP NOP CTSprocessor: 29E0: NOP IADDIU VI02, VI00, 0x4000 29E8: NOP IADD VI02, VI02, VI02 29F0: NOP IOR VI09, VI09, VI02 # include MP_ClipGenerator 29F8: ADDAx.xyzw ACC, VF02, VF00 LQ.zw VF03, vuSDxMaxyMax(VI00) 2A00: NOP LQ.xyzw VF07, 0(VI01) 2A08: MSUBAz.w ACC, VF03, VF03 LQ.xyw VF04, 1(VI01) 2A10: MADDz.w VF07, VF07, VF03 DIV Q, VF00w, VF07w 2A18: NOP LQ.xyzw VF09, 4(VI01) 2A20: NOP LQ.xyw VF10, 5(VI01) 2A28: ADDw.z VF04, VF00, VF00 LOI 255 2A30: MINIi.w VF07, VF07, I LQ.xyzw VF05, 2(VI01) 2A38: MADDz.w VF13, VF09, VF03 LQ.xyzw VF12, 6(VI01) 2A40: MAX.w VF11, VF10, VF10 IADDIU VI02, VI01, 0 2A48: MADDq.xyz VF07, VF07, Q IADDIU VI03, VI14, 1 2A50: MAX.w VF06, VF07, VF02 ISw.x VI09, 0(VI14) 2A58: MULQ.xyz VF08, VF04, Q SQ.yzw VF01, 0(VI14) MPClipGenloop: 2A60: FTOI0.xyzw VF16, VF05 DIV Q, VF00w, VF09w 2A68: ADD.w VF07, VF06, VF04 LQ.xyzw VF14, 8(VI02) 2A70: MINIi.w VF09, VF13, I LQ.xyw VF15, 9(VI02) 2A78: ADDw.z VF10, VF00, VF00 SQ.xyz VF08, 0(VI03) 2A80: NOP SQ.xyzw VF16, 1(VI03) 2A88: FTOI4.xyzw VF07, VF07 IADDIU VI04, VI02, 4 2A90: MAX.w VF01, VF09, VF02 MOVE.w VF03, VF15 2A98: MULQ.xyz VF06, VF10, Q LQ.xyzw VF16, 10(VI02) 2AA0: MADDz.w VF08, VF14, VF03 IBEQ VI04, VI07, MPClipGenEnd 2AA8: MADDq.xyz VF04, VF09, Q SQ.xyzw VF07, 2(VI03) 2AB0: FTOI0.xyzw VF18, VF12 DIV Q, VF00w, VF14w 2AB8: ADD.w VF04, VF01, VF11 SQ.xyz VF06, 3(VI03) 2AC0: MINIi.w VF14, VF08, I LQ.xyzw VF09, 8(VI04) 2AC8: NOP LQ.xyw VF10, 9(VI04) 2AD0: ADDw.z VF15, VF00, VF00 SQ.xyzw VF18, 4(VI03) 2AD8: FTOI4.xyzw VF04, VF04 IADDIU VI02, VI04, 4 2AE0: MAX.w VF06, VF14, VF02 LQ.xyzw VF18, 10(VI04) 2AE8: MADDq.xyz VF01, VF14, Q MOVE.w VF17, VF10 2AF0: MULQ.xyz VF07, VF15, Q IBEQ VI02, VI07, MPClipGenEnd 2AF8: MADDz.w VF13, VF09, VF03 SQ.xyzw VF04, 5(VI03) 2B00: ADD.w VF01, VF06, VF03 LQ.xyw VF15, 9(VI02) 2B08: FTOI0.xyzw VF05, VF16 DIV Q, VF00w, VF09w 2B10: NOP LQ.xyzw VF14, 8(VI02) 2B18: MINIi.w VF09, VF13, I IADDIU VI04, VI02, 4 2B20: ADDw.z VF10, VF00, VF00 MOVE.w VF04, VF15 2B28: FTOI4.xyzw VF01, VF01 SQ.xyzw VF05, 7(VI03) 2B30: MADDz.w VF07, VF14, VF03 LQ.xyzw VF05, 10(VI02) 2B38: MAX.w VF08, VF09, VF02 SQ.xyz VF07, 6(VI03) 2B40: MADDq.xyz VF19, VF09, Q IBEQ VI04, VI07, MPClipGenEnd 2B48: MULQ.xyz VF06, VF10, Q SQ.xyzw VF01, 8(VI03) 2B50: MINIi.w VF12, VF07, I DIV Q, VF00w, VF14w 2B58: ADD.w VF19, VF08, VF17 LQ.xyw VF10, 9(VI04) 2B60: FTOI0.xyzw VF07, VF18 LQ.xyzw VF09, 8(VI04) 2B68: MAX.w VF06, VF12, VF02 IADDIU VI02, VI04, 4 2B70: ADDw.z VF15, VF00, VF00 LQ.xyzw VF12, 10(VI04) 2B78: FTOI4.xyzw VF19, VF19 SQ.xyz VF06, 9(VI03) 2B80: MAX.w VF11, VF10, VF10 SQ.xyzw VF07, 10(VI03) 2B88: MADDq.xyz VF07, VF14, Q IADDIU VI03, VI03, 12 2B90: MADDz.w VF13, VF09, VF03 IBNE VI02, VI07, MPClipGenloop 2B98: MULQ.xyz VF08, VF15, Q SQ.xyzw VF19, -1(VI03) MPClipGenEnd: # end include 2BA0: NOP IADDIU VI02, VI00, vuSymbGifTag 2BA8: NOP XGKICK VI02 2BB0: NOP NOP 2BB8: NOP JR VI08 2BC0: NOP XGKICK VI14