home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-06-17 | 55.1 KB | 1,974 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_polyset.c assembler implementations by Frank Wille <frank@phoenix.owl.de>
- **
-
- XREF _acolormap
- XREF _d_aspancount
- XREF _errorterm
- XREF _erroradjustup
- XREF _erroradjustdown
- XREF _d_countextrastep
- XREF _ubasestep
- XREF _r_affinetridesc
- XREF _a_ststepxwhole
- XREF _a_sstepxfrac
- XREF _a_tstepxfrac
- XREF _r_lstepx
- XREF _r_lstepy
- XREF _r_sstepx
- XREF _r_sstepy
- XREF _r_tstepx
- XREF _r_tstepy
- XREF _r_zistepx
- XREF _r_zistepy
- XREF _zspantable
- XREF _skintable
- XREF _r_p0
- XREF _r_p1
- XREF _r_p2
- XREF _d_xdenom
- XREF _d_pcolormap
- XREF _d_scantable
- XREF _d_viewbuffer
- XREF _d_pedgespanpackage
- XREF _d_pdest
- XREF _d_pz
- XREF _d_aspancount
- XREF _d_ptex
- XREF _d_sfrac
- XREF _d_tfrac
- XREF _d_light
- XREF _d_zi
- XREF _d_pdestextrastep
- XREF _d_pzextrastep
- XREF _d_countextrastep
- XREF _d_ptexextrastep
- XREF _d_sfracextrastep
- XREF _d_tfracextrastep
- XREF _d_lightextrastep
- XREF _d_ziextrastep
- XREF _d_pdestbasestep
- XREF _d_pzbasestep
- XREF _d_ptexbasestep
- XREF _d_sfracbasestep
- XREF _d_tfracbasestep
- XREF _d_lightbasestep
- XREF _d_zibasestep
- XREF _d_zwidth
- XREF _d_pzbuffer
- XREF _a_spans
- XREF _pedgetable
- XREF _edgetables
- XREF _screenwidth
- XREF _FloorDivMod
-
- XDEF _D_DrawNonSubdiv
- XDEF _D_PolysetRecursiveTriangle
- XDEF _D_RasterizeAliasPolySmooth
-
- ALIAS_ONSEAM = $20 ;must match the def. in r_shared.h
-
- PSPANP_PDEST = 0
- PSPANP_PZ = 4
- PSPANP_COUNT = 8
- PSPANP_PTEX = 12
- PSPANP_SFRAC = 16
- PSPANP_TFRAC = 20
- PSPANP_LIGHT = 24
- PSPANP_ZI = 28
- PSPANP_SIZEOF = 32
- PSPANP_SIZEOF_EXP = 5
-
- R_PSKIN = 0
- R_PSKINDESC = 4
- R_SKINWIDTH = 8
- R_SKINHEIGHT = 12
- R_PTRIANGLES = 16
- R_PFINALVERTS = 20
- R_NUMTRIANGLES = 24
- R_DRAWTYPE = 28
- R_SEAMFIXUP16 = 32
- R_SIZEOF = 36
-
- PTEMP_QUOTIENT = 0
- PTEMP_REMAINDER = 4
-
- ETAB_ISFLATTOP = 0
- ETAB_NUMLEFTEDGES = 4
- ETAB_PLEV0 = 8
- ETAB_PLEV1 = 12
- ETAB_PLEV2 = 16
- ETAB_NUMRIGHTEDGES = 20
- ETAB_PREV0 = 24
- ETAB_PREV1 = 28
- ETAB_PREV2 = 32
- ETAB_SIZEOF = 36
-
- MT_FACESFRONT = 0
- MT_VERTINDEX = 4
- MT_SIZEOF = 16
-
- FV_V = 0
- FV_FLAGS = 24
- FV_RESERVED = 28
- FV_SIZEOF = 32
- FV_SIZEOF_EXP = 5
-
- EDGETABLE_SIZEOF = 36
-
- ******************************************************************************
- *
- * void D_PolysetDrawSpans8 (spanpackage_t *pspanpackage)
- *
- * standard scan drawing function for alias models
- *
- ******************************************************************************
-
- cnop 0,4
- _D_PolysetDrawSpans8
-
-
- ***** stackframe
-
- rsreset
- .intregs rs.l 11
- rs.l 1
- .pspan rs.l 1
-
-
- ****** prologue
-
- movem.l d2-d7/a2-a6,-(sp)
- move.l .pspan(sp),a0
- move.l _d_aspancount,d0
- move.l _errorterm,d1
- move.l _erroradjustup,d2
- move.l _erroradjustdown,d3
- move.l _d_countextrastep,a1
- move.l _ubasestep,d5
- move.l _acolormap,a3
- move.l _r_zistepx,d4
- move.l _a_ststepxwhole,a5
- move.l _a_sstepxfrac,a4
- move.l _a_tstepxfrac,d6
- swap d6
- move.l _r_lstepx,a6
- move.l _r_affinetridesc+R_SKINWIDTH,d7
- move d7,d6
- .loop
-
- * lcount = d_aspancount - pspanpackage->count;
- *
- * errorterm += erroradjustup;
- * if (errorterm >= 0)
- * {
- * d_aspancount += d_countextrastep;
- * errorterm -= erroradjustdown;
- * }
- * else
- * {
- * d_aspancount += ubasestep;
- * }
-
- move.l d0,d7
- sub.l PSPANP_COUNT(a0),d7 ;lcount = d_aspancount-pspa...
- add.l d2,d1 ;errorterm += erroradjustup
- blt.b .else ;if (errorterm >= 0)
- add.l a1,d0 ;d_aspancount += d_countextrastep
- sub.l d3,d1 ;errorterm -= error adjustdown
- bra.b .next
- .else
- add.l d5,d0 ;d_aspancount += ubasestep
- .next
- subq.l #1,d7
- blt.b .loopend
-
- * lpdest = pspanpackage->pdest;
- * lptex = pspanpackage->ptex;
- * lpz = pspanpackage->pz;
- * lsfrac = pspanpackage->sfrac;
- * ltfrac = pspanpackage->tfrac;
- * llight = pspanpackage->light;
- * lzi = pspanpackage->zi;
-
- movem.l d0-d3/d5/a0/a1,-(sp)
- move.l (a0)+,d2 ;lpdest = pspanpackage->dest
- move.l (a0)+,a1 ;lpz = pspanpackage->pz
- addq.l #4,a0
- move.l (a0)+,a2 ;lptex = pspanpackage->ptex
- move.l (a0)+,d3 ;lsfrac = pspanpackage->sfrac
- move.l (a0)+,d5 ;tsfrac = pspanpackage->tfrac
- swap d5
- move.l (a0)+,d1 ;llight = pspanpackage->light
- move.l (a0)+,d0 ;lzi = pspanpackage->zi
- move.l d2,a0
- moveq #0,d2
-
- ****** main drawing loop
-
- ****** d0 = lzi
- ****** d1 = llight
- ****** d3 = lsfrac
- ****** d4 = r_zistepx
- ****** d5 = ltfrac
- ****** d6 = a_tstepxfrac [high] and r_affinetridesc.skinwidth [low]
- ****** d7 = lcount-1
- ****** a0 -> lpdest
- ****** a1 -> lpz
- ****** a2 -> lptex
- ****** a3 -> acolormap
- ****** a4 = a_sstepxfrac
- ****** a5 = a_ststepxwhole
- ****** a6 = 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);
-
- .loop2
- swap d0
- cmp (a1)+,d0 ;if ((lzi >> 16) >= *lpz)
- blt.b .cont
- move d1,d2
- move.b (a2),d2 ;d3 = *lptex + (llight & $ff00)
- move.b 0(a3,d2.l),(a0) ;*lpdest = ((byte *)acolormap[d2]
- move d0,-2(a1) ;*lpz = lzi >> 16
- .cont
- addq.l #1,a0 ;lpdest++
- swap d0
- add.l d4,d0 ;lzi += r_zistepx
- add.l a6,d1 ;llight += r_lstepx
- add.l a5,a2 ;lptex += a_ststepxwhole
- add.l a4,d3 ;lsfrac += a_sstepxfrac
- swap d3
- add d3,a2 ;lptex += lsfrac >> 16
- clr d3
- swap d3 ;lsfrac &= $ffff
- add.l d6,d5 ;ltfrac += a_tstepxfrac
- bcc.b .cont2 ;if (ltfrac & $10000)
- add d6,a2 ;lptex += r_affine...
- .cont2
- dbra d7,.loop2 ;while (--lcount)
- movem.l (sp)+,d0-d3/d5/a0/a1
- .loopend
-
- * pspanpackage++;
- * } while (pspanpackage->count != -999999);
-
- lea PSPANP_SIZEOF(a0),a0 ;pspanpackage++
- cmp.l #-999999,PSPANP_COUNT(a0) ; while (pspanpackage->count...)
- bne.b .loop
- movem.l (sp)+,d2-d7/a2-a6
- rts
-
-
-
-
-
-
-
-
-
- ******************************************************************************
- *
- * void D_PolysetRecursiveTriangle (int *lp1, int *lp2, int *lp3)
- *
- ******************************************************************************
-
- cnop 0,4
- _D_PolysetRecursiveTriangle
-
-
- ***** stackframe
-
- rsreset
- .new rs.l 6
- .intregs rs.l 11
- rs.l 1
- .lp1 rs.l 1
- .lp2 rs.l 1
- .lp3 rs.l 1
-
-
- movem.l d2-d7/a2-a6,-(sp)
- sub.l #.intregs,sp
- move.l .lp1(sp),a0
- move.l .lp2(sp),a1
- move.l .lp3(sp),a2
- lea _zspantable,a5
- move.l _d_viewbuffer,a6
- bsr DoRecursion
- add.l #.intregs,sp
- movem.l (sp)+,d2-d7/a2-a6
- rts
-
- ****** a0 -> lp1
- ****** a1 -> lp2
- ****** a2 -> lp3
-
- DoRecursion
- lea -6*4(sp),sp
- move.l sp,a4
-
- * 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)
-
- move.l (a1),d0
- move.l (a0),d1
- move.l 1*4(a1),d2
- move.l 1*4(a0),d3
- move.l d0,d4
- sub.l d1,d4 ;d = lp2[0] - lp1[0]
- addq.l #1,d4
- cmp.l #2,d4 ;if (d < -1 || d > 1)
- bhi.b .split ;goto split
- move.l d2,d5
- sub.l d3,d5 ;d = lp2[1] - lp1[1]
- addq.l #1,d5
- cmp.l #2,d5 ;if (d < -1 || d > 1)
- bhi.b .split ;goto split
- move.l (a2),d4
- move.l d4,d5
- sub.l d0,d4 ;d = lp3[0] - lp2[0]
- addq.l #1,d4
- cmp.l #2,d4 ;if (d < -1 || d > 1)
- bhi.b .split2 ;goto split2
- move.l 1*4(a2),d4
- move.l d4,d6
- sub.l d2,d4 ;d = lp3[1] - lp2[1]
- addq.l #1,d4
- cmp.l #2,d4 ;if (d < -1 || d > 1)
- bhi.b .split2 ;goto split2
- sub.l d1,d5 ;d = lp1[0] - lp3[0]
- addq.l #1,d5
- cmp.l #2,d5 ;if (d < -1 || d > 1)
- bhi.b .split3 ;goto split3
- sub.l d3,d6 ;d = lp1[1] - lp3[1]
- addq.l #1,d6
- cmp.l #2,d6 ;if (d < -1 || d > 1)
- bls.b .exit
-
- *split3:
- * temp = lp1;
- * lp1 = lp3;
- * lp3 = lp2;
- * lp2 = temp;
- *
- * goto split;
- *
- *split2:
- * temp = lp1;
- * lp1 = lp2;
- * lp2 = lp3;
- * lp3 = temp;
-
- .split3
- exg a1,a2 ;rotate forward
- exg a1,a0
- move.l (a1),d0
- move.l (a0),d1
- move.l 1*4(a1),d2
- move.l 1*4(a0),d3
- bra.b .split
- .split2
- exg a1,a0 ;rotate backward
- exg a1,a2
- move.l (a1),d0
- move.l (a0),d1
- move.l 1*4(a1),d2
- move.l 1*4(a0),d3
- .split
-
- * 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;
-
- move.l d0,d4
- move.l d0,a3
- add.l d1,d4
- asr.l #1,d4 ;d4 = new[0]
- move.l d2,d5
- add.l d3,d5
- asr.l #1,d5 ;d5 = new[1]
- move.l 2*4(a0),d6
- add.l 2*4(a1),d6
- asr.l #1,d6 ;d6 = new[2]
- move.l 3*4(a0),d7
- add.l 3*4(a1),d7
- asr.l #1,d7 ;d7 = new[3]
- move.l 5*4(a0),d0
- add.l 5*4(a1),d0
- asr.l #1,d0 ;d0 = new[5]
-
- * if (lp2[1] > lp1[1])
- * goto nodraw;
- * if ((lp2[1] == lp1[1]) && (lp2[0] < lp1[0]))
- * goto nodraw;
-
- move.l d4,(a4)+ ;store new[]
- move.l d5,(a4)+
- move.l d6,(a4)+
- move.l d7,(a4)+
- move.l d0,4(a4)
- lea -16(a4),a4
- swap d0 ;z = new[5]>>16
- cmp.l d3,d2 ;if (lp2[1] > lp1[1])
- bgt.b .nodraw ;goto nodraw
- cmp.l d2,d3 ;if (lp2[1] == lp1[1)
- bne.b .draw
- cmp.l d1,a3 ;&& (lp2[0] < lp1[0])
- blt.b .nodraw ;goto nodraw
- .draw
-
- * 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;
- * }
-
- move.l 0(a5,d5.l*4),a3
- cmp 0(a3,d4.l*2),d0 ;if (z >= *zbuf)
- blt.b .nodraw
- move d0,0(a3,d4.l*2) ;*zbuf = z
- swap d6
- swap d7
- lea _skintable,a3
- move.l 0(a3,d7.w*4),a3 ;skintable[new[3]]
- move.b 0(a3,d6.w),d2 ;d2 = skintable[new[3]][new[2]>>16]
- and #$ff,d2
- move.l _d_pcolormap,a3
- move.b 0(a3,d2.w),d2 ;pix = d_pcolormap[d2]
- lea _d_scantable,a3
- move.l 0(a3,d5.l*4),d1 ;d_scantable[new[1]]
- add.l d4,d1 ;+new[0]
- move.b d2,0(a6,d1.l) ;d_viewbuffer[d1] = pix
- .nodraw
-
- *// recursively continue
- * D_PolysetRecursiveTriangle (lp3, lp1, new);
- * D_PolysetRecursiveTriangle (lp3, new, lp2);
-
- movem.l a1/a2/a4,-(sp)
- move.l a0,a1
- move.l a2,a0
- move.l a4,a2
- bsr DoRecursion ;DRT (lp3, lp1, new)
- movem.l (sp)+,a1/a2/a4
- move.l a2,a0
- move.l a1,a2
- move.l a4,a1
- bsr DoRecursion ;DRT (lp3, new, lp2)
- .exit
- lea 6*4(sp),sp
- rts
-
-
-
-
-
-
-
- ******************************************************************************
- *
- * void D_PolysetSetUpForLineScan (fixed8_t startvertu,
- * fixed8_t startvertv, fixed8_t endvertu, fixed8_t endvertv)
- *
- * Parameters are transferred in registers d0-d3
- ******************************************************************************
-
- cnop 0,4
- _D_PolysetSetUpForLineScan
-
-
- ***** stackframe
-
- rsreset
- .intregs rs.l 2
- rs.l 1
- .startvertu rs.l 1
- .startvertv rs.l 1
- .endvertu rs.l 1
- .endvertv rs.l 1
-
-
- * errorterm = -1;
- *
- * tm = endvertu - startvertu;
- * tn = endvertv - startvertv;
-
- move.l #-1,_errorterm
- sub.l d0,d2
- sub.l d1,d3
- add.l #15,d2
- add.l #15,d3
-
- * if (((tm <= 16) && (tm >= -15)) &&
- * ((tn <= 16) && (tn >= -15)))
- * {
- * ptemp = &adivtab[((tm+15) << 5) + (tn+15)];
- * ubasestep = ptemp->quotient;
- * erroradjustup = ptemp->remainder;
- * erroradjustdown = tn;
- * }
-
- cmp.l #31,d2
- bhi.b .else
- cmp.l #31,d3
- bhi.b .else
- lea _adivtab,a0
- lsl.l #5,d2
- add.l d3,d2
- lea 0(a0,d2.l*8),a0
- move.l PTEMP_QUOTIENT(a0),_ubasestep
- move.l PTEMP_REMAINDER(a0),_erroradjustup
- sub.l #15,d3
- move.l d3,_erroradjustdown
- bra.b .exit
-
- * {
- * dm = (double)tm;
- * dn = (double)tn;
- *
- * FloorDivMod (dm, dn, &ubasestep, &erroradjustup);
- *
- * erroradjustdown = dn;
- * }
-
- .else
- sub.l #15,d2
- sub.l #15,d3
- fmove.l d2,fp0
- fmove.l d3,fp1
- move.l #_erroradjustup,-(sp)
- move.l #_ubasestep,-(sp)
- fmove.d fp1,-(sp)
- fmove.d fp0,-(sp)
- jsr _FloorDivMod
- add #24,sp
- move.l d3,_erroradjustdown
- .exit
- rts
-
-
-
-
-
-
- *****************************************************************************
- *
- * void D_PolysetCalcGradients (int skinwidth)
- *
- ******************************************************************************
-
- cnop 0,4
- _D_PolysetCalcGradients
-
-
- ***** stackframe
- rsreset
- .fpuregs rs.x 6
- .intregs rs.l 3
- rs.l 1
- .skinwidth rs.l 1
-
- ***** prologue
-
- movem.l d2/d3/a2,-(sp)
- fmovem.x fp2-fp7,-(sp)
-
- * 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;
-
- lea _r_p2,a0
- lea _r_p1,a1
- lea _r_p0,a2
- move.l (a2),d0
- move.l 1*4(a2),d1
- move.l (a0),d2
- sub.l d2,d0
- fmove.l d0,fp0 ;fp0 = p00_minus_p20
- move.l 1*4(a0),d3
- sub.l d3,d1
- fmove.l d1,fp1 ;fp1 = p01_minus_p21
- sub.l (a1),d2
- neg.l d2
- fmove.l d2,fp2 ;fp2 = p10_minus_p20
- sub.l 4(a1),d3
- neg.l d3
- fmove.l d3,fp3 ;fp3 = p11_minus_p21
-
- fmove.l _d_xdenom,fp4
- fmove.s #1,fp5
- fdiv fp4,fp5 ;fp5 = 1.0 / (float)d_xdenom
- fneg fp5,fp6 ;fp6 = ystepdenominv
- fmul fp5,fp1
- fmul fp5,fp3
- fmul fp6,fp0
- fmul fp6,fp2
-
- * 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);
-
- fmove.l fpcr,d2
- fmove.l #$000000b0,fpcr
- move.l 4*4(a0),d0
- move.l d0,d1
- sub.l 4*4(a2),d0
- neg.l d0
- fmove.l d0,fp4 ;fp4 = t0
- sub.l 4*4(a1),d1
- neg.l d1
- fmove.l d1,fp5 ;fp5 = t1
- fmove fp4,fp6
- fmul fp3,fp6
- fmove fp5,fp7
- fmul fp1,fp7
- fsub fp6,fp7
- fmove.l fp7,_r_lstepx
- fmul fp2,fp4
- fmul fp0,fp5
- fsub fp4,fp5
- fmove.l fp5,_r_lstepy
- fmove.l d2,fpcr
-
- * 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);
-
- move.l 2*4(a0),d0
- move.l d0,d1
- sub.l 2*4(a2),d0
- neg.l d0
- fmove.l d0,fp4 ;fp4 = t0
- sub.l 2*4(a1),d1
- neg.l d1
- fmove.l d1,fp5 ;fp5 = t1
- fmove fp4,fp6
- fmul fp3,fp6
- fmove fp5,fp7
- fmul fp1,fp7
- fsub fp6,fp7
- fmove.l fp7,d2
- move.l d2,_r_sstepx
- fmul fp2,fp4
- fmul fp0,fp5
- fsub fp4,fp5
- fmove.l fp5,_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);
-
- move.l 3*4(a0),d0
- move.l d0,d1
- sub.l 3*4(a2),d0
- neg.l d0
- fmove.l d0,fp4 ;fp4 = t0
- sub.l 3*4(a1),d1
- neg.l d1
- fmove.l d1,fp5 ;fp5 = t1
- fmove fp4,fp6
- fmul fp3,fp6
- fmove fp5,fp7
- fmul fp1,fp7
- fsub fp6,fp7
- fmove.l fp7,d3
- move.l d3,_r_tstepx
- fmul fp2,fp4
- fmul fp0,fp5
- fsub fp4,fp5
- fmove.l fp5,_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);
-
- move.l 5*4(a0),d0
- move.l d0,d1
- sub.l 5*4(a2),d0
- neg.l d0
- fmove.l d0,fp4 ;fp4 = t0
- sub.l 5*4(a1),d1
- neg.l d1
- fmove.l d1,fp5 ;fp5 = t1
- fmove fp4,fp6
- fmul fp3,fp6
- fmove fp5,fp7
- fmul fp1,fp7
- fsub fp6,fp7
- fmove.l fp7,_r_zistepx
- fmul fp2,fp4
- fmul fp0,fp5
- fsub fp4,fp5
- fmove.l fp5,_r_zistepy
-
- * a_sstepxfrac = r_sstepx & 0xFFFF;
- * a_tstepxfrac = r_tstepx & 0xFFFF;
- * a_ststepxwhole = skinwidth * (r_tstepx >> 16) + (r_sstepx >> 16);
-
- move.l .skinwidth(sp),d0
- swap d3
- muls d3,d0
- clr d3
- swap d3
- move.l d2,d1
- swap d1
- ext.l d1
- add.l d1,d0
- and.l #$ffff,d2
- move.l d2,_a_sstepxfrac
- move.l d3,_a_tstepxfrac
- move.l d0,_a_ststepxwhole
- fmovem.x (sp)+,fp2-fp7
- movem.l (sp)+,d2/d3/a2
- rts
-
-
-
-
- ******************************************************************************
- *
- * void D_RasterizeAliasPolySmooth (void)
- *
- ******************************************************************************
- cnop 0,4
- _D_RasterizeAliasPolySmooth
-
- ***** stackframe
- rsreset
- .pdestx rs.l 1
- .pzx rs.l 1
- .aspanx rs.l 1
- .ptexx rs.l 1
- .sfracx rs.l 1
- .tfracx rs.l 1
- .lightx rs.l 1
- .zix rs.l 1
- .pdestb rs.l 1
- .pzb rs.l 1
- .aspanb rs.l 1
- .ptexb rs.l 1
- .sfracb rs.l 1
- .tfracb rs.l 1
- .lightb rs.l 1
- .zib rs.l 1
- .r_affine rs.l 1
- .height rs.l 1
- .initLH rs.l 1
- .initRH rs.l 1
- .savearea rs.l 11
- .intregs rs.l 11
- rs.l 1
-
- movem.l d2-d7/a2-a6,-(sp)
- sub #.intregs,sp
-
- * plefttop = pedgetable->pleftedgevert0;
- * prighttop = pedgetable->prightedgevert0;
- *
- * pleftbottom = pedgetable->pleftedgevert1;
- * prightbottom = pedgetable->prightedgevert1;
- *
- * initialleftheight = pleftbottom[1] - plefttop[1];
- * initialrightheight = prightbottom[1] - prighttop[1];
-
- move.l _pedgetable,a0
- move.l ETAB_PLEV0(a0),a6 ;a6 = plefttop
- move.l ETAB_PREV0(a0),a2 ;a2 = prighttop
- move.l ETAB_PLEV1(a0),a3 ;a3 = pleftbottom
- move.l ETAB_PREV1(a0),a4 ;a4 = prightbottom
- lea _r_affinetridesc,a5
- move.l 4(a3),d6
- move.l 4(a6),d7 ;d7 = plefttop[1]
- move.l d6,d2
- sub.l d7,d2
- move.l d2,.initLH(sp) ;initialleftheight
- move.l 4(a4),d3
- move.l 4(a2),d4
- move.l d3,d5
- sub.l d4,d5
- move.l d5,.initRH(sp) ;initialrightheight
- move.l R_SKINWIDTH(a5),d4
- move.l d4,.r_affine(sp)
- move.l d4,-(sp)
- bsr _D_PolysetCalcGradients
- addq #4,sp
- move.l d6,d3
- move.l (a3),d2
- move.l d7,d1
- move.l (a6),d0
- bsr _D_PolysetSetUpForLineScan
-
- * d_pedgespanpackage = a_spans;
- *
- * ystart = plefttop[1];
- * d_aspancount = plefttop[0] - prighttop[0];
- *
- * d_ptex = (byte *)r_affinetridesc.pskin + (plefttop[2] >> 16) +
- * (plefttop[3] >> 16) * r_affinetridesc.skinwidth;
- * d_sfrac = plefttop[2] & 0xFFFF;
- * d_tfrac = plefttop[3] & 0xFFFF;
- * d_pzbasestep = d_zwidth + ubasestep;
- * d_pzextrastep = d_pzbasestep + 1;
- * d_light = plefttop[4];
- * d_zi = plefttop[5];
- *
- * d_pdestbasestep = screenwidth + ubasestep;
- * d_pdestextrastep = d_pdestbasestep + 1;
- * d_pdest = (byte *)d_viewbuffer +
- * ystart * screenwidth + plefttop[0];
- * d_pz = d_pzbuffer + ystart * d_zwidth + plefttop[0];
-
- move.l _a_spans,_d_pedgespanpackage
- move.l (a6),d2
- sub.l (a2),d2
- move.l d2,_d_aspancount ;d_aspancount = plefttop[0] - ...
- move.l 2*4(a6),d0
- move.l 3*4(a6),d1
- move.l d0,d3 ;d3 = plefttop[2]
- move.l d1,d6 ;d6 = plefttop[3]
- swap d0
- swap d1
- and.l #$ffff,d0
- and.l #$ffff,d1
- mulu d4,d1
- add.l d0,d1
- add.l R_PSKIN(a5),d1
- move.l d1,_d_ptex ;d_ptex = ...
- and.l #$ffff,d3
- and.l #$ffff,d6
- move.l d3,_d_sfrac ;d_sfrac = plefttop[2]&$ffff
- move.l d6,_d_tfrac ;d_tfrac = plefttop[3]&$ffff
- move.l _d_zwidth,d0
- move.l d0,d3 ;d3 = d_zwidth
- move.l _ubasestep,d1
- move.l d1,.aspanb(sp)
- move.l d1,d5 ;d5 = ubasestep
- add.l d1,d0
- addq.l #1,d1
- move.l d1,_d_countextrastep
- move.l d1,.aspanx(sp)
- add.l d0,d0
- move.l d0,.pzb(sp) ;d_pzbasestep = d_zwidth + ubasestep
- addq.l #2,d0
- move.l d0,.pzx(sp) ;d_pzextrastep = d_pzbasestep + 1
- move.l 4*4(a6),_d_light ;d_light = plefttop[4]
- move.l 5*4(a6),_d_zi ;d_zi = plefttop[5]
- move.l _screenwidth,d0
- add.l d0,d1
- move.l d1,.pdestx(sp) ;d_pdestextrastep = ...
- subq.l #1,d1
- move.l d1,.pdestb(sp) ;d_pdestbasestep = screenwidth + ..
- mulu d7,d0 ;screenwidth * ystart
- move.l (a6),d6
- add.l d6,d0 ;+ plefttop[0]
- add.l _d_viewbuffer,d0
- move.l d0,_d_pdest ;d_pdest + d_viewbuffer + ...
- mulu d7,d3 ;d_zwidth * ystart
- add.l d6,d3 ;+ plefttop[0]
- add.l d3,d3
- add.l _d_pzbuffer,d3
- move.l d3,_d_pz ;d_pz = d_pzbuffer + ...
-
- * if (ubasestep < 0)
- * working_lstepx = r_lstepx - 1;
- * else
- * working_lstepx = r_lstepx;
- *
- * d_countextrastep = ubasestep + 1;
- * d_ptexbasestep = ((r_sstepy + r_sstepx * ubasestep) >> 16) +
- * ((r_tstepy + r_tstepx * ubasestep) >> 16) *
- * r_affinetridesc.skinwidth;
- * d_sfracbasestep = (r_sstepy + r_sstepx * ubasestep) & 0xFFFF;
- * d_tfracbasestep = (r_tstepy + r_tstepx * ubasestep) & 0xFFFF;
- * d_lightbasestep = r_lstepy + working_lstepx * ubasestep;
- * d_zibasestep = r_zistepy + r_zistepx * ubasestep;
- *
- * d_ptexextrastep = ((r_sstepy + r_sstepx * d_countextrastep) >> 16) +
- * ((r_tstepy + r_tstepx * d_countextrastep) >> 16) *
- * r_affinetridesc.skinwidth;
- * d_sfracextrastep = (r_sstepy + r_sstepx*d_countextrastep) & 0xFFFF;
- * d_tfracextrastep = (r_tstepy + r_tstepx*d_countextrastep) & 0xFFFF;
- * d_lightextrastep = d_lightbasestep + working_lstepx;
- * d_ziextrastep = d_zibasestep + r_zistepx;
- *
-
- move.l _r_sstepy,a0
- move.l _r_sstepx,d1
- move.l _r_tstepy,a1
- move.l _r_tstepx,d6
- move.l d1,d2
- muls.l d5,d2
- move.l d6,d7
- muls.l d5,d7
- add.l a0,d2
- add.l a1,d7
- move.l d2,d0
- move.l d7,d3
- and.l #$ffff,d0
- move.l d0,.sfracb(sp)
- and.l #$ffff,d3
- swap d3
- move.l d3,.tfracb(sp)
- swap d3
- add.l d1,d0
- add.l d6,d3
- and.l #$ffff,d0
- move.l d0,.sfracx(sp)
- and.l #$ffff,d3
- swap d3
- move.l d3,.tfracx(sp)
- swap d3
- move.l d2,d0
- move.l d7,d3
- swap d2
- ext.l d2
- swap d7
- muls d4,d7
- add.l d2,d7
- move.l d7,.ptexb(sp)
- add.l d1,d0
- add.l d6,d3
- swap d0
- ext.l d0
- swap d3
- muls d4,d3
- add.l d0,d3
- move.l d3,.ptexx(sp)
- move.l _r_lstepy,d0
- move.l _r_lstepx,d1
- tst.l d5 ;(if ubasestep < 0)
- bge.b .ge
- subq.l #1,d1 ;working_lstepx = r_lstepx - 1
- .ge
- move.l d1,d2
- muls.l d5,d1
- add.l d0,d1
- move.l d1,.lightb(sp)
- add.l d2,d1
- move.l d1,.lightx(sp)
- move.l _r_zistepy,d0
- move.l _r_zistepx,d1
- move.l d1,d2
- muls.l d5,d1
- add.l d0,d1
- move.l d1,.zib(sp)
- add.l d2,d1
- move.l d1,.zix(sp)
-
-
-
- ***** D_PolysetScanLeftEdge (inlined)
-
-
- movem.l d2-d7/a2-a6,.savearea(sp)
- move.l _d_pedgespanpackage,a0
- move.l _d_pdest,a1
- move.l _d_pz,a2
- move.l _d_aspancount,d6
- move.l _d_ptex,a3
- move.l _d_sfrac,d4
- move.l _d_tfrac,d5
- swap d5
- move.l _d_light,a5
- move.l _d_zi,a4
- move.l _errorterm,d2
- move.l _erroradjustup,d1
- move.l _erroradjustdown,d0
- move.l .initLH(sp),d7
- subq #1,d7
- .loopA
-
- * 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)
-
- move.l a1,(a0)+
- move.l a2,(a0)+
- move.l d6,(a0)+
- move.l a3,(a0)+
- move.l d4,(a0)+
- swap d5
- clr (a0)+
- move d5,(a0)+
- swap d5
- move.l a5,(a0)+
- move.l a4,(a0)+
- add.l d1,d2
- blt.b .elseA
-
- * 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;
-
- lea .pdestx(sp),a6
- add.l (a6)+,a1
- add.l (a6)+,a2
- add.l (a6)+,d6
- add.l (a6)+,a3
- add.l (a6)+,d4
- swap d4
- add d4,a3
- clr d4
- swap d4
- add.l (a6)+,d5
- bcc.b .contA
- add.l .r_affine(sp),a3
- .contA
- add.l (a6)+,a5
- add.l (a6)+,a4
- sub.l d0,d2
- bra.b .nextA
- .elseA
-
- * 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;
-
- lea .pdestb(sp),a6
- add.l (a6)+,a1
- add.l (a6)+,a2
- add.l (a6)+,d6
- add.l (a6)+,a3
- add.l (a6)+,d4
- swap d4
- add d4,a3
- clr d4
- swap d4
- add.l (a6)+,d5
- bcc.b .cont2A
- add.l .r_affine(sp),a3
- .cont2A
- add.l (a6)+,a5
- add.l (a6)+,a4
- .nextA
- dbra d7,.loopA
- move.l a0,_d_pedgespanpackage
- movem.l .savearea(sp),d2-d7/a2-a6
-
- ****** End of D_PolysetScanLeftEdge
-
-
-
-
- * if (pedgetable->numleftedges == 2)
- * {
- * int height;
- *
- * plefttop = pleftbottom;
- * pleftbottom = pedgetable->pleftedgevert2;
- *
- * D_PolysetSetUpForLineScan(plefttop[0], plefttop[1],
- * pleftbottom[0], pleftbottom[1]);
- *
- * height = pleftbottom[1] - plefttop[1];
- *
- *// TODO: make this a function; modularize this function in general
- *
- * ystart = plefttop[1];
- * d_aspancount = plefttop[0] - prighttop[0];
- * d_ptex = (byte *)r_affinetridesc.pskin + (plefttop[2] >> 16) +
- * (plefttop[3] >> 16) * r_affinetridesc.skinwidth;
- * d_sfrac = 0;
- * d_tfrac = 0;
- * d_light = plefttop[4];
- * d_zi = plefttop[5];
- *
- * d_pdestbasestep = screenwidth + ubasestep;
- * d_pdestextrastep = d_pdestbasestep + 1;
- * d_pdest = (byte *)d_viewbuffer + ystart * screenwidth + plefttop[0];
- * d_pzbasestep = d_zwidth + ubasestep;
- * d_pzextrastep = d_pzbasestep + 1;
- * d_pz = d_pzbuffer + ystart * d_zwidth + plefttop[0];
- *
- * if (ubasestep < 0)
- * working_lstepx = r_lstepx - 1;
- * else
- * working_lstepx = r_lstepx;
- *
- * d_countextrastep = ubasestep + 1;
- * d_ptexbasestep = ((r_sstepy + r_sstepx * ubasestep) >> 16) +
- * ((r_tstepy + r_tstepx * ubasestep) >> 16) *
- * r_affinetridesc.skinwidth;
- * d_sfracbasestep = (r_sstepy + r_sstepx * ubasestep) & 0xFFFF;
- * d_tfracbasestep = (r_tstepy + r_tstepx * ubasestep) & 0xFFFF;
- * d_lightbasestep = r_lstepy + working_lstepx * ubasestep;
- * d_zibasestep = r_zistepy + r_zistepx * ubasestep;
- *
- * d_ptexextrastep = ((r_sstepy + r_sstepx * d_countextrastep) >> 16) +
- * ((r_tstepy + r_tstepx * d_countextrastep) >> 16) *
- * r_affinetridesc.skinwidth;
- * d_sfracextrastep = (r_sstepy+r_sstepx*d_countextrastep) & 0xFFFF;
- * d_tfracextrastep = (r_tstepy+r_tstepx*d_countextrastep) & 0xFFFF;
- * d_lightextrastep = d_lightbasestep + working_lstepx;
- * d_ziextrastep = d_zibasestep + r_zistepx;
-
-
- move.l _pedgetable,a0
- cmp.l #2,ETAB_NUMLEFTEDGES(a0)
- bne.b .cont
- move.l a3,a6
- move.l ETAB_PLEV2(a0),a3
- move.l 4(a3),d5
- move.l d5,d3
- move.l (a3),d2
- move.l 4(a6),d7
- move.l d7,d1
- move.l (a6),d6
- move.l d6,d0
- bsr _D_PolysetSetUpForLineScan
- sub.l d7,d5
- move.l d5,.height(sp)
- sub.l (a2),d6
- move.l d6,_d_aspancount ;d_aspancount = plefttop[0] - ...
-
- move.l 2*4(a6),d0
- move.l 3*4(a6),d1
- move.l d0,d3 ;d3 = plefttop[2]
- move.l d1,d6 ;d6 = plefttop[3]
- swap d0
- swap d1
- and.l #$ffff,d0
- and.l #$ffff,d1
- mulu d4,d1
- add.l d0,d1
- add.l R_PSKIN(a5),d1
- move.l d1,_d_ptex ;d_ptex = ...
- clr.l _d_sfrac
- clr.l _d_tfrac
- move.l _d_zwidth,d0
- move.l d0,d3 ;d3 = d_zwidth
- move.l _ubasestep,d1
- move.l d1,.aspanb(sp)
- move.l d1,d5 ;d5 = ubasestep
- add.l d1,d0
- addq.l #1,d1
- move.l d1,_d_countextrastep
- move.l d1,.aspanx(sp)
- add.l d0,d0
- move.l d0,.pzb(sp) ;d_pzbasestep = d_zwidth + ubasestep
- addq.l #2,d0
- move.l d0,.pzx(sp) ;d_pzextrastep = d_pzbasestep + 1
- move.l 4*4(a6),_d_light ;d_light = plefttop[4]
- move.l 5*4(a6),_d_zi ;d_zi = plefttop[5]
- move.l _screenwidth,d0
- add.l d0,d1
- move.l d1,.pdestx(sp) ;d_pdestextrastep = ...
- subq.l #1,d1
- move.l d1,.pdestb(sp) ;d_pdestbasestep = screenwidth + ..
- mulu d7,d0 ;screenwidth * ystart
- move.l (a6),d6
- add.l d6,d0 ;+ plefttop[0]
- add.l _d_viewbuffer,d0
- move.l d0,_d_pdest ;d_pdest + d_viewbuffer + ...
- mulu d7,d3 ;d_zwidth * ystart
- add.l d6,d3 ;+ plefttop[0]
- add.l d3,d3
- add.l _d_pzbuffer,d3
- move.l d3,_d_pz ;d_pz = d_pzbuffer + ...
-
- move.l _r_sstepy,a0
- move.l _r_sstepx,d1
- move.l _r_tstepy,a1
- move.l _r_tstepx,d6
- move.l d1,d2
- muls.l d5,d2
- move.l d6,d7
- muls.l d5,d7
- add.l a0,d2
- add.l a1,d7
- move.l d2,d0
- move.l d7,d3
- and.l #$ffff,d0
- move.l d0,.sfracb(sp)
- and.l #$ffff,d3
- swap d3
- move.l d3,.tfracb(sp)
- swap d3
- add.l d1,d0
- add.l d6,d3
- and.l #$ffff,d0
- move.l d0,.sfracx(sp)
- and.l #$ffff,d3
- swap d3
- move.l d3,.tfracx(sp)
- swap d3
- move.l d2,d0
- move.l d7,d3
- swap d2
- ext.l d2
- swap d7
- muls d4,d7
- add.l d2,d7
- move.l d7,.ptexb(sp)
- add.l d1,d0
- add.l d6,d3
- swap d0
- ext.l d0
- swap d3
- muls d4,d3
- add.l d0,d3
- move.l d3,.ptexx(sp)
- move.l _r_lstepy,d0
- move.l _r_lstepx,d1
- tst.l d5 ;(if ubasestep < 0)
- bge.b .ge2
- subq.l #1,d1 ;working_lstepx = r_lstepx - 1
- .ge2
- move.l d1,d2
- muls.l d5,d1
- add.l d0,d1
- move.l d1,.lightb(sp)
- add.l d2,d1
- move.l d1,.lightx(sp)
- move.l _r_zistepy,d0
- move.l _r_zistepx,d1
- move.l d1,d2
- muls.l d5,d1
- add.l d0,d1
- move.l d1,.zib(sp)
- add.l d2,d1
- move.l d1,.zix(sp)
-
-
- ***** D_PolysetScanLeftEdge (inlined)
-
-
- movem.l d2-d7/a2-a6,.savearea(sp)
- move.l _d_pedgespanpackage,a0
- move.l _d_pdest,a1
- move.l _d_pz,a2
- move.l _d_aspancount,d6
- move.l _d_ptex,a3
- move.l _d_sfrac,d4
- move.l _d_tfrac,d5
- swap d5
- move.l _d_light,a5
- move.l _d_zi,a4
- move.l _errorterm,d2
- move.l _erroradjustup,d1
- move.l _erroradjustdown,d0
- move.l .height(sp),d7
- subq #1,d7
- .loopB
-
- * 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)
-
- move.l a1,(a0)+
- move.l a2,(a0)+
- move.l d6,(a0)+
- move.l a3,(a0)+
- move.l d4,(a0)+
- swap d5
- clr (a0)+
- move d5,(a0)+
- swap d5
- move.l a5,(a0)+
- move.l a4,(a0)+
- add.l d1,d2
- blt.b .elseB
-
- * 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;
-
- lea .pdestx(sp),a6
- add.l (a6)+,a1
- add.l (a6)+,a2
- add.l (a6)+,d6
- add.l (a6)+,a3
- add.l (a6)+,d4
- swap d4
- add d4,a3
- clr d4
- swap d4
- add.l (a6)+,d5
- bcc.b .contB
- add.l .r_affine(sp),a3
- .contB
- add.l (a6)+,a5
- add.l (a6)+,a4
- sub.l d0,d2
- bra.b .nextB
- .elseB
-
- * 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;
-
- lea .pdestb(sp),a6
- add.l (a6)+,a1
- add.l (a6)+,a2
- add.l (a6)+,d6
- add.l (a6)+,a3
- add.l (a6)+,d4
- swap d4
- add d4,a3
- clr d4
- swap d4
- add.l (a6)+,d5
- bcc.b .cont2B
- add.l .r_affine(sp),a3
- .cont2B
- add.l (a6)+,a5
- add.l (a6)+,a4
- .nextB
- dbra d7,.loopB
- move.l a0,_d_pedgespanpackage
- movem.l .savearea(sp),d2-d7/a2-a6
-
-
- .cont
-
- * d_pedgespanpackage = a_spans;
- *
- * D_PolysetSetUpForLineScan(prighttop[0], prighttop[1],
- * prightbottom[0], prightbottom[1]);
- * d_aspancount = 0;
- * d_countextrastep = ubasestep + 1;
- * originalcount = a_spans[initialrightheight].count;
- * a_spans[initialrightheight].count = -999999; // mark end of the spanpackages
- * D_PolysetDrawSpans8 (a_spans);
-
- move.l _a_spans,_d_pedgespanpackage
- move.l 4(a4),d3
- move.l (a4),d2
- move.l 4(a2),d1
- move.l (a2),d0
- bsr _D_PolysetSetUpForLineScan
- clr.l _d_aspancount
- move.l _ubasestep,d0
- addq.l #1,d0
- move.l d0,_d_countextrastep
- move.l _a_spans,a3
- move.l .initRH(sp),d6
- move.l d6,d0
- asl.l #PSPANP_SIZEOF_EXP,d0
- move.l PSPANP_COUNT(a3,d0.l),d7
- move.l #-999999,PSPANP_COUNT(a3,d0.l)
- move.l a3,-(sp)
- bsr _D_PolysetDrawSpans8
- addq #4,sp
-
- * if (pedgetable->numrightedges == 2)
- * {
- * int height;
- * spanpackage_t *pstart;
- *
- * pstart = a_spans + initialrightheight;
- * pstart->count = originalcount;
- *
- * d_aspancount = prightbottom[0] - prighttop[0];
- *
- * prighttop = prightbottom;
- * prightbottom = pedgetable->prightedgevert2;
- *
- * height = prightbottom[1] - prighttop[1];
- *
- * D_PolysetSetUpForLineScan(prighttop[0], prighttop[1],
- * prightbottom[0], prightbottom[1]);
- *
- * d_countextrastep = ubasestep + 1;
- * a_spans[initialrightheight + height].count = -999999;
- * // mark end of the spanpackages
- * D_PolysetDrawSpans8 (pstart);
-
- move.l _pedgetable,a0
- cmp.l #2,ETAB_NUMRIGHTEDGES(a0)
- bne.b .exit
- move.l a3,a6
- move.l d6,d0
- asl.l #PSPANP_SIZEOF_EXP,d0
- add.l d0,a6
- move.l d7,PSPANP_COUNT(a6)
- move.l (a4),d0
- sub.l (a2),d0
- move.l d0,_d_aspancount
- move.l a4,a2
- move.l ETAB_PREV2(a0),a4
- move.l 4(a4),d5
- move.l d5,d3
- move.l 4(a2),d0
- sub.l d0,d5
- move.l (a4),d2
- move.l d0,d1
- move.l (a2),d0
- bsr _D_PolysetSetUpForLineScan
- move.l _ubasestep,d4
- addq.l #1,d4
- move.l d4,_d_countextrastep
- add.l d6,d5
- asl.l #PSPANP_SIZEOF_EXP,d5
- move.l #-999999,PSPANP_COUNT(a3,d5.l)
- move.l a6,-(sp)
- bsr _D_PolysetDrawSpans8
- addq #4,sp
- .exit
- add #.intregs,sp
- movem.l (sp)+,d2-d7/a2-a6
- rts
-
-
-
-
-
-
- ******************************************************************************
- *
- * void D_DrawNonSubdiv (void)
- *
- ******************************************************************************
- cnop 0,4
- _D_DrawNonSubdiv
-
- movem.l d2-d7/a2-a6,-(sp)
-
- * pfv = r_affinetridesc.pfinalverts;
- * ptri = r_affinetridesc.ptriangles;
- * lnumtriangles = r_affinetridesc.numtriangles;
-
- lea _r_affinetridesc,a0
- move.l R_PFINALVERTS(a0),a2 ;pfv = f_affinetridesc.pfinalverts
- move.l R_PTRIANGLES(a0),a3 ;ptri = f_affinetridesc.ptriangles
- move.l R_NUMTRIANGLES(a0),d3 ;lnumtriangles = r_affine...
- subq #1,d3
- .loop
-
- * 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]);
-
- move.l MT_VERTINDEX+0*4(a3),d0
- asl.l #FV_SIZEOF_EXP,d0
- lea 0(a2,d0.l),a0 ;a0 = index0
- move.l MT_VERTINDEX+1*4(a3),d0
- asl.l #FV_SIZEOF_EXP,d0
- lea 0(a2,d0.l),a1 ;a1 = index1
- move.l MT_VERTINDEX+2*4(a3),d0
- asl.l #FV_SIZEOF_EXP,d0
- lea 0(a2,d0.l),a4 ;a2 = index2
- movem.l d3/a3,-(sp)
- move.l (a0)+,d0 ;d0 = index0->v[0]
- move.l (a0)+,d1 ;d1 = index0->v[1]
- move.l (a1)+,a6 ;d2 = index1->v[0]
- move.l (a1)+,d2 ;a6 = index1->v[1]
- move.l (a4)+,d4 ;d4 = index2->v[0]
- move.l (a4)+,d5 ;d5 = index2->v[1]
- move.l d0,d6
- move.l d1,d7
- sub.l d4,d6 ;index0->v[0]-index2->v[0]
- sub.l d2,d7 ;index0->v[1]-index1->v[1]
- move.l d6,d3
- muls.l d7,d3
- move.l d0,d6
- move.l d1,d7
- sub.l a6,d6 ;index0->v[0]-index1->v[0]
- sub.l d5,d7 ;index0->v[1]-index2->v[1]
- muls.l d6,d7
-
- * if (d_xdenom >= 0)
- * {
- * continue;
- * }
-
- sub.l d7,d3
- bge.w .next ;if (d_xdenom >= 0)
- move.l d3,_d_xdenom ;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];
-
- lea _r_p1,a5
- move.l a6,(a5)+ ;r_p1[0] = index1->v[0]
- move.l d2,(a5)+ ;r_p1[1] = index1->v[1]
- move.l (a1)+,(a5)+ ;...
- move.l (a1)+,(a5)+
- move.l (a1)+,(a5)+
- move.l (a1)+,(a5)+
- lea _r_p0,a6
- move.l d0,(a6)+ ;r_p0[0] = index0->v[0]
- move.l d1,(a6)+ ;...
- move.l (a0)+,(a6)+
- move.l (a0)+,(a6)+
- move.l (a0)+,(a6)+
- move.l (a0)+,(a6)+
- move.l MT_FACESFRONT(a3),d6
- lea _r_p2,a3 ;r_p2[0] = index2->v[0]
- move.l d4,(a3)+ ;...
- move.l d5,(a3)+
- move.l (a4)+,(a3)+
- move.l (a4)+,(a3)+
- move.l (a4)+,(a3)+
- move.l (a4)+,(a3)+
-
- * 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;
- * }
-
- tst.l d6 ;if (!ptri->facesfront)
- bne.b .cont
- move.l _r_affinetridesc+R_SEAMFIXUP16,d3
- move.l (a0),d0 ;if (index0->flags & ALIAS_ONSEAM)
- and.l #ALIAS_ONSEAM,d0
- beq.b .1
- add.l d3,-16(a6) ;r_p0[2] += r_affinetridesc.se...
- .1
- move.l (a1),d0
- and.l #ALIAS_ONSEAM,d0
- beq.b .2
- add.l d3,-16(a5)
- .2
- move.l (a4),d0
- and.l #ALIAS_ONSEAM,d0
- beq.b .cont
- add.l d3,-16(a3)
- .cont
-
- ****** D_PolysetSetEdgeTable (inlined)
-
- cmp.l d2,d1
- blt.b .lt1
- beq.b .eq1
- .gt1
- moveq #EDGETABLE_SIZEOF,d0
- cmp.l d5,d1
- beq.b .eq2
- cmp.l d5,d2
- beq.b .eq3
- cmp.l d5,d1
- ble.b .skip
- add.l #2*EDGETABLE_SIZEOF,d0
- .skip
- cmp.l d5,d2
- ble.b .skip2
- add.l #4*EDGETABLE_SIZEOF,d0
- .skip2
- add.l #_edgetables,d0
- move.l d0,_pedgetable
- bra.b .done
- .eq2
- move.l #_edgetables+8*EDGETABLE_SIZEOF,_pedgetable
- bra.b .done
- .eq3
- move.l #_edgetables+10*EDGETABLE_SIZEOF,_pedgetable
- bra.b .done
- .eq1
- cmp.l d5,d1
- bge.b .ge
- move.l #_edgetables+2*EDGETABLE_SIZEOF,_pedgetable
- bra.b .done
- .ge
- move.l #_edgetables+5*EDGETABLE_SIZEOF,_pedgetable
- bra.b .done
- .lt1
- moveq #0,d0
- cmp.l d5,d1
- beq.b .eq4
- cmp.l d5,d2
- beq.b .eq5
- cmp.l d5,d1
- ble.b .skip3
- add.l #2*EDGETABLE_SIZEOF,d0
- .skip3
- cmp.l d5,d2
- ble.b .skip4
- add.l #4*EDGETABLE_SIZEOF,d0
- .skip4
- add.l #_edgetables,d0
- move.l d0,_pedgetable
- bra.b .done
- .eq4
- move.l #_edgetables+9*EDGETABLE_SIZEOF,_pedgetable
- bra.b .done
- .eq5
- move.l #_edgetables+11*EDGETABLE_SIZEOF,_pedgetable
- .done
-
- ****** end of D_PolysetSetEdgeTable
-
- bsr _D_RasterizeAliasPolySmooth
- .next
- movem.l (sp)+,d3/a3
- lea MT_SIZEOF(a3),a3 ;ptri++
- dbra d3,.loop
- movem.l (sp)+,d2-d7/a2-a6
- rts
-
- _adivtab
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,1
- dc.l -5,1,-6,1,-7,2,-1,2,-3,3,0
- dc.l 3,-3,5,0,7,-1,$F,0,0,0,-$F
- dc.l 0,-$8,1,-5,0,-4,1,-3,0,-3,3
- dc.l -3,6,-2,1,-2,3,-2,5,-2,7,-2
- dc.l $9,-2,$B,-2,$D,-1,0,-1,1,0,-$E
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,1
- dc.l -5,1,-6,2,0,2,-2,2,-4,3,-2
- dc.l 4,-2,7,0,$E,0,0,0,-$E,0,-7
- dc.l 0,-5,1,-4,2,-3,1,-3,4,-2,0
- dc.l -2,2,-2,4,-2,6,-2,$8,-2,$A,-2
- dc.l $C,-1,0,-1,1,-1,2,0,-$D,0,-$D
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,1
- dc.l -5,1,-6,2,-1,2,-3,3,-1,4,-1
- dc.l 6,-1,$D,0,0,0,-$D,0,-7,1,-5
- dc.l 2,-4,3,-3,2,-3,5,-2,1,-2,3
- dc.l -2,5,-2,7,-2,$9,-2,$B,-1,0,-1
- dc.l 1,-1,2,-1,3,0,-$C,0,-$C,0,-$C
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,1
- dc.l -5,2,0,2,-2,3,0,4,0,6,0
- dc.l $C,0,0,0,-$C,0,-6,0,-4,0,-3
- dc.l 0,-3,3,-2,0,-2,2,-2,4,-2,6
- dc.l -2,$8,-2,$A,-1,0,-1,1,-1,2,-1
- dc.l 3,-1,4,0,-$B,0,-$B,0,-$B,0,-$B
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,1
- dc.l -5,2,-1,2,-3,3,-2,5,-1,$B,0
- dc.l 0,0,-$B,0,-6,1,-4,1,-3,1,-3
- dc.l 4,-2,1,-2,3,-2,5,-2,7,-2,$9
- dc.l -1,0,-1,1,-1,2,-1,3,-1,4,-1
- dc.l 5,0,-$A,0,-$A,0,-$A,0,-$A,0,-$A
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,2
- dc.l 0,2,-2,3,-1,5,0,$A,0,0,0
- dc.l -$A,0,-5,0,-4,2,-3,2,-2,0,-2
- dc.l 2,-2,4,-2,6,-2,$8,-1,0,-1,1
- dc.l -1,2,-1,3,-1,4,-1,5,-1,6,0
- dc.l -$9,0,-$9,0,-$9,0,-$9,0,-$9,0,-$9
- dc.l 1,0,1,-1,1,-2,1,-3,1,-4,2
- dc.l -1,3,0,4,-1,$9,0,0,0,-$9,0
- dc.l -5,1,-3,0,-3,3,-2,1,-2,3,-2
- dc.l 5,-2,7,-1,0,-1,1,-1,2,-1,3
- dc.l -1,4,-1,5,-1,6,-1,7,0,-$8,0
- dc.l -$8,0,-$8,0,-$8,0,-$8,0,-$8,0,-$8
- dc.l 1,0,1,-1,1,-2,1,-3,2,0,2
- dc.l -2,4,0,$8,0,0,0,-$8,0,-4,0
- dc.l -3,1,-2,0,-2,2,-2,4,-2,6,-1
- dc.l 0,-1,1,-1,2,-1,3,-1,4,-1,5
- dc.l -1,6,-1,7,-1,$8,0,-7,0,-7,0
- dc.l -7,0,-7,0,-7,0,-7,0,-7,0,-7
- dc.l 1,0,1,-1,1,-2,1,-3,2,-1,3
- dc.l -1,7,0,0,0,-7,0,-4,1,-3,2
- dc.l -2,1,-2,3,-2,5,-1,0,-1,1,-1
- dc.l 2,-1,3,-1,4,-1,5,-1,6,-1,7
- dc.l -1,$8,-1,$9,0,-6,0,-6,0,-6,0
- dc.l -6,0,-6,0,-6,0,-6,0,-6,0,-6
- dc.l 1,0,1,-1,1,-2,2,0,3,0,6
- dc.l 0,0,0,-6,0,-3,0,-2,0,-2,2
- dc.l -2,4,-1,0,-1,1,-1,2,-1,3,-1
- dc.l 4,-1,5,-1,6,-1,7,-1,$8,-1,$9
- dc.l -1,$A,0,-5,0,-5,0,-5,0,-5,0
- dc.l -5,0,-5,0,-5,0,-5,0,-5,0,-5
- dc.l 1,0,1,-1,1,-2,2,-1,5,0,0
- dc.l 0,-5,0,-3,1,-2,1,-2,3,-1,0
- dc.l -1,1,-1,2,-1,3,-1,4,-1,5,-1
- dc.l 6,-1,7,-1,$8,-1,$9,-1,$A,-1,$B
- dc.l 0,-4,0,-4,0,-4,0,-4,0,-4,0
- dc.l -4,0,-4,0,-4,0,-4,0,-4,0,-4
- dc.l 1,0,1,-1,2,0,4,0,0,0,-4
- dc.l 0,-2,0,-2,2,-1,0,-1,1,-1,2
- dc.l -1,3,-1,4,-1,5,-1,6,-1,7,-1
- dc.l $8,-1,$9,-1,$A,-1,$B,-1,$C,0,-3
- dc.l 0,-3,0,-3,0,-3,0,-3,0,-3,0
- dc.l -3,0,-3,0,-3,0,-3,0,-3,0,-3
- dc.l 1,0,1,-1,3,0,0,0,-3,0,-2
- dc.l 1,-1,0,-1,1,-1,2,-1,3,-1,4
- dc.l -1,5,-1,6,-1,7,-1,$8,-1,$9,-1
- dc.l $A,-1,$B,-1,$C,-1,$D,0,-2,0,-2
- dc.l 0,-2,0,-2,0,-2,0,-2,0,-2,0
- dc.l -2,0,-2,0,-2,0,-2,0,-2,0,-2
- dc.l 1,0,2,0,0,0,-2,0,-1,0,-1
- dc.l 1,-1,2,-1,3,-1,4,-1,5,-1,6
- dc.l -1,7,-1,$8,-1,$9,-1,$A,-1,$B,-1
- dc.l $C,-1,$D,-1,$E,0,-1,0,-1,0,-1
- dc.l 0,-1,0,-1,0,-1,0,-1,0,-1,0
- dc.l -1,0,-1,0,-1,0,-1,0,-1,0,-1
- dc.l 1,0,0,0,-1,0,-1,1,-1,2,-1
- dc.l 3,-1,4,-1,5,-1,6,-1,7,-1,$8
- dc.l -1,$9,-1,$A,-1,$B,-1,$C,-1,$D,-1
- dc.l $E,-1,$F,0,0,0,0,0,0,0,0
- dc.l 0,0,0,0,0,0,0,0,0,0,0
- dc.l 0,0,0,0,0,0,0,0,0,0,0
- dc.l 0,0,0,0,0,0,0,0,0,0,0
- dc.l 0,0,0,0,0,0,0,0,0,0,0
- dc.l 0,0,0,0,0,0,0,0,0,0,0
- dc.l 0,-1,-$E,-1,-$D,-1,-$C,-1,-$B,-1,-$A
- dc.l -1,-$9,-1,-$8,-1,-7,-1,-6,-1,-5,-1
- dc.l -4,-1,-3,-1,-2,-1,-1,-1,0,0,0
- dc.l 1,0,0,1,0,1,0,1,0,1,0
- dc.l 1,0,1,0,1,0,1,0,1,0,1
- dc.l 0,1,0,1,0,1,0,1,0,1,-1
- dc.l -$D,-1,-$C,-1,-$B,-1,-$A,-1,-$9,-1,-$8
- dc.l -1,-7,-1,-6,-1,-5,-1,-4,-1,-3,-1
- dc.l -2,-1,-1,-1,0,-2,0,0,0,2,0
- dc.l 1,0,0,2,0,2,0,2,0,2,0
- dc.l 2,0,2,0,2,0,2,0,2,0,2
- dc.l 0,2,0,2,0,2,0,2,-1,-$C,-1
- dc.l -$B,-1,-$A,-1,-$9,-1,-$8,-1,-7,-1,-6
- dc.l -1,-5,-1,-4,-1,-3,-1,-2,-1,-1,-1
- dc.l 0,-2,-1,-3,0,0,0,3,0,1,1
- dc.l 1,0,0,3,0,3,0,3,0,3,0
- dc.l 3,0,3,0,3,0,3,0,3,0,3
- dc.l 0,3,0,3,0,3,-1,-$B,-1,-$A,-1
- dc.l -$9,-1,-$8,-1,-7,-1,-6,-1,-5,-1,-4
- dc.l -1,-3,-1,-2,-1,-1,-1,0,-2,-2,-2
- dc.l 0,-4,0,0,0,4,0,2,0,1,1
- dc.l 1,0,0,4,0,4,0,4,0,4,0
- dc.l 4,0,4,0,4,0,4,0,4,0,4
- dc.l 0,4,0,4,-1,-$A,-1,-$9,-1,-$8,-1
- dc.l -7,-1,-6,-1,-5,-1,-4,-1,-3,-1,-2
- dc.l -1,-1,-1,0,-2,-3,-2,-1,-3,-1,-5
- dc.l 0,0,0,5,0,2,1,1,2,1,1
- dc.l 1,0,0,5,0,5,0,5,0,5,0
- dc.l 5,0,5,0,5,0,5,0,5,0,5
- dc.l 0,5,-1,-$9,-1,-$8,-1,-7,-1,-6,-1
- dc.l -5,-1,-4,-1,-3,-1,-2,-1,-1,-1,0
- dc.l -2,-4,-2,-2,-2,0,-3,0,-6,0,0
- dc.l 0,6,0,3,0,2,0,1,2,1,1
- dc.l 1,0,0,6,0,6,0,6,0,6,0
- dc.l 6,0,6,0,6,0,6,0,6,0,6
- dc.l -1,-$8,-1,-7,-1,-6,-1,-5,-1,-4,-1
- dc.l -3,-1,-2,-1,-1,-1,0,-2,-5,-2,-3
- dc.l -2,-1,-3,-2,-4,-1,-7,0,0,0,7
- dc.l 0,3,1,2,1,1,3,1,2,1,1
- dc.l 1,0,0,7,0,7,0,7,0,7,0
- dc.l 7,0,7,0,7,0,7,0,7,-1,-7
- dc.l -1,-6,-1,-5,-1,-4,-1,-3,-1,-2,-1
- dc.l -1,-1,0,-2,-6,-2,-4,-2,-2,-2,0
- dc.l -3,-1,-4,0,-$8,0,0,0,$8,0,4
- dc.l 0,2,2,2,0,1,3,1,2,1,1
- dc.l 1,0,0,$8,0,$8,0,$8,0,$8,0
- dc.l $8,0,$8,0,$8,0,$8,-1,-6,-1,-5
- dc.l -1,-4,-1,-3,-1,-2,-1,-1,-1,0,-2
- dc.l -7,-2,-5,-2,-3,-2,-1,-3,-3,-3,0
- dc.l -5,-1,-$9,0,0,0,$9,0,4,1,3
- dc.l 0,2,1,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$9,0,$9,0,$9,0,$9,0
- dc.l $9,0,$9,0,$9,-1,-5,-1,-4,-1,-3
- dc.l -1,-2,-1,-1,-1,0,-2,-$8,-2,-6,-2
- dc.l -4,-2,-2,-2,0,-3,-2,-4,-2,-5,0
- dc.l -$A,0,0,0,$A,0,5,0,3,1,2
- dc.l 2,2,0,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$A,0,$A,0,$A,0,$A,0
- dc.l $A,0,$A,-1,-4,-1,-3,-1,-2,-1,-1
- dc.l -1,0,-2,-$9,-2,-7,-2,-5,-2,-3,-2
- dc.l -1,-3,-4,-3,-1,-4,-1,-6,-1,-$B,0
- dc.l 0,0,$B,0,5,1,3,2,2,3,2
- dc.l 1,1,5,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$B,0,$B,0,$B,0,$B,0
- dc.l $B,-1,-3,-1,-2,-1,-1,-1,0,-2,-$A
- dc.l -2,-$8,-2,-6,-2,-4,-2,-2,-2,0,-3
- dc.l -3,-3,0,-4,0,-6,0,-$C,0,0,0
- dc.l $C,0,6,0,4,0,3,0,2,2,2
- dc.l 0,1,5,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$C,0,$C,0,$C,0,$C,-1
- dc.l -2,-1,-1,-1,0,-2,-$B,-2,-$9,-2,-7
- dc.l -2,-5,-2,-3,-2,-1,-3,-5,-3,-2,-4
- dc.l -3,-5,-2,-7,-1,-$D,0,0,0,$D,0
- dc.l 6,1,4,1,3,1,2,3,2,1,1
- dc.l 6,1,5,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$D,0,$D,0,$D,-1,-1,-1
- dc.l 0,-2,-$C,-2,-$A,-2,-$8,-2,-6,-2,-4
- dc.l -2,-2,-2,0,-3,-4,-3,-1,-4,-2,-5
- dc.l -1,-7,0,-$E,0,0,0,$E,0,7,0
- dc.l 4,2,3,2,2,4,2,2,2,0,1
- dc.l 6,1,5,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$E,0,$E,-1,0,-2,-$D,-2
- dc.l -$B,-2,-$9,-2,-7,-2,-5,-2,-3,-2,-1
- dc.l -3,-6,-3,-3,-3,0,-4,-1,-5,0,-$8
- dc.l -1,-$F,0,0,0,$F,0,7,1,5,0
- dc.l 3,3,3,0,2,3,2,1,1,7,1
- dc.l 6,1,5,1,4,1,3,1,2,1,1
- dc.l 1,0,0,$F,-2,-$E,-2,-$C,-2,-$A,-2
- dc.l -$8,-2,-6,-2,-4,-2,-2,-2,0,-3,-5
- dc.l -3,-2,-4,-4,-4,0,-6,-2,-$8,0,-$10
- dc.l 0,0,0,$10,0,$8,0,5,1,4,0
- dc.l 3,1,2,4,2,2,2,0,1,7,1
- dc.l 6,1,5,1,4,1,3,1,2,1,1
- dc.l 1,0
-
-