home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-06-17 | 37.2 KB | 1,502 lines |
- #
- # Copyright (C) 1996-1997 Id Software, Inc.
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- #
- # See the GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- #
-
- ##
- ## Quake for AMIGA
- ##
- ## d_polysetPPC.s
- ##
- ## Define WOS for PowerOpen ABI, otherwise SVR4-ABI is used.
- ##
-
- .include "macrosPPC.i"
-
- #
- # external references
- #
-
- xrefv acolormap
- xrefv d_aspancount
- xrefv errorterm
- xrefv erroradjustup
- xrefv erroradjustdown
- xrefv d_countextrastep
- xrefv ubasestep
- xrefa r_affinetridesc
- xrefv a_ststepxwhole
- xrefv a_sstepxfrac
- xrefv a_tstepxfrac
- xrefv r_lstepx
- xrefv r_lstepy
- xrefv r_sstepx
- xrefv r_sstepy
- xrefv r_tstepx
- xrefv r_tstepy
- xrefv r_zistepx
- xrefv r_zistepy
- xrefa zspantable
- xrefa skintable
- xrefa r_p0
- xrefa r_p1
- xrefa r_p2
- xrefv d_xdenom
- xrefv d_pcolormap
- xrefa d_scantable
- xrefv d_viewbuffer
- xrefv d_pedgespanpackage
- xrefv d_pdest
- xrefv d_pz
- xrefv d_aspancount
- xrefv d_ptex
- xrefv d_sfrac
- xrefv d_tfrac
- xrefv d_light
- xrefv d_zi
- xrefv d_pdestextrastep
- xrefv d_pzextrastep
- xrefv d_countextrastep
- xrefv d_ptexextrastep
- xrefv d_sfracextrastep
- xrefv d_tfracextrastep
- xrefv d_lightextrastep
- xrefv d_ziextrastep
- xrefv d_pdestbasestep
- xrefv d_pzbasestep
- xrefv d_ptexbasestep
- xrefv d_sfracbasestep
- xrefv d_tfracbasestep
- xrefv d_lightbasestep
- xrefv d_zibasestep
- xrefv d_zwidth
- xrefv d_pzbuffer
- xrefv a_spans
- xrefv pedgetable
- xrefa edgetables
- xrefv screenwidth
- xrefv INT2DBL_0
- xrefv c2
-
- xrefv FloorDivMod
- xrefv D_RasterizeAliasPolySmooth
-
-
- #
- # defines
- #
-
- .set ALIAS_ONSEAM ,32 #must match the def. in r_shared.h
-
- .set PSPANP_PDEST ,0
- .set PSPANP_PZ ,4
- .set PSPANP_COUNT ,8
- .set PSPANP_PTEX ,12
- .set PSPANP_SFRAC ,16
- .set PSPANP_TFRAC ,20
- .set PSPANP_LIGHT ,24
- .set PSPANP_ZI ,28
- .set PSPANP_SIZEOF ,32
- .set PSPANP_SIZEOF_EXP ,5
-
- .set R_PSKIN ,0
- .set R_PSKINDESC ,4
- .set R_SKINWIDTH ,8
- .set R_SKINHEIGHT ,12
- .set R_PTRIANGLES ,16
- .set R_PFINALVERTS ,20
- .set R_NUMTRIANGLES ,24
- .set R_DRAWTYPE ,28
- .set R_SEAMFIXUP16 ,32
- .set R_SIZEOF ,36
-
- .set PTEMP_QUOTIENT ,0
- .set PTEMP_REMAINDER ,4
-
- .set ETAB_ISFLATTOP ,0
- .set ETAB_NUMLEFTEDGES ,4
- .set ETAB_PLEV0 ,8
- .set ETAB_PLEV1 ,12
- .set ETAB_PLEV2 ,16
- .set ETAB_NUMRIGHTEDGES,20
- .set ETAB_PREV0 ,24
- .set ETAB_PREV1 ,28
- .set ETAB_PREV2 ,32
- .set ETAB_SIZEOF ,36
-
- .set MT_FACESFRONT ,0
- .set MT_VERTINDEX ,4
- .set MT_SIZEOF ,16
-
- .set FV_V ,0
- .set FV_FLAGS ,24
- .set FV_RESERVED ,28
- .set FV_SIZEOF ,32
- .set FV_SIZEOF_EXP ,5
-
- .set EDGETABLE_SIZEOF ,36
-
-
-
-
-
- ###########################################################################
- #
- # void D_PolysetDrawSpans8 (spanpackage_t *pspanpackage)
- #
- # standard scan drawing function for alias models
- #
- ###########################################################################
-
- funcdef D_PolysetDrawSpans8
-
- init 0,0,12,0
- stmw r20,gb(r1)
-
- lw r4,d_aspancount
- lw r5,errorterm
- lw r6,erroradjustup
- lw r7,erroradjustdown
- lw r8,d_countextrastep
- lw r9,ubasestep
- lw r10,acolormap
- lw r11,r_zistepx
- lw r12,a_ststepxwhole
- lw r31,a_sstepxfrac
- lw r30,a_tstepxfrac
- lw r29,r_lstepx
- lxa r28,r_affinetridesc
- lwz r28,R_SKINWIDTH(r28)
-
- .ds8loop:
-
- # lcount = d_aspancount - pspanpackage->count;
- #
- # errorterm += erroradjustup;
- # if (errorterm >= 0)
- # {
- # d_aspancount += d_countextrastep;
- # errorterm -= erroradjustdown;
- # }
- # else
- # {
- # d_aspancount += ubasestep;
- # }
-
- lwz r0,PSPANP_COUNT(r3)
- subf r0,r0,r4
- add. r5,r5,r6
- blt .ds8else
- add r4,r4,r8
- subf r5,r7,r5
- b .ds8next
- .ds8else:
- add r4,r4,r9
- .ds8next:
- mr. r0,r0
- beq .ds8loopend
- mtctr r0
-
- # lpdest = pspanpackage->pdest;
- # lptex = pspanpackage->ptex;
- # lpz = pspanpackage->pz;
- # lsfrac = pspanpackage->sfrac;
- # ltfrac = pspanpackage->tfrac;
- # llight = pspanpackage->light;
- # lzi = pspanpackage->zi;
-
- lwz r27,PSPANP_PDEST(r3)
- lwz r26,PSPANP_PZ(r3)
- lwz r25,PSPANP_PTEX(r3)
- lwz r24,PSPANP_SFRAC(r3)
- lwz r23,PSPANP_TFRAC(r3)
- lwz r22,PSPANP_LIGHT(r3)
- lwz r21,PSPANP_ZI(r3)
-
- ###### main drawing loop
-
- ###### r21 = lzi
- ###### r22 = llight
- ###### r24 = lsfrac
- ###### r11 = r_zistepx
- ###### r23 = ltfrac
- ###### r30 = a_tstepxfrac
- ###### r28 = r_affinetridesc.skinwidth
- ###### r27 -> lpdest
- ###### r26 -> lpz
- ###### r25 -> lptex
- ###### r10 -> acolormap
- ###### r31 = a_sstepxfrac
- ###### r12 = a_ststepxwhole
- ###### r29 = r_lstepx
-
- # do
- # {
- # if ((lzi >> 16) >= *lpz)
- # {
- # *lpdest = ((byte *)acolormap)[*lptex + (llight & 0xFF00)];
- # *lpz = lzi >> 16;
- # }
- # lpdest++;
- # lzi += r_zistepx;
- # lpz++;
- # llight += r_lstepx;
- # lptex += a_ststepxwhole;
- # lsfrac += a_sstepxfrac;
- # lptex += lsfrac >> 16;
- # lsfrac &= 0xFFFF;
- # ltfrac += a_tstepxfrac;
- # if (ltfrac & 0x10000)
- # {
- # lptex += r_affinetridesc.skinwidth;
- # ltfrac &= 0xFFFF;
- # }
- # } while (--lcount);
-
- .ds8loop2:
- srwi r0,r21,16
- lhz r20,0(r26)
- cmpw r0,r20
- blt .ds8cont
- lbz r20,0(r25)
- rlwimi r20,r22,0,16,23
- lbzx r20,r10,r20
- stb r20,0(r27)
- sth r0,0(r26)
- .ds8cont:
- add r24,r24,r31
- addi r26,r26,2
- addi r27,r27,1
- srwi r0,r24,16
- add r21,r21,r11
- add r22,r22,r29
- add r25,r25,r12
- add r23,r23,r30
- clrlwi r24,r24,16
- add r25,r25,r0
- andis. r0,r23,1
- beq .ds8cont2
- add r25,r25,r28
- clrlwi r23,r23,16
- .ds8cont2:
- bdnz .ds8loop2
- .ds8loopend:
-
- # pspanpackage++;
- # } while (pspanpackage->count != -999999);
-
- la r3,PSPANP_SIZEOF(r3)
- lwz r0,PSPANP_COUNT(r3)
- lis r20,-999999@h
- ori r20,r20,-999999@l
- cmpw r20,r0
- bne .ds8loop
-
- lmw r20,gb(r1)
- exit
-
- funcend D_PolysetDrawSpans8
-
-
-
-
- ###########################################################################
- #
- # void D_PolysetRecursiveTriangle (int *lp1, int *lp2, int *lp3)
- #
- ###########################################################################
-
- funcdef D_PolysetRecursiveTriangle
-
- init 0,0,3,0
- stw r24,gb+0*4(r1)
- stw r25,gb+1*4(r1)
- stw r26,gb+2*4(r1)
- lxa r6,zspantable
- lw r7,d_viewbuffer
- lxa r26,skintable
- lw r25,d_pcolormap
- lxa r24,d_scantable
- bl DoRecursion
- lwz r24,gb+0*4(r1)
- lwz r25,gb+1*4(r1)
- lwz r26,gb+2*4(r1)
- exit
-
-
- DoRecursion:
- init 0,24,5,0
- stmw r27,gb(r1)
-
- mr r31,r3
- mr r30,r4
- mr r29,r5
- la r28,local(r1)
-
- # d = lp2[0] - lp1[0];
- # if (d < -1 || d > 1)
- # goto split;
- # d = lp2[1] - lp1[1];
- # if (d < -1 || d > 1)
- # goto split;
- #
- # d = lp3[0] - lp2[0];
- # if (d < -1 || d > 1)
- # goto split2;
- # d = lp3[1] - lp2[1];
- # if (d < -1 || d > 1)
- # goto split2;
- #
- # d = lp1[0] - lp3[0];
- # if (d < -1 || d > 1)
- # goto split3;
- # d = lp1[1] - lp3[1];
- # if (d < -1 || d > 1)
-
- lwz r9,0(r30)
- lwz r10,0(r31)
- lwz r11,1*4(r30)
- lwz r12,1*4(r31)
- subf r3,r10,r9
- addi r3,r3,1
- cmplwi r3,2
- bgt .rtsplit
- subf r4,r12,r11
- addi r4,r4,1
- cmplwi r4,2
- bgt .rtsplit
- lwz r3,0(r29)
- subf r5,r9,r3
- addi r5,r5,1
- cmplwi r5,2
- bgt .rtsplit2
- lwz r4,1*4(r29)
- subf r5,r11,r4
- addi r5,r5,1
- cmplwi r5,2
- bgt .rtsplit2
- subf r5,r10,r3
- addi r5,r5,1
- cmplwi r5,2
- bgt .rtsplit3
- subf r5,r12,r4
- addi r5,r5,1
- cmplwi r5,2
- ble .rtexit
-
- #split3:
- # temp = lp1;
- # lp1 = lp3;
- # lp3 = lp2;
- # lp2 = temp;
- #
- # goto split;
- #
- #split2:
- # temp = lp1;
- # lp1 = lp2;
- # lp2 = lp3;
- # lp3 = temp;
-
- .rtsplit3:
- mr r0,r29
- mr r29,r30
- mr r30,r31
- mr r31,r0
- lwz r9,0(r30)
- lwz r10,0(r31)
- lwz r11,1*4(r30)
- lwz r12,1*4(r31)
- b .rtsplit
- .rtsplit2:
- mr r0,r31
- mr r31,r30
- mr r30,r29
- mr r29,r0
- lwz r9,0(r30)
- lwz r10,0(r31)
- lwz r11,1*4(r30)
- lwz r12,1*4(r31)
- .rtsplit:
-
- # new[0] = (lp1[0] + lp2[0]) >> 1;
- # new[1] = (lp1[1] + lp2[1]) >> 1;
- # new[2] = (lp1[2] + lp2[2]) >> 1;
- # new[3] = (lp1[3] + lp2[3]) >> 1;
- # new[5] = (lp1[5] + lp2[5]) >> 1;
-
- add r3,r9,r10
- srawi r3,r3,1 #r3 = new[0]
- stw r3,0(r28)
- add r4,r11,r12
- srawi r4,r4,1 #r4 = new[1]
- stw r4,4(r28)
- lwz r5,2*4(r31)
- lwz r0,2*4(r30)
- add r5,r5,r0
- srawi r5,r5,1 #r5 = new[2]
- stw r5,8(r28)
- lwz r8,3*4(r31)
- lwz r0,3*4(r30)
- add r8,r8,r0
- srawi r8,r8,1 #r8 = new[3]
- stw r8,12(r28)
- lwz r27,5*4(r31)
- lwz r0,5*4(r30)
- add r27,r27,r0
- srawi r27,r27,1 #r27 = new[5]
- stw r27,20(r28)
-
- # if (lp2[1] > lp1[1])
- # goto nodraw;
- # if ((lp2[1] == lp1[1]) && (lp2[0] < lp1[0]))
- # goto nodraw;
-
-
- cmpw r11,r12
- bgt .rtnodraw
- bne .rtdraw
- cmpw r9,r10
- blt .rtnodraw
- .rtdraw:
- srwi r27,r27,16 #r27 = z = new[5]>>16
-
- # z = new[5]>>16;
- # zbuf = zspantable[new[1]] + new[0];
- # if (z >= *zbuf)
- # {
- # int pix;
- #
- # *zbuf = z;
- # pix = d_pcolormap[skintable[new[3]>>16][new[2]>>16]];
- # d_viewbuffer[d_scantable[new[1]] + new[0]] = pix;
- # }
-
- slwi r0,r4,2
- lwzx r9,r6,r0
- add r10,r3,r3
- lhzx r11,r9,r10
- cmpw r27,r11
- blt .rtnodraw
- sthx r27,r9,r10
- srawi r5,r5,16
- srawi r8,r8,16
- slwi r8,r8,2
- lwzx r12,r26,r8
- lbzx r9,r12,r5
- lbzx r10,r25,r9
- lwzx r11,r24,r0
- add r11,r11,r3
- stbx r10,r7,r11
- .rtnodraw:
-
- #// recursively continue
- # D_PolysetRecursiveTriangle (lp3, lp1, new);
- # D_PolysetRecursiveTriangle (lp3, new, lp2);
-
- mr r3,r29
- mr r4,r31
- mr r5,r28
- bl DoRecursion
- mr r3,r29
- mr r4,r28
- mr r5,r30
- bl DoRecursion
-
- .rtexit:
- lmw r27,gb(r1)
- exit
-
- funcend D_PolysetRecursiveTriangle
-
-
-
-
- ###########################################################################
- #
- # void D_PolysetSetUpForLineScan (fixed8_t startvertu,
- # fixed8_t startvertv, fixed8_t endvertu, fixed8_t endvertv)
- #
- # Parameters are transferred in registers d0-d3
- #
- ###########################################################################
-
- funcdef D_PolysetSetUpForLineScan
-
- # errorterm = -1;
- #
- # tm = endvertu - startvertu;
- # tn = endvertv - startvertv;
-
- li r0,-1
- sw r0,errorterm
- subf r5,r3,r5
- subf r6,r4,r6
- addi r5,r5,15
- addi r6,r6,15
-
- # if (((tm <= 16) && (tm >= -15)) &&
- # ((tn <= 16) && (tn >= -15)))
- # {
- # ptemp = &adivtab[((tm+15) << 5) + (tn+15)];
- # ubasestep = ptemp->quotient;
- # erroradjustup = ptemp->remainder;
- # erroradjustdown = tn;
- # }
-
- cmplwi r5,31
- bgt .sflselse
- cmplwi r6,31
- bgt .sflselse
- lxa r8,adivtab
- slwi r5,r5,5
- add r5,r5,r6
- slwi r5,r5,3
- add r8,r8,r5
- lwz r3,PTEMP_QUOTIENT(r8)
- sw r3,ubasestep
- lwz r4,PTEMP_REMAINDER(r8)
- sw r4,erroradjustup
- subi r6,r6,15
- sw r6,erroradjustdown
- b .sflsexit
-
- # {
- # dm = (double)tm;
- # dn = (double)tn;
- #
- # FloorDivMod (dm, dn, &ubasestep, &erroradjustup);
- #
- # erroradjustdown = dn;
- # }
-
- .sflselse:
- subi r5,r5,15
- subi r6,r6,15
- sw r6,erroradjustdown
- mr. r5,r5
- divw r7,r5,r6
- mullw r8,r7,r6
- subf r8,r8,r5
- bge .sflscont
- subi r7,r7,1
- add r8,r8,r6
- .sflscont:
- sw r7,ubasestep
- sw r8,erroradjustup
- .sflsexit:
- blr
-
- funcend D_PolysetSetUpForLineScan
-
-
-
-
- ###########################################################################
- #
- # void D_PolysetCalcGradients (int skinwidth)
- #
- ###########################################################################
-
- funcdef D_PolysetCalcGradients
-
- # p00_minus_p20 = r_p0[0] - r_p2[0];
- # p01_minus_p21 = r_p0[1] - r_p2[1];
- # p10_minus_p20 = r_p1[0] - r_p2[0];
- # p11_minus_p21 = r_p1[1] - r_p2[1];
- #
- # xstepdenominv = 1.0 / (float)d_xdenom;
- #
- # ystepdenominv = -xstepdenominv;
-
- stwu r1,-64(r1)
- lw r11,d_xdenom
- ls f9,c2
- lf f1,INT2DBL_0 #for int2dbl_setup, r12=tmp
- stfd f1,32(r1)
- lxa r4,r_p2
- lxa r5,r_p1
- lxa r6,r_p0
- int2dbl f6,r11,r12,32,f1
- lwz r7,0(r6)
- lwz r8,1*4(r6)
- fneg f6,f6
- lwz r9,0(r4)
- subf r7,r9,r7
- fmuls f7,f6,f6
- int2dbl f2,r7,r12,32,f1 #f2 = p00_minus_p20
- frsqrte f7,f7
- lwz r10,1*4(r4)
- subf r8,r10,r8
- fnmsubs f8,f7,f6,f9
- int2dbl f3,r8,r12,32,f1 #f3 = p01_minus_p21
- fmuls f7,f7,f8
- lwz r7,0(r5)
- subf r7,r9,r7
- fnmsubs f8,f7,f6,f9
- int2dbl f4,r7,r12,32,f1 #f4 = p10_minus_p20
- fmuls f7,f7,f8
- lwz r8,1*4(r5)
- subf r8,r10,r8
- fneg f6,f7
- int2dbl f5,r8,r12,32,f1 #f5 = p11_minus_p21
- fmuls f3,f3,f6
- fmuls f5,f5,f6
- fmuls f2,f2,f7
- fmuls f4,f4,f7
-
- # t0 = r_p0[4] - r_p2[4];
- # t1 = r_p1[4] - r_p2[4];
- # r_lstepx = (int)
- # ceil((t1 * p01_minus_p21 - t0 * p11_minus_p21) * xstepdenominv);
- # r_lstepy = (int)
- # ceil((t1 * p00_minus_p20 - t0 * p10_minus_p20) * ystepdenominv);
-
- mffs f8
- mtfsfi cr7,2
- lwz r7,4*4(r4)
- lwz r8,4*4(r6)
- subf r9,r7,r8
- int2dbl f9,r9,r12,32,f1 #f9 = t0
- lwz r8,4*4(r5)
- subf r9,r7,r8
- int2dbl f10,r9,r12,32,f1 #f10 = t1
- fmuls f11,f9,f5
- fmuls f12,f9,f4
- fmsubs f11,f10,f3,f11
- fctiw f0,f11 #@@@ ab hier ein bißchen optimiert
- stfd f0,40(r1)
- fmsubs f12,f10,f2,f12
- lwz r7,44(r1)
- fctiw f13,f12
- stfd f13,48(r1)
- mtfsf 1,f8
- lwz r8,52(r1)
- sw r7,r_lstepx
- sw r8,r_lstepy
-
- # t0 = r_p0[2] - r_p2[2];
- # t1 = r_p1[2] - r_p2[2];
- # r_sstepx = (int)((t1 * p01_minus_p21 - t0 * p11_minus_p21) *
- # xstepdenominv);
- # r_sstepy = (int)((t1 * p00_minus_p20 - t0* p10_minus_p20) *
- # ystepdenominv);
-
- lwz r7,2*4(r4)
- lwz r8,2*4(r6)
- subf r9,r7,r8
- int2dbl f9,r9,r12,32,f1 #f9 = t0
- lwz r8,2*4(r5)
- subf r9,r7,r8
- int2dbl f10,r9,r12,32,f1 #f10 = t1
- fmuls f11,f9,f5
- fmuls f12,f9,f4
- fmsubs f11,f10,f3,f11
- fctiwz f0,f11 #@@@ ab hier ein bißchen optimiert
- stfd f0,40(r1)
- fmsubs f12,f10,f2,f12
- lwz r10,44(r1)
- fctiwz f13,f12
- stfd f13,48(r1)
- lwz r8,52(r1)
- sw r10,r_sstepx
- sw r8,r_sstepy
-
- # t0 = r_p0[3] - r_p2[3];
- # t1 = r_p1[3] - r_p2[3];
- # r_tstepx = (int)((t1 * p01_minus_p21 - t0 * p11_minus_p21) *
- # xstepdenominv);
- # r_tstepy = (int)((t1 * p00_minus_p20 - t0 * p10_minus_p20) *
- # ystepdenominv);
-
- lwz r7,3*4(r4)
- lwz r8,3*4(r6)
- subf r9,r7,r8
- int2dbl f9,r9,r12,32,f1 #f9 = t0
- lwz r8,3*4(r5)
- subf r9,r7,r8
- int2dbl f10,r9,r12,32,f1 #f10 = t1
- fmuls f11,f9,f5
- fmuls f12,f9,f4
- fmsubs f11,f10,f3,f11
- fctiwz f0,f11 #@@@ ab hier ein bißchen optimiert
- stfd f0,40(r1)
- fmsubs f12,f10,f2,f12
- lwz r11,44(r1)
- fctiwz f13,f12
- stfd f13,48(r1)
- lwz r8,52(r1)
- sw r11,r_tstepx
- sw r8,r_tstepy
-
- # t0 = r_p0[5] - r_p2[5];
- # t1 = r_p1[5] - r_p2[5];
- # r_zistepx = (int)((t1 * p01_minus_p21 - t0 * p11_minus_p21) *
- # xstepdenominv);
- # r_zistepy = (int)((t1 * p00_minus_p20 - t0 * p10_minus_p20) *
- # ystepdenominv);
-
- lwz r7,5*4(r4)
- lwz r8,5*4(r6)
- subf r9,r7,r8
- int2dbl f9,r9,r12,32,f1 #f9 = t0
- lwz r8,5*4(r5)
- subf r9,r7,r8
- int2dbl f10,r9,r12,32,f1 #f10 = t1
- fmuls f11,f9,f5
- fmuls f12,f9,f4
- fmsubs f11,f10,f3,f11
- fctiwz f0,f11 #@@@ ab hier ein bißchen optimiert
- stfd f0,40(r1)
- fmsubs f12,f10,f2,f12
- lwz r7,44(r1)
- fctiwz f13,f12
- stfd f13,48(r1)
- lwz r8,52(r1)
- sw r7,r_zistepx
- sw r8,r_zistepy
-
- # a_sstepxfrac = r_sstepx & 0xFFFF;
- # a_tstepxfrac = r_tstepx & 0xFFFF;
- # a_ststepxwhole = skinwidth * (r_tstepx >> 16) + (r_sstepx >> 16);
-
- andi. r4,r10,0xffff
- srawi r6,r10,16
- sw r4,a_sstepxfrac
- andi. r5,r11,0xffff
- srawi r7,r11,16
- sw r5,a_tstepxfrac
- mullw r7,r7,r3
- add r7,r7,r6
- sw r7,a_ststepxwhole
- addi r1,r1,64
- blr
-
- funcend D_PolysetCalcGradients
-
-
-
-
- ###########################################################################
- #
- # void D_PolysetScanLeftEdge (int height)
- #
- ###########################################################################
-
- funcdef D_PolysetScanLeftEdge
-
- .ifdef WOS
- init 0,0,19,0
- stmw r13,gb(r1)
- .else
- # r14 is used and save internally, r13 may be used as small data pointer
- init 0,0,17,0
- stmw r15,gb(r1)
- .endif
-
- mtctr r3
- lw r3,d_pedgespanpackage
- subi r3,r3,4
- lw r4,d_pdest
- lw r5,d_pz
- lw r6,d_aspancount
- lw r7,d_ptex
- lw r8,d_sfrac
- lw r9,d_tfrac
- lw r10,d_light
- lw r11,d_zi
- lxa r12,r_affinetridesc
- lwz r12,R_SKINWIDTH(r12)
- lw r31,errorterm
- lw r30,erroradjustup
- lw r29,erroradjustdown
- lw r28,d_pdestextrastep
- lw r27,d_pzextrastep
- add r27,r27,r27
- lw r26,d_countextrastep
- lw r25,d_ptexextrastep
- lw r24,d_sfracextrastep
- lw r23,d_tfracextrastep
- lw r22,d_lightextrastep
- lw r21,d_ziextrastep
- lw r20,d_pdestbasestep
- lw r19,d_pzbasestep
- add r19,r19,r19
- lw r18,ubasestep
- lw r17,d_ptexbasestep
- lw r16,d_sfracbasestep
- lw r15,d_tfracbasestep
- .ifdef WOS
- lw r14,d_lightbasestep
- lw r13,d_zibasestep
- .endif
-
- .sleloop:
-
- # d_pedgespanpackage->pdest = d_pdest;
- # d_pedgespanpackage->pz = d_pz;
- # d_pedgespanpackage->count = d_aspancount;
- # d_pedgespanpackage->ptex = d_ptex;
- #
- # d_pedgespanpackage->sfrac = d_sfrac;
- # d_pedgespanpackage->tfrac = d_tfrac;
- #
- # d_pedgespanpackage->light = d_light;
- # d_pedgespanpackage->zi = d_zi;
- #
- # d_pedgespanpackage++;
- #
- # errorterm += erroradjustup;
- # if (errorterm >= 0)
-
- stwu r4,4(r3)
- add. r31,r31,r30
- stwu r5,4(r3)
- stwu r6,4(r3)
- stwu r7,4(r3)
- stwu r8,4(r3)
- stwu r9,4(r3)
- stwu r10,4(r3)
- stwu r11,4(r3)
- blt .sleelse
-
- # d_pdest += d_pdestextrastep;
- # d_pz += d_pzextrastep;
- # d_aspancount += d_countextrastep;
- # d_ptex += d_ptexextrastep;
- # d_sfrac += d_sfracextrastep;
- # d_ptex += d_sfrac >> 16;
- #
- # d_sfrac &= 0xFFFF;
- # d_tfrac += d_tfracextrastep;
- # if (d_tfrac & 0x10000)
- # {
- # d_ptex += r_affinetridesc.skinwidth;
- # d_tfrac &= 0xFFFF;
- # }
- # d_light += d_lightextrastep;
- # d_zi += d_ziextrastep;
- # errorterm -= erroradjustdown;
-
- add r8,r8,r24
- add r4,r4,r28
- add r5,r5,r27
- add r10,r10,r22
- add r11,r11,r21
- add r7,r7,r25
- srawi r0,r8,16
- add r6,r6,r26
- add r9,r9,r23
- add r7,r7,r0
- andi. r8,r8,0xffff
- andis. r0,r9,1
- subf r31,r29,r31
- beq .slenext
- add r7,r7,r12
- andi. r9,r9,0xffff
- b .slenext
- .sleelse:
-
- # d_pdest += d_pdestbasestep;
- # d_pz += d_pzbasestep;
- # d_aspancount += ubasestep;
- # d_ptex += d_ptexbasestep;
- # d_sfrac += d_sfracbasestep;
- # d_ptex += d_sfrac >> 16;
- # d_sfrac &= 0xFFFF;
- # d_tfrac += d_tfracbasestep;
- # if (d_tfrac & 0x10000)
- # {
- # d_ptex += r_affinetridesc.skinwidth;
- # d_tfrac &= 0xFFFF;
- # }
- # d_light += d_lightbasestep;
- # d_zi += d_zibasestep;
-
- .ifdef WOS
- add r8,r8,r16
- add r4,r4,r20
- add r5,r5,r19
- add r10,r10,r14
- add r11,r11,r13
- add r7,r7,r17
- .else
- lw r0,d_lightbasestep
- add r8,r8,r16
- add r4,r4,r20
- add r10,r10,r0
- lw r0,d_zibasestep
- add r5,r5,r19
- add r7,r7,r17
- add r11,r11,r0
- .endif
- srawi r0,r8,16
- add r6,r6,r18
- add r9,r9,r15
- add r7,r7,r0
- andi. r8,r8,0xffff
- andis. r0,r9,1
- beq .slenext
- add r7,r7,r12
- andi. r9,r9,0xffff
- .slenext:
- bdnz .sleloop
- addi r3,r3,4
- sw r3,d_pedgespanpackage
-
- .ifdef WOS
- lmw r13,gb(r1)
- .else
- lmw r15,gb(r1)
- .endif
- exit
-
- funcend D_PolysetScanLeftEdge
-
-
-
-
- ###########################################################################
- #
- # void D_DrawNonSubdiv (void)
- #
- ###########################################################################
-
- funcdef D_DrawNonSubdiv
-
- init 0,0,9,0
- stmw r23,gb(r1)
-
- # pfv = r_affinetridesc.pfinalverts;
- # ptri = r_affinetridesc.ptriangles;
- # lnumtriangles = r_affinetridesc.numtriangles;
-
- lxa r29,r_affinetridesc
- lwz r31,R_PFINALVERTS(r29)
- lwz r30,R_PTRIANGLES(r29)
- lwz r23,R_NUMTRIANGLES(r29)
- lwz r29,R_SEAMFIXUP16(r29)
- lxa r27,r_p0
- lxa r26,r_p1
- lxa r25,r_p2
- lxa r24,edgetables
- .nsloop:
-
- # index0 = pfv + ptri->vertindex[0];
- # index1 = pfv + ptri->vertindex[1];
- # index2 = pfv + ptri->vertindex[2];
- #
- # d_xdenom = (index0->v[1]-index1->v[1]) *
- # (index0->v[0]-index2->v[0]) -
- # (index0->v[0]-index1->v[0])*(index0->v[1]-index2->v[1]);
-
- lwz r6,MT_VERTINDEX+0*4(r30)
- slwi r6,r6,FV_SIZEOF_EXP
- add r7,r31,r6 #r7 = index0
- lwz r6,MT_VERTINDEX+1*4(r30)
- slwi r6,r6,FV_SIZEOF_EXP
- add r8,r31,r6 #r8 = index1
- lwz r6,MT_VERTINDEX+2*4(r30)
- slwi r6,r6,FV_SIZEOF_EXP
- add r9,r31,r6 #r9 = index2
- lwz r3,0(r7) #r3 = index0->v[0]
- lwz r4,4(r7) #r4 = index0->v[1]
- lwz r5,0(r8) #r5 = index1->v[0]
- lwz r6,4(r8) #r6 = index1->v[1]
- lwz r10,0(r9) #r10 = index2->v[0]
- lwz r11,4(r9) #r11 = index2->v[1]
- subf r12,r10,r3
- subf r0,r6,r4
- mullw r12,r12,r0
- subf r0,r5,r3
- subf r28,r11,r4
- mullw r28,r28,r0
-
- # if (d_xdenom >= 0)
- # {
- # continue;
- # }
-
- subf. r12,r28,r12
- bge .nsnext
- sw r12,d_xdenom
-
- # r_p0[0] = index0->v[0]; // u
- # r_p0[1] = index0->v[1]; // v
- # r_p0[2] = index0->v[2]; // s
- # r_p0[3] = index0->v[3]; // t
- # r_p0[4] = index0->v[4]; // light
- # r_p0[5] = index0->v[5]; // iz
- #
- # r_p1[0] = index1->v[0];
- # r_p1[1] = index1->v[1];
- # r_p1[2] = index1->v[2];
- # r_p1[3] = index1->v[3];
- # r_p1[4] = index1->v[4];
- # r_p1[5] = index1->v[5];
- #
- # r_p2[0] = index2->v[0];
- # r_p2[1] = index2->v[1];
- # r_p2[2] = index2->v[2];
- # r_p2[3] = index2->v[3];
- # r_p2[4] = index2->v[4];
- # r_p2[5] = index2->v[5];
-
- stw r3,0(r27)
- stw r4,4(r27)
- lwz r12,12(r7)
- stw r12,12(r27)
- lwz r0,16(r7)
- stw r0,16(r27)
- lwz r12,20(r7)
- stw r12,20(r27)
- stw r5,0(r26)
- stw r6,4(r26)
- lwz r12,12(r8)
- stw r12,12(r26)
- lwz r0,16(r8)
- stw r0,16(r26)
- lwz r12,20(r8)
- stw r12,20(r26)
- stw r10,0(r25)
- stw r11,4(r25)
- lwz r3,MT_FACESFRONT(r30)
- lwz r12,12(r9)
- stw r12,12(r25)
- lwz r0,16(r9)
- stw r0,16(r25)
- lwz r12,20(r9)
- stw r12,20(r25)
-
- lwz r5,8(r7)
- lwz r12,8(r8)
- lwz r10,8(r9)
-
- # if (!ptri->facesfront)
- # {
- # if (index0->flags & ALIAS_ONSEAM)
- # r_p0[2] += r_affinetridesc.seamfixupX16;
- # if (index1->flags & ALIAS_ONSEAM)
- # r_p1[2] += r_affinetridesc.seamfixupX16;
- # if (index2->flags & ALIAS_ONSEAM)
- # r_p2[2] += r_affinetridesc.seamfixupX16;
- # }
-
- mr. r3,r3
- bne .nscont
- lwz r0,FV_FLAGS(r7)
- andi. r0,r0,ALIAS_ONSEAM
- beq .ns1
- add r5,r5,r29
- .ns1:
- lwz r0,FV_FLAGS(r8)
- andi. r0,r0,ALIAS_ONSEAM
- beq .ns2
- add r12,r12,r29
- .ns2:
- lwz r0,FV_FLAGS(r9)
- andi. r0,r0,ALIAS_ONSEAM
- beq .nscont
- add r10,r10,r29
- .nscont:
- stw r5,8(r27)
- stw r12,8(r26)
- stw r10,8(r25)
-
- ###### D_PolysetSetEdgeTable (inlined)
-
- cmpw r4,r6
- blt .nslt1
- beq .nseq1
- .nsgt1:
- li r3,EDGETABLE_SIZEOF
- cmpw cr1,r4,r11
- beq cr1,.nseq2
- cmpw r6,r11
- beq .nseq3
- ble cr1,.nsskip
- addi r3,r3,2*EDGETABLE_SIZEOF
- .nsskip:
- ble .nsskip2
- addi r3,r3,4*EDGETABLE_SIZEOF
- .nsskip2:
- add r3,r3,r24
- sw r3,pedgetable
- b .nsdone
- .nseq2:
- addi r3,r24,8*EDGETABLE_SIZEOF
- sw r3,pedgetable
- b .nsdone
- .nseq3:
- addi r3,r24,10*EDGETABLE_SIZEOF
- sw r3,pedgetable
- b .nsdone
- .nseq1:
- cmpw r4,r11
- bge .nsge
- addi r3,r24,2*EDGETABLE_SIZEOF
- sw r3,pedgetable
- b .nsdone
- .nsge:
- addi r3,r24,5*EDGETABLE_SIZEOF
- sw r3,pedgetable
- b .nsdone
- .nslt1:
- li r3,0
- cmpw cr1,r4,r11
- beq cr1,.nseq4
- cmpw r6,r11
- beq .nseq5
- ble cr1,.nsskip3
- addi r3,r3,2*EDGETABLE_SIZEOF
- .nsskip3:
- ble .nsskip4
- addi r3,r3,4*EDGETABLE_SIZEOF
- .nsskip4:
- add r3,r3,r24
- sw r3,pedgetable
- b .nsdone
- .nseq4:
- addi r3,r24,9*EDGETABLE_SIZEOF
- sw r3,pedgetable
- b .nsdone
- .nseq5:
- addi r3,r24,11*EDGETABLE_SIZEOF
- sw r3,pedgetable
- .nsdone:
-
- ###### end of D_PolysetSetEdgeTable
-
- call D_RasterizeAliasPolySmooth
- .nsnext:
- subic. r23,r23,1
- la r30,MT_SIZEOF(r30)
- bne .nsloop
-
- lmw r23,gb(r1)
- exit
-
- funcend D_DrawNonSubdiv
-
-
-
-
- ###########################################################################
- #
- # void D_DrawSubdiv (void)
- #
- ###########################################################################
-
- funcdef D_DrawSubdiv
-
- init 0,0,11,0
- stmw r21,gb(r1)
-
- # pfv = r_affinetridesc.pfinalverts;
- # ptri = r_affinetridesc.ptriangles;
- # lnumtriangles = r_affinetridesc.numtriangles;
-
- lxa r29,r_affinetridesc
- lwz r31,R_PFINALVERTS(r29)
- lwz r30,R_PTRIANGLES(r29)
- lwz r21,R_NUMTRIANGLES(r29)
- lwz r29,R_SEAMFIXUP16(r29)
- lw r25,acolormap
- .sdloop:
-
- # index0 = pfv + ptri->vertindex[0];
- # index1 = pfv + ptri->vertindex[1];
- # index2 = pfv + ptri->vertindex[2];
- #
- # if (((index0->v[1]-index1->v[1]) *
- # (index0->v[0]-index2->v[0]) -
- # (index0->v[0]-index1->v[0])*(index0->v[1]-index2->v[1]);
-
- lwz r6,MT_VERTINDEX+0*4(r30)
- slwi r6,r6,FV_SIZEOF_EXP
- add r28,r31,r6 #r28 = index0
- lwz r6,MT_VERTINDEX+1*4(r30)
- slwi r6,r6,FV_SIZEOF_EXP
- add r27,r31,r6 #r27 = index1
- lwz r6,MT_VERTINDEX+2*4(r30)
- slwi r6,r6,FV_SIZEOF_EXP
- add r26,r31,r6 #r26 = index2
- lwz r3,0(r28) #r3 = index0->v[0]
- lwz r4,4(r28) #r4 = index0->v[1]
- lwz r5,0(r27) #r5 = index1->v[0]
- lwz r6,4(r27) #r6 = index1->v[1]
- lwz r10,0(r26) #r10 = index2->v[0]
- lwz r11,4(r26) #r11 = index2->v[1]
- subf r12,r10,r3
- subf r0,r6,r4
- mullw r12,r12,r0
- subf r0,r5,r3
- subf r7,r11,r4
- mullw r7,r7,r0
- subf. r12,r7,r12
- bge .sdnext
- lwz r3,MT_FACESFRONT(r30)
- lwz r8,16(r28)
- andi. r8,r8,0xff00
- add r9,r25,r8
- sw r9,d_pcolormap
- mr. r3,r3
- beq .sdelse
- mr r3,r28
- mr r4,r27
- mr r5,r26
- call D_PolysetRecursiveTriangle
- b .sdnext
- .sdelse:
- lwz r24,8(r28) #s0
- lwz r23,8(r27) #s1
- lwz r22,8(r26) #s2
- lwz r0,FV_FLAGS(r28)
- andi. r0,r0,ALIAS_ONSEAM
- beq .sd1
- add r5,r24,r29
- stw r5,8(r28)
- .sd1:
- lwz r0,FV_FLAGS(r27)
- andi. r0,r0,ALIAS_ONSEAM
- beq .sd2
- add r5,r23,r29
- stw r5,8(r27)
- .sd2:
- lwz r0,FV_FLAGS(r26)
- andi. r0,r0,ALIAS_ONSEAM
- beq .sdcont
- add r5,r22,r29
- stw r5,8(r26)
- .sdcont:
- mr r3,r28
- mr r4,r27
- mr r5,r26
- call D_PolysetRecursiveTriangle
- stw r24,8(r28)
- stw r23,8(r27)
- stw r22,8(r26)
- .sdnext:
- subic. r21,r21,1
- la r30,MT_SIZEOF(r30)
- bne .sdloop
-
- lmw r21,gb(r1)
- exit
-
- funcend D_DrawSubdiv
-
-
-
-
- .ifdef WOS
- .tocd
- @__adivtab:
- .long _adivtab
- .endif
- .data
-
- lab adivtab
- .long 1,0,1,-1,1,-2,1,-3,1,-4,1
- .long -5,1,-6,1,-7,2,-1,2,-3,3,0
- .long 3,-3,5,0,7,-1,15,0,0,0,-15
- .long 0,-8,1,-5,0,-4,1,-3,0,-3,3
- .long -3,6,-2,1,-2,3,-2,5,-2,7,-2
- .long 9,-2,11,-2,13,-1,0,-1,1,0,-14
- .long 1,0,1,-1,1,-2,1,-3,1,-4,1
- .long -5,1,-6,2,0,2,-2,2,-4,3,-2
- .long 4,-2,7,0,14,0,0,0,-14,0,-7
- .long 0,-5,1,-4,2,-3,1,-3,4,-2,0
- .long -2,2,-2,4,-2,6,-2,8,-2,10,-2
- .long 12,-1,0,-1,1,-1,2,0,-13,0,-13
- .long 1,0,1,-1,1,-2,1,-3,1,-4,1
- .long -5,1,-6,2,-1,2,-3,3,-1,4,-1
- .long 6,-1,13,0,0,0,-13,0,-7,1,-5
- .long 2,-4,3,-3,2,-3,5,-2,1,-2,3
- .long -2,5,-2,7,-2,9,-2,11,-1,0,-1
- .long 1,-1,2,-1,3,0,-12,0,-12,0,-12
- .long 1,0,1,-1,1,-2,1,-3,1,-4,1
- .long -5,2,0,2,-2,3,0,4,0,6,0
- .long 12,0,0,0,-12,0,-6,0,-4,0,-3
- .long 0,-3,3,-2,0,-2,2,-2,4,-2,6
- .long -2,8,-2,10,-1,0,-1,1,-1,2,-1
- .long 3,-1,4,0,-11,0,-11,0,-11,0,-11
- .long 1,0,1,-1,1,-2,1,-3,1,-4,1
- .long -5,2,-1,2,-3,3,-2,5,-1,11,0
- .long 0,0,-11,0,-6,1,-4,1,-3,1,-3
- .long 4,-2,1,-2,3,-2,5,-2,7,-2,9
- .long -1,0,-1,1,-1,2,-1,3,-1,4,-1
- .long 5,0,-10,0,-10,0,-10,0,-10,0,-10
- .long 1,0,1,-1,1,-2,1,-3,1,-4,2
- .long 0,2,-2,3,-1,5,0,10,0,0,0
- .long -10,0,-5,0,-4,2,-3,2,-2,0,-2
- .long 2,-2,4,-2,6,-2,8,-1,0,-1,1
- .long -1,2,-1,3,-1,4,-1,5,-1,6,0
- .long -9,0,-9,0,-9,0,-9,0,-9,0,-9
- .long 1,0,1,-1,1,-2,1,-3,1,-4,2
- .long -1,3,0,4,-1,9,0,0,0,-9,0
- .long -5,1,-3,0,-3,3,-2,1,-2,3,-2
- .long 5,-2,7,-1,0,-1,1,-1,2,-1,3
- .long -1,4,-1,5,-1,6,-1,7,0,-8,0
- .long -8,0,-8,0,-8,0,-8,0,-8,0,-8
- .long 1,0,1,-1,1,-2,1,-3,2,0,2
- .long -2,4,0,8,0,0,0,-8,0,-4,0
- .long -3,1,-2,0,-2,2,-2,4,-2,6,-1
- .long 0,-1,1,-1,2,-1,3,-1,4,-1,5
- .long -1,6,-1,7,-1,8,0,-7,0,-7,0
- .long -7,0,-7,0,-7,0,-7,0,-7,0,-7
- .long 1,0,1,-1,1,-2,1,-3,2,-1,3
- .long -1,7,0,0,0,-7,0,-4,1,-3,2
- .long -2,1,-2,3,-2,5,-1,0,-1,1,-1
- .long 2,-1,3,-1,4,-1,5,-1,6,-1,7
- .long -1,8,-1,9,0,-6,0,-6,0,-6,0
- .long -6,0,-6,0,-6,0,-6,0,-6,0,-6
- .long 1,0,1,-1,1,-2,2,0,3,0,6
- .long 0,0,0,-6,0,-3,0,-2,0,-2,2
- .long -2,4,-1,0,-1,1,-1,2,-1,3,-1
- .long 4,-1,5,-1,6,-1,7,-1,8,-1,9
- .long -1,10,0,-5,0,-5,0,-5,0,-5,0
- .long -5,0,-5,0,-5,0,-5,0,-5,0,-5
- .long 1,0,1,-1,1,-2,2,-1,5,0,0
- .long 0,-5,0,-3,1,-2,1,-2,3,-1,0
- .long -1,1,-1,2,-1,3,-1,4,-1,5,-1
- .long 6,-1,7,-1,8,-1,9,-1,10,-1,11
- .long 0,-4,0,-4,0,-4,0,-4,0,-4,0
- .long -4,0,-4,0,-4,0,-4,0,-4,0,-4
- .long 1,0,1,-1,2,0,4,0,0,0,-4
- .long 0,-2,0,-2,2,-1,0,-1,1,-1,2
- .long -1,3,-1,4,-1,5,-1,6,-1,7,-1
- .long 8,-1,9,-1,10,-1,11,-1,12,0,-3
- .long 0,-3,0,-3,0,-3,0,-3,0,-3,0
- .long -3,0,-3,0,-3,0,-3,0,-3,0,-3
- .long 1,0,1,-1,3,0,0,0,-3,0,-2
- .long 1,-1,0,-1,1,-1,2,-1,3,-1,4
- .long -1,5,-1,6,-1,7,-1,8,-1,9,-1
- .long 10,-1,11,-1,12,-1,13,0,-2,0,-2
- .long 0,-2,0,-2,0,-2,0,-2,0,-2,0
- .long -2,0,-2,0,-2,0,-2,0,-2,0,-2
- .long 1,0,2,0,0,0,-2,0,-1,0,-1
- .long 1,-1,2,-1,3,-1,4,-1,5,-1,6
- .long -1,7,-1,8,-1,9,-1,10,-1,11,-1
- .long 12,-1,13,-1,14,0,-1,0,-1,0,-1
- .long 0,-1,0,-1,0,-1,0,-1,0,-1,0
- .long -1,0,-1,0,-1,0,-1,0,-1,0,-1
- .long 1,0,0,0,-1,0,-1,1,-1,2,-1
- .long 3,-1,4,-1,5,-1,6,-1,7,-1,8
- .long -1,9,-1,10,-1,11,-1,12,-1,13,-1
- .long 14,-1,15,0,0,0,0,0,0,0,0
- .long 0,0,0,0,0,0,0,0,0,0,0
- .long 0,0,0,0,0,0,0,0,0,0,0
- .long 0,0,0,0,0,0,0,0,0,0,0
- .long 0,0,0,0,0,0,0,0,0,0,0
- .long 0,0,0,0,0,0,0,0,0,0,0
- .long 0,-1,-14,-1,-13,-1,-12,-1,-11,-1,-10
- .long -1,-9,-1,-8,-1,-7,-1,-6,-1,-5,-1
- .long -4,-1,-3,-1,-2,-1,-1,-1,0,0,0
- .long 1,0,0,1,0,1,0,1,0,1,0
- .long 1,0,1,0,1,0,1,0,1,0,1
- .long 0,1,0,1,0,1,0,1,0,1,-1
- .long -13,-1,-12,-1,-11,-1,-10,-1,-9,-1,-8
- .long -1,-7,-1,-6,-1,-5,-1,-4,-1,-3,-1
- .long -2,-1,-1,-1,0,-2,0,0,0,2,0
- .long 1,0,0,2,0,2,0,2,0,2,0
- .long 2,0,2,0,2,0,2,0,2,0,2
- .long 0,2,0,2,0,2,0,2,-1,-12,-1
- .long -11,-1,-10,-1,-9,-1,-8,-1,-7,-1,-6
- .long -1,-5,-1,-4,-1,-3,-1,-2,-1,-1,-1
- .long 0,-2,-1,-3,0,0,0,3,0,1,1
- .long 1,0,0,3,0,3,0,3,0,3,0
- .long 3,0,3,0,3,0,3,0,3,0,3
- .long 0,3,0,3,0,3,-1,-11,-1,-10,-1
- .long -9,-1,-8,-1,-7,-1,-6,-1,-5,-1,-4
- .long -1,-3,-1,-2,-1,-1,-1,0,-2,-2,-2
- .long 0,-4,0,0,0,4,0,2,0,1,1
- .long 1,0,0,4,0,4,0,4,0,4,0
- .long 4,0,4,0,4,0,4,0,4,0,4
- .long 0,4,0,4,-1,-10,-1,-9,-1,-8,-1
- .long -7,-1,-6,-1,-5,-1,-4,-1,-3,-1,-2
- .long -1,-1,-1,0,-2,-3,-2,-1,-3,-1,-5
- .long 0,0,0,5,0,2,1,1,2,1,1
- .long 1,0,0,5,0,5,0,5,0,5,0
- .long 5,0,5,0,5,0,5,0,5,0,5
- .long 0,5,-1,-9,-1,-8,-1,-7,-1,-6,-1
- .long -5,-1,-4,-1,-3,-1,-2,-1,-1,-1,0
- .long -2,-4,-2,-2,-2,0,-3,0,-6,0,0
- .long 0,6,0,3,0,2,0,1,2,1,1
- .long 1,0,0,6,0,6,0,6,0,6,0
- .long 6,0,6,0,6,0,6,0,6,0,6
- .long -1,-8,-1,-7,-1,-6,-1,-5,-1,-4,-1
- .long -3,-1,-2,-1,-1,-1,0,-2,-5,-2,-3
- .long -2,-1,-3,-2,-4,-1,-7,0,0,0,7
- .long 0,3,1,2,1,1,3,1,2,1,1
- .long 1,0,0,7,0,7,0,7,0,7,0
- .long 7,0,7,0,7,0,7,0,7,-1,-7
- .long -1,-6,-1,-5,-1,-4,-1,-3,-1,-2,-1
- .long -1,-1,0,-2,-6,-2,-4,-2,-2,-2,0
- .long -3,-1,-4,0,-8,0,0,0,8,0,4
- .long 0,2,2,2,0,1,3,1,2,1,1
- .long 1,0,0,8,0,8,0,8,0,8,0
- .long 8,0,8,0,8,0,8,-1,-6,-1,-5
- .long -1,-4,-1,-3,-1,-2,-1,-1,-1,0,-2
- .long -7,-2,-5,-2,-3,-2,-1,-3,-3,-3,0
- .long -5,-1,-9,0,0,0,9,0,4,1,3
- .long 0,2,1,1,4,1,3,1,2,1,1
- .long 1,0,0,9,0,9,0,9,0,9,0
- .long 9,0,9,0,9,-1,-5,-1,-4,-1,-3
- .long -1,-2,-1,-1,-1,0,-2,-8,-2,-6,-2
- .long -4,-2,-2,-2,0,-3,-2,-4,-2,-5,0
- .long -10,0,0,0,10,0,5,0,3,1,2
- .long 2,2,0,1,4,1,3,1,2,1,1
- .long 1,0,0,10,0,10,0,10,0,10,0
- .long 10,0,10,-1,-4,-1,-3,-1,-2,-1,-1
- .long -1,0,-2,-9,-2,-7,-2,-5,-2,-3,-2
- .long -1,-3,-4,-3,-1,-4,-1,-6,-1,-11,0
- .long 0,0,11,0,5,1,3,2,2,3,2
- .long 1,1,5,1,4,1,3,1,2,1,1
- .long 1,0,0,11,0,11,0,11,0,11,0
- .long 11,-1,-3,-1,-2,-1,-1,-1,0,-2,-10
- .long -2,-8,-2,-6,-2,-4,-2,-2,-2,0,-3
- .long -3,-3,0,-4,0,-6,0,-12,0,0,0
- .long 12,0,6,0,4,0,3,0,2,2,2
- .long 0,1,5,1,4,1,3,1,2,1,1
- .long 1,0,0,12,0,12,0,12,0,12,-1
- .long -2,-1,-1,-1,0,-2,-11,-2,-9,-2,-7
- .long -2,-5,-2,-3,-2,-1,-3,-5,-3,-2,-4
- .long -3,-5,-2,-7,-1,-13,0,0,0,13,0
- .long 6,1,4,1,3,1,2,3,2,1,1
- .long 6,1,5,1,4,1,3,1,2,1,1
- .long 1,0,0,13,0,13,0,13,-1,-1,-1
- .long 0,-2,-12,-2,-10,-2,-8,-2,-6,-2,-4
- .long -2,-2,-2,0,-3,-4,-3,-1,-4,-2,-5
- .long -1,-7,0,-14,0,0,0,14,0,7,0
- .long 4,2,3,2,2,4,2,2,2,0,1
- .long 6,1,5,1,4,1,3,1,2,1,1
- .long 1,0,0,14,0,14,-1,0,-2,-13,-2
- .long -11,-2,-9,-2,-7,-2,-5,-2,-3,-2,-1
- .long -3,-6,-3,-3,-3,0,-4,-1,-5,0,-8
- .long -1,-15,0,0,0,15,0,7,1,5,0
- .long 3,3,3,0,2,3,2,1,1,7,1
- .long 6,1,5,1,4,1,3,1,2,1,1
- .long 1,0,0,15,-2,-14,-2,-12,-2,-10,-2
- .long -8,-2,-6,-2,-4,-2,-2,-2,0,-3,-5
- .long -3,-2,-4,-4,-4,0,-6,-2,-8,0,-16
- .long 0,0,0,16,0,8,0,5,1,4,0
- .long 3,1,2,4,2,2,2,0,1,7,1
- .long 6,1,5,1,4,1,3,1,2,1,1
- .long 1,0
-
-