.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_fog vu1_im2d_fog: DMAret * MPG 0, * .vu start: nop iaddiu vi12,vi00,outBuf1 nop iaddiu vi13,vi00,outBuf2 nop lq vf04,xyzwOffset(vi00) nop lq vf05,xyzwScale(vi00) nop lq vf06,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) nop iaddiu vi03,vi12,1 ; output pointer loop: nop lq vf02,1(vi02) ; rgba itof0 vf02,vf02 lq vf03,0(vi02) ; xyzf mula acc,vf03,vf05 nop maddw vf03,vf04,vf00 lq vf01,2(vi02) ; stq nop nop nop nop nop loi 255.0 minii.w vf03,vf03,i nop nop nop nop nop nop loi 0.0 maxi.w vf03,vf03,i nop mulz.xy vf01,vf01,vf01 nop nop iaddiu vi02,vi02,numInAttribs mul vf02,vf02,vf06 nop ftoi4 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