.equ vertexTop, 0x3f0 .equ numInAttribs, 3 .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) .include "defines.inc" .balign 16,0 .global vu1_im2d vu1_im2d: DMAret * MPG 0, * .vu start: nop iaddiu vi12,vi00,outBuf1 nop iaddiu vi13,vi00,outBuf2 nop lq vf04,xyzwOffset(vi00) nop lq vf05,colorScale(vi00) restart: nop xtop vi02 ; input pointer 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) mulz.w vf03,vf00,vf00 iaddiu vi03,vi12,1 ; clear ADC flag, fog disabled already by renderstate - output pointer loop: nop lq vf02,1(vi02) ; rgba itof0 vf02,vf02 lq.xyz vf03,0(vi02) ; xyzf add.xy vf03,vf03,vf04 lq vf01,2(vi02) ; stq mulz.xy vf01,vf01,vf01 nop nop iaddiu vi02,vi02,numInAttribs mul vf02,vf02,vf05 nop ftoi4.xyz vf03,vf03 iaddi vi01,vi01,-1 nop nop nop nop ftoi0 vf02,vf02 nop nop nop nop sq vf01,0(vi03) ; stq nop sq vf03,2(vi03) ; xyzf nop sq vf02,1(vi03) ; rgba nop ibne vi01,vi00,loop nop iaddiu vi03,vi03,numOutAttribs nop xgkick vi12 nop iadd vi15,vi00,vi12 nop iadd vi12,vi00,vi13 nop[e] iadd vi13,vi00,vi15 nop nop nop b restart nop nop .EndMPG .EndDmaData