.equ vertexTop, 0x3d0 .equ numInAttribs, 4 .equ numOutAttribs, 3 .equ numOutBuf, 2 .equ vertCount, ((vertexTop-numOutBuf)/(numInAttribs*2+numOutAttribs*numOutBuf)) .equ offset, (vertCount*numInAttribs) .equ outBuf1, (2*offset) ;.equ outSize, ((vertexTop-outBuf1-numOutBuf)/numOutBuf) .equ outSize, (1 + vertCount*numOutAttribs) .equ outBuf2, (outBuf1+outSize) .equ clipVertCount, ((vertexTop-outBuf1-numOutBuf)/(numInAttribs+numOutAttribs*numOutBuf)) .equ clipOutSize, (1 + clipVertCount*numOutAttribs) .equ clipOutBuf2, (outBuf1+clipOutSize) .equ clipBuf, (clipOutBuf2+clipOutSize) ; up to 9 verts => 7 tris per poly in worst case, a lot for lists unfortunately .equ clipVertLimit, (clipVertCount-21) .include "defines.inc" .balign 16,0 .global vu1_default_TLclip vu1_default_TLclip: DMAret * MPG 0, * .vu start: nop iaddiu vi12,vi00,outBuf1 nop iaddiu vi13,vi00,clipOutBuf2 nop lq vf28,matrix0(vi00) nop lq vf29,matrix1(vi00) nop lq vf30,matrix2(vi00) nop lq vf31,matrix3(vi00) nop lq vf27,xyzwScale(vi00) nop lq vf26,xyzwOffset(vi00) nop lq vf25,colorScale(vi00) nop lq vf24,clipConsts(vi00) restart: nop lq vf01,gifTag(vi00) ; GIF tag nop xitop vi01 ; vertex count nop iaddiu vi05,vi00,0x4000 nop iadd vi05,vi05,vi05 ; EOP bit nop ior vi05,vi05,vi01 ; enter vertex count nop sq vf01,0(vi12) ; store GIF tag nop isw.x vi05,0(vi12) nop iaddiu vi03,vi12,1 ; output pointer ;; Convert normals and colors to float. this is also where we'd do skinning probably ;; also clear ADC flag here but eventually this shouldn't happen if the geomtry has none nop xtop vi02 ; input pointer nop xitop vi01 ; vertex count PreprocLoop: nop lq vf02,2(vi02) ; load rgba nop lq.xyz vf03,3(vi02) ; load normal nop mr32.w vf01,vf00 ; clear ADC flag nop nop itof0 vf02,vf02 loi 0.007874015748031496 ; convert rgba itof0.xyz vf03,vf03 nop ; convert normal nop nop nop nop nop nop muli.xyz vf03,vf03,i nop ; scale normal nop sq.w vf01,0(vi02) ; store cleared ADC flag nop isubiu vi01,vi01,1 nop sq vf02,2(vi02) ; store rgba nop sq.xyz vf03,3(vi02) ; store normal nop ibne vi01,vi00,PreprocLoop nop iaddiu vi02,vi02,numInAttribs .include "lighting.vu" .include "TLclip.vu" nop[e] nop nop nop nop b restart nop nop .include "cliptri.vu" .include "default_clipproc.vu" .EndMPG .EndDmaData