home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-03-11 | 18.5 KB | 1,205 lines |
- ; 680x0 optimised Quake render routines by John Selck.
-
- ; r_alias.c:
-
- XDEF _R_AliasTransformAndProjectFinalV
- XDEF @R_AliasTransformAndProjectFinalV
-
- ; r_draw.c:
-
- XDEF _R_ClipEdge
- XDEF @R_ClipEdge
-
- ; r_misc.c:
-
- XDEF _TransformVector
- XDEF @TransformVector
-
- ; r_surf.c:
-
- XDEF @R_AddDynamicLights
- XDEF @R_DrawSurfaceBlock8_mip0
- XDEF @R_DrawSurfaceBlock8_mip1
- XDEF @R_DrawSurfaceBlock8_mip2
- XDEF @R_DrawSurfaceBlock8_mip3
- XDEF @R_DrawSurfaceBlock16
-
-
- XREF _vright
- XREF _vup
- XREF _vpn
-
- XREF _modelorg
- XREF _xscale
- XREF _yscale
- XREF _xcenter
- XREF _ycenter
- XREF _r_refdef
- XREF _r_framecount
- XREF _edge_p
- XREF _surface_p
- XREF _surfaces
- XREF _newedges
- XREF _removeedges
-
- XREF _cacheoffset
- XREF _r_pedge
- XREF _r_leftclipped
- XREF _r_rightclipped
- XREF _r_nearzionly
- XREF _r_leftenter
- XREF _r_leftexit
- XREF _r_rightenter
- XREF _r_rightexit
- XREF _r_emitted
- XREF _r_nearzi
- XREF _r_u1
- XREF _r_v1
- XREF _r_lzi1
- XREF _r_ceilv1
- XREF _r_lastvertvalid
-
- XREF _vup
- XREF _vright
- XREF _vpn
-
- XREF _aliasxcenter
- XREF _aliasycenter
- XREF _r_avertexnormals
-
- XREF _tmatrix ; $00
- XREF _viewmatrix ; $30
- XREF _ptriangles ; $60
- XREF _r_affinetridesc ; $64
- XREF _acolormap ; $88
- XREF _r_apverts ; $8c
- XREF _pmdl ; $90
- XREF _r_plightvec ; $94
- XREF _r_ambientlight ; $a0
- XREF _r_shadelight ; $a4
- XREF _paliashdr ; $a8
- XREF _pfinalverts ; $ac
- XREF _pauxverts ; $b0
- XREF _ziscale ; $b4
- XREF _pmodel ; $b8
- XREF _alias_forward ; $bc
- XREF _alias_right ; $c8
- XREF _alias_up ; $d4
- XREF _pskindesc ; $e0
- XREF _r_amodels_drawn ; $e4
- XREF _a_skinwidth ; $e8
- XREF _r_anumverts ; $ec
- XREF _aliastransform ; $f0 -> $120
-
- __farbss equ _aliastransform-$f0
-
- XREF _vid
-
- XREF _sourcetstep
- XREF _prowdestbase
- XREF _pbasesource
- XREF _surfrowbytes
- XREF _r_lightptr
- XREF _r_stepback
- XREF _r_lightwidth
- XREF _r_numvblocks
- XREF _r_sourcemax
-
- XREF _cl_dlights
- XREF _r_drawsurf
- XREF _blocklights
- XREF __CXV52
-
- XREF _r_fullbright
-
-
- SECTION "Render",CODE
-
- ; void __asm R_AliasTransformAndProjectFinalVerts (register __a0 finalvert_t *fv, register __a1 stvert_t *pstverts)
-
- ; point transformation of entities
-
- _R_AliasTransformAndProjectFinalV:
- @R_AliasTransformAndProjectFinalV:
- sub.w #$4c,sp
- fmovem.x fp2-fp7,-(sp)
- movem.l d6-d7/a2-a3/a5,-(sp)
-
- move.l a0,a5
- moveq #0,d7
-
- lea $64(a7),a3
-
- move.l __farbss+$118,(a3)+
- move.l __farbss+$114,(a3)+
- move.l __farbss+$110,(a3)+
- move.l __farbss+$11c,(a3)+
-
- move.l __farbss+$f8,(a3)+
- move.l __farbss+$f4,(a3)+
- move.l __farbss+$f0,(a3)+
- move.l __farbss+$fc,(a3)+
- move.l _aliasxcenter,(a3)+
-
- move.l __farbss+$108,(a3)+
- move.l __farbss+$104,(a3)+
- move.l __farbss+$100,(a3)+
- move.l __farbss+$10c,(a3)+
- move.l _aliasycenter,(a3)+
-
- move.l _r_plightvec+8,(a3)+
- move.l _r_plightvec+4,(a3)+
- move.l _r_plightvec+0,(a3)
-
- move.l _r_apverts,a2
- bra.w .atin
- .atl0
- moveq #0,d0
- move.b (a2),d0
- fmove.w d0,fp7
- move.b 1(a2),d0
- fmove.w d0,fp6
- move.b 2(a2),d0
- fmove.w d0,fp5
-
- lea $64(a7),a3
-
- fmove.s (a3)+,fp1
- fmul.x fp5,fp1
- move.b 3(a2),d0
- fmove.s (a3)+,fp2
- fmul.x fp6,fp2
- mulu.w #12,d0
- fmove.s (a3)+,fp3
- fmul.x fp7,fp3
- lea _r_avertexnormals,a0
- fadd.s (a3)+,fp3
- fadd.x fp1,fp3
- fadd.x fp2,fp3
- fmove.s #1,fp0
- fdiv.x fp3,fp0
- move.l 4(a1),8(a5)
- move.l 8(a1),12(a5)
- move.l (a1),$18(a5)
- fmove.l fp0,$14(a5)
-
- fmove.s (a3)+,fp1
- fmul.x fp5,fp1
- add.l d0,a0
- fmove.s (a3)+,fp2
- fmul.x fp6,fp2
- move.l _r_ambientlight,d6
- fmove.s (a3)+,fp3
- fmul.x fp7,fp3
- addq.l #1,d7
- fadd.s (a3)+,fp3
- fadd.x fp1,fp3
- fadd.x fp2,fp3
- fmul.x fp0,fp3
- addq.l #4,a2
- fadd.s (a3)+,fp3
- fmove.l fp3,(a5)
-
- fmove.s (a3)+,fp1
- fmul.x fp5,fp1
- add.w #12,a1
- fmove.s (a3)+,fp2
- fmul.x fp6,fp2
- fmove.s (a3)+,fp3
- fmul.x fp7,fp3
- fadd.s (a3)+,fp3
- fadd.x fp1,fp3
- fadd.x fp2,fp3
- fmul.x fp0,fp3
- fadd.s (a3)+,fp3
- fmove.l fp3,4(a5)
-
- fmove.s 8(a0),fp2
- fmul.s (a3)+,fp2
- fmove.s 4(a0),fp3
- fmul.s (a3)+,fp3
- fmove.s (a0),fp0
- fmul.s (a3),fp0
- add.w #$20,a5
- fadd.x fp2,fp0
- fadd.x fp3,fp0
-
- ftst.x fp0
- fboge.w .s0
-
- fmul.s _r_shadelight,fp0
- fmove.l fp0,d0
- add.l d0,d6
- bge.b .s0
- moveq #0,d6
- .s0
- move.l d6,-$10(a5)
- .atin
- cmp.l _r_anumverts,d7
- blt.w .atl0
-
- movem.l (sp)+,d6-d7/a2-a3/a5
- fmovem.x (sp)+,fp2-fp7
- add.w #$4c,sp
- rts
-
- ; void __asm R_ClipEdge (register __a0 mvertex_t *pv0, register __a1 mvertex_t *pv1, register __a2 clipplane_t *clip);
-
- ; clipping
-
- cnop 0,4
- _R_ClipEdge:
- @R_ClipEdge:
- fmovem.x fp2-fp4,-(sp)
- movem.l a2-a3,-(sp)
-
- bsr.b R_ClipEdge_inner
-
- movem.l (sp)+,a2-a3
- fmovem.x (sp)+,fp2-fp4
- rts
-
- cnop 0,4
- R_ClipEdge_inner:
- sub.w #12,sp
-
- move.l a2,d0
- beq.w .emit
- .next
- fmove.s (a0),fp0
- fmul.s (a2),fp0
- fmove.s 4(a0),fp1
- fmul.s 4(a2),fp1
- fmove.s 8(a0),fp2
- fmul.s 8(a2),fp2
- fadd.x fp1,fp0
- fadd.x fp2,fp0
- fsub.s 12(a2),fp0
-
- fmove.s (a1),fp1
- fmul.s (a2),fp1
- fmove.s 4(a1),fp2
- fmul.s 4(a2),fp2
- fmove.s 8(a1),fp3
- fmul.s 8(a2),fp3
- fadd.x fp2,fp1
- fadd.x fp3,fp1
- fsub.s 12(a2),fp1
-
- ftst.x fp0
- fbolt.w .enter
- ftst.x fp1
- fbuge.w .loop
-
- move.l #$7fffffff,_cacheoffset
-
- fmove.x fp0,fp2
- fsub.x fp1,fp2
- fdiv.x fp2,fp0
-
- fmove.s (a0),fp1
- fmove.s (a1),fp2
- fsub.x fp1,fp2
- fmul.x fp0,fp2
- fadd.x fp1,fp2
- fmove.s fp2,(sp)
-
- fmove.s 4(a0),fp1
- fmove.s 4(a1),fp2
- fsub.x fp1,fp2
- fmul.x fp0,fp2
- fadd.x fp1,fp2
- fmove.s fp2,4(sp)
-
- fmove.s 8(a0),fp1
- fmove.s 8(a1),fp2
- fsub.x fp1,fp2
- fmul.x fp0,fp2
- fadd.x fp1,fp2
- fmove.s fp2,8(sp)
-
- tst.b $14(a2)
- beq.b .ces0
-
- moveq #1,d0
- move.l d0,_r_leftclipped
-
- lea _r_leftexit,a3
- bra.b .s1
- .ces0
- tst.b $15(a2)
- beq.b .s2
-
- moveq #1,d0
- move.l d0,_r_rightclipped
-
- lea _r_rightexit,a3
- .s1
- move.l sp,a1
- move.l (a1)+,(a3)+
- move.l (a1)+,(a3)+
- move.l (a1),(a3)
- .s2
- move.l sp,a1
- move.l 16(a2),a2
- bsr.w R_ClipEdge_inner
- bra.w .end
- .enter
- ftst.x fp1
- fboge.w .s3
- tst.l _r_leftclipped
- bne.w .end
-
- move.l _r_framecount,d0
- or.l #$80000000,d0
- move.l d0,_cacheoffset
- bra.w .end
- .s3
- clr.l _r_lastvertvalid
- move.l #$7fffffff,_cacheoffset
-
- fmove.x fp0,fp2
- fsub.x fp1,fp2
- fdiv.x fp2,fp0
-
- fmove.s (a0),fp1
- fmove.s (a1),fp2
- fsub.x fp1,fp2
- fmul.x fp0,fp2
- fadd.x fp1,fp2
- fmove.s fp2,(sp)
-
- fmove.s 4(a0),fp1
- fmove.s 4(a1),fp2
- fsub.x fp1,fp2
- fmul.x fp0,fp2
- fadd.x fp1,fp2
- fmove.s fp2,4(sp)
-
- fmove.s 8(a0),fp1
- fmove.s 8(a1),fp2
- fsub.x fp1,fp2
- fmul.x fp0,fp2
- fadd.x fp1,fp2
- fmove.s fp2,8(sp)
-
- tst.b $14(a2)
- beq.b .s4
-
- moveq #1,d0
- move.l d0,_r_leftclipped
-
- lea _r_leftenter,a3
- bra.b .s5
- .s4
- tst.b $15(a2)
- beq.b .s6
-
- moveq #1,d0
- move.l d0,_r_rightclipped
-
- lea _r_rightenter,a3
- .s5
- move.l sp,a0
- move.l (a0)+,(a3)+
- move.l (a0)+,(a3)+
- move.l (a0),(a3)
- .s6
- move.l sp,a0
- move.l 16(a2),a2
- bsr.w R_ClipEdge_inner
- bra.b .end
- .loop
- move.l 16(a2),a2
- move.l a2,d0
- bne.w .next
- .emit
- add.w #12,sp
- bra.b @R_EmitEdge
- .end
- add.w #12,sp
- rts
-
- ; void __asm R_EmitEdge (register __a0 mvertex_t *pv0, register __a1 mvertex_t *pv1)
-
- ; u0 = FP2
- ; v0 = FP3
- ; lzi0 = FP4
-
- cnop 0,4
- @R_EmitEdge:
- movem.l d4-d5/d7/a5,-(sp)
-
- move.l a1,a2
-
- tst.l _r_lastvertvalid
- beq.b .notval
- fmove.s _r_u1,fp2
- fmove.s _r_v1,fp3
- fmove.s _r_lzi1,fp4
- move.l _r_ceilv1,d7
- bra.w .valid
- .notval
- lea local(pc),a3
- fmove.s (a0)+,fp0
- fsub.s _modelorg,fp0
- fmove.s fp0,(a3)+
- fmove.s (a0)+,fp0
- fsub.s _modelorg+4,fp0
- fmove.s fp0,(a3)+
- fmove.s (a0),fp0
- fsub.s _modelorg+8,fp0
- fmove.s fp0,(a3)
-
- lea local(pc),a0
- lea transformed(pc),a1
- bsr @TransformVector
-
- fmove.s transformed+8(pc),fp1
- fcmp.s #1.000000e-02,fp1
- fboge.w .res0
- fmove.s #1.000000e-02,fp1
- .res0
- fmove.s #1,fp4
- fdiv.x fp1,fp4
-
- fmove.s _xscale,fp2
- fmul.x fp4,fp2
- fmul.s transformed(pc),fp2
- fadd.s _xcenter,fp2
-
- fcmp.s _r_refdef+$44,fp2
- fboge.w .res1
- fmove.s _r_refdef+$44,fp2
- .res1
- fcmp.s _r_refdef+$54,fp2
- fbole.w .res2
- fmove.s _r_refdef+$54,fp2
- .res2
-
- fmove.s _yscale,fp3
- fmul.x fp4,fp3
- fmul.s transformed+4(pc),fp3
- fneg.x fp3
- fadd.s _ycenter,fp3
-
- fcmp.s _r_refdef+$48,fp3
- fboge.w .res3
- fmove.s _r_refdef+$48,fp3
- .res3
- fcmp.s _r_refdef+$58,fp3
- fbole.w .res4
- fmove.s _r_refdef+$58,fp3
- .res4
- fmove.l fp3,d7
- fcmp.l d7,fp3
- fbule.w .rc0
- addq.l #1,d7
- .rc0
- .valid
- lea local(pc),a3
- fmove.s (a2)+,fp0
- fsub.s _modelorg,fp0
- fmove.s fp0,(a3)+
- fmove.s (a2)+,fp0
- fsub.s _modelorg+4,fp0
- fmove.s fp0,(a3)+
- fmove.s (a2),fp0
- fsub.s _modelorg+8,fp0
- fmove.s fp0,(a3)
-
- lea local(pc),a0
- lea transformed(pc),a1
- bsr @TransformVector
-
- fmove.s transformed+8(pc),fp1
- fcmp.s #1.000000e-02,fp1
- fboge.w .res5
- fmove.s #1.000000e-02,fp1
- .res5
- fmove.s #1,fp0
- fdiv.x fp1,fp0
- fmove.s fp0,_r_lzi1
-
- fmove.s _xscale,fp0
- fmul.s _r_lzi1,fp0
- fmul.s transformed(pc),fp0
- fadd.s _xcenter,fp0
-
- fcmp.s _r_refdef+$44,fp0
- fboge.w .res6
- fmove.s _r_refdef+$44,fp0
- .res6
- fcmp.s _r_refdef+$54,fp0
- fbole.w .res7
- fmove.s _r_refdef+$54,fp0
- .res7
- fmove.s fp0,_r_u1
-
- fmove.s _yscale,fp0
- fmul.s _r_lzi1,fp0
- fmul.s transformed+4(pc),fp0
- fneg.x fp0
- fadd.s _ycenter,fp0
-
- fcmp.s _r_refdef+$48,fp0
- fboge.w .res8
- fmove.s _r_refdef+$48,fp0
- .res8
- fcmp.s _r_refdef+$58,fp0
- fbole.w .res9
- fmove.s _r_refdef+$58,fp0
- .res9
- fmove.s fp0,_r_v1
-
- fmove.s _r_lzi1,fp1
- fcmp.x fp4,fp1
- fbole.w .res10
- fmove.x fp1,fp4
- .res10
- fmove.x fp4,fp1
- fcmp.s _r_nearzi,fp1
- fbole.w .res11
- fmove.s fp1,_r_nearzi
- .res11
- tst.l _r_nearzionly
- bne.w .endemit
-
- move.l #1,_r_emitted
-
- fmove.l fp0,d0
- fcmp.l d0,fp0
- fbule.w .rc1
- addq.l #1,d0
- .rc1
- move.l d0,_r_ceilv1
-
- cmp.l d7,d0
- bne.b .nocreate
- cmp.l #$7fffffff,_cacheoffset
- beq.w .endemit
-
- move.l _r_framecount,d0
- or.l #$80000000,d0
- move.l d0,_cacheoffset
- bra.w .endemit
- .nocreate
- fmove.s _r_u1,fp0
- fsub.x fp2,fp0
- fmove.s _r_v1,fp1
- fsub.x fp3,fp1
- fdiv.x fp1,fp0
-
- move.l _edge_p,a5
- add.l #$20,_edge_p
-
- fmove.s fp4,$18(a5)
- move.l _r_pedge,$1c(a5)
-
- move.l _surface_p,d1
- sub.l _surfaces,d1
- asr.l #6,d1
-
- cmp.l d0,d7
- bgt.b .notrail
-
- move.l d7,d5
-
- fmove.l d5,fp1
- fsub.x fp3,fp1
- fmul.x fp0,fp1
- move.l _r_ceilv1,d4
- move.w d1,$10(a5)
- clr.w $12(a5)
- fadd.x fp2,fp1
-
- bra.b .nolead
- .notrail
- move.l _r_ceilv1,d5
-
- fmove.l d5,fp1
- fsub.s _r_v1,fp1
- fmul.x fp0,fp1
- move.l d7,d4
- clr.w $10(a5)
- move.w d1,$12(a5)
- fadd.s _r_u1,fp1
- .nolead
- fmul.s #1048576,fp1
- lea _newedges,a0
- subq.l #1,d4
- lea 0(a0,d5.l*4),a1
- move.l (a1),a0
- fadd.s #1048575,fp1
- fmove.l fp1,d0
-
- fmul.s #1048576,fp0
- cmp.l _r_refdef+$4c,d0
- bge.b .rer0
- move.l _r_refdef+$4c,d0
- .rer0
- cmp.l _r_refdef+$50,d0
- ble.b .rer1
- move.l _r_refdef+$50,d0
- .rer1
- move.l d0,(a5)
- fmove.l fp0,4(a5)
-
- tst.w $10(a5)
- beq.b .rer2
- addq.l #1,d0
- .rer2
- move.l d0,d7
-
- move.l a0,d0
- beq.b .re43
- move.l (a0),d1
- cmp.l d7,d1
- blt.b .re44
- .re43:
- move.l d0,12(a5)
- move.l a5,(a1)
- bra.b .re49
- .re44:
- move.l d0,a3
- dc.w $0c40
- .re45:
- move.l a2,a3
- move.l 12(a3),a2
- move.l a2,d0
- beq.b .re48
- cmp.l (a2),d7
- bge.b .re45
- .re48:
- move.l a2,12(a5)
- move.l a5,12(a3)
- .re49:
- lea _removeedges,a0
- lea 0(a0,d4.l*4),a1
- move.l (a1),$14(a5)
- move.l a5,(a1)
- .endemit
- movem.l (sp)+,d4-d5/d7/a5
- rts
-
- cnop 0,8
- local: dc.l 0,0,0
- transformed: dc.l 0,0,0
-
- ; void __asm TransformVector (register __a0 vec3_t in, register __a1 vec3_t out);
-
- ; general vector transformation
-
- _TransformVector:
- @TransformVector:
- move.l a2,-(sp)
-
- lea _vright,a2
- fmove.s (a2)+,fp0
- fmul.s (a0)+,fp0
- fmove.s (a2)+,fp1
- fmul.s (a0)+,fp1
- fadd.x fp1,fp0
- fmove.s (a2),fp1
- fmul.s (a0),fp1
- subq.l #8,a0
- lea _vup,a2
- fadd.x fp1,fp0
- fmove.s fp0,(a1)+
-
- fmove.s (a2)+,fp0
- fmul.s (a0)+,fp0
- fmove.s (a2)+,fp1
- fmul.s (a0)+,fp1
- fadd.x fp1,fp0
- fmove.s (a2),fp1
- fmul.s (a0),fp1
- subq.l #8,a0
- lea _vpn,a2
- fadd.x fp1,fp0
- fmove.s fp0,(a1)+
-
- fmove.s (a2)+,fp0
- fmul.s (a0)+,fp0
- fmove.s (a2)+,fp1
- fmul.s (a0)+,fp1
- fadd.x fp1,fp0
- fmove.s (a2),fp1
- fmul.s (a0),fp1
- move.l (sp)+,a2
- fadd.x fp1,fp0
- fmove.s fp0,(a1)
- rts
-
- ; void __asm R_AddDynamicLights (void)
-
- ; adds dynamic lights to lightmaps
-
- _r_drawsurf_surf equ _r_drawsurf+8
-
- vid_colormap equ _vid+4
-
- cnop 0,4
- @R_AddDynamicLights:
- fmovem.x fp2-fp6,-(sp)
- movem.l d2-d7/a2-a6,-(sp)
- subq.l #4,sp
-
- move.l _r_drawsurf_surf,a6 ; surf
-
- move.w $30(a6),d0
- move.w $32(a6),d1
- ext.l d0
- ext.l d1
- asr.l #4,d0
- asr.l #4,d1
- addq.l #1,d0
- addq.l #1,d1
- move.l d0,a4
- move.l d1,a5
-
- lea _cl_dlights,a2 ; *cl_dlights
- move.l $34(a6),a3 ; tex
-
- moveq #0,d1
- .adll
- move.l d1,(sp)
- moveq #0,d0
- bset d1,d0
- and.l 8(a6),d0
- beq.w .continue
-
- move.l 12(a6),a0 ; surf->plane->normal
- fmove.s (a0)+,fp0
- fmul.s (a2),fp0
- fmove.s (a0)+,fp1
- fmul.s 4(a2),fp1
- fadd.x fp1,fp0
- fmove.s (a0)+,fp1
- fmul.s 8(a2),fp1
- fadd.x fp1,fp0
- fsub.s (a0),fp0 ; dist
-
- fmove.x fp0,fp1
- ftst.x fp1
- fbge.w .dd
- fneg.x fp1
- .dd
- fmove.s 12(a2),fp2 ; rad
- fsub.x fp1,fp2
-
- fmove.s $18(a2),fp3 ; minlight
-
- fcmp.x fp3,fp2
- fblt.w .continue
- fneg.x fp3
- fadd.x fp2,fp3
-
- fneg.x fp0
-
- move.l 12(a6),a0 ; surf->plane->normal
- fmove.s (a0)+,fp4
- fmul.x fp0,fp4
- fadd.s (a2),fp4
- fmove.s (a0)+,fp5
- fmul.x fp0,fp5
- fadd.s 4(a2),fp5
- fmove.s (a0),fp6
- fmul.x fp0,fp6
- fadd.s 8(a2),fp6
-
- fmove.x fp4,fp0
- fmul.s (a3),fp0
- fmove.x fp5,fp1
- fmul.s 4(a3),fp1
- fadd.x fp1,fp0
- fmove.x fp6,fp1
- fmul.s 8(a3),fp1
- move.w $2c(a6),d0
- ext.l d0
- fadd.x fp1,fp0
- fadd.s 12(a3),fp0
- fmove.l fp0,d2
- sub.l d0,d2
-
- fmove.x fp4,fp0
- fmul.s 16(a3),fp0
- fmove.x fp5,fp1
- fmul.s 20(a3),fp1
- fadd.x fp1,fp0
- fmove.x fp6,fp1
- fmul.s 24(a3),fp1
- move.w $2e(a6),d0
- ext.l d0
- fadd.x fp1,fp0
- fadd.s 28(a3),fp0
- fmove.l fp0,d3
- sub.l d0,d3
-
-
- fmul.s #256,fp2
- lea _blocklights,a0
- moveq #0,d7
- fmove.l fp2,d0
- move.l d0,a1
-
- fmove.l fp3,d0
-
- bra.b .adi0
- .adl0
- move.l d7,d1
- move.l d3,d5
- lsl.l #4,d1
- sub.l d1,d5
- bpl.b .ads0
- neg.l d5
- .ads0
- moveq #0,d6
- bra.b .adi1
- .adl1
- move.l d6,d1
- move.l d2,d4
- lsl.l #4,d1
- sub.l d1,d4
- bpl.b .ads1
- neg.l d4
- .ads1
- cmp.l d4,d5
- bge.b .ads2
- move.l d5,d1
- lsr.l #1,d1
- add.l d1,d4
- bra.b .ads3
- .ads2
- lsr.l #1,d4
- add.l d5,d4
- .ads3
- cmp.l d0,d4
- bge.b .ads4
- lsl.l #8,d4
- move.l a1,d1
- sub.l d4,d1
- add.l d1,(a0,d6.w*4)
- .ads4
- addq.l #1,d6
- .adi1
- cmp.l a4,d6
- blt.b .adl1
-
- addq.l #1,d7
- lea (a0,a4.w*4),a0
- .adi0
- cmp.l a5,d7
- blt.b .adl0
- .continue
- move.l (sp),d1
- moveq #$20,d0
- addq.l #1,d1
- add.l d0,a2
- cmp.l d0,d1
- blt.w .adll
-
- addq.l #4,sp
- movem.l (sp)+,d2-d7/a2-a6
- fmovem.x (sp)+,fp2-fp6
- rts
-
- cnop 0,8
- lnum: dc.l 0
-
- ; void __asm R_DrawSurfaceBlock8_mip0 (void)
-
- ; mipmap level 0
-
- @R_DrawSurfaceBlock8_mip0:
- movem.l d2-d7/a2-a6,-(sp)
-
- move.l _pbasesource,a5
- move.l _prowdestbase,a3
-
- moveq #0,d3
- bra.b .in
- .l2
- move.l _r_lightptr,a0
- move.l (a0),d0
- move.l 4(a0),d1
-
- move.l _r_lightwidth,d2
- lea 0(a0,d2.l*4),a1
- move.l a1,_r_lightptr
-
- move.l (a1)+,d4
- move.l (a1),d5
- sub.l d0,d4
- sub.l d1,d5
- lsr.l #4,d4
- lsr.l #4,d5
- move.l d4,a2
- move.l d5,a6
-
- move.l vid_colormap,a0
- moveq #0,d2
- moveq #$0f,d6
- .l1
- move.l d0,d4
- move.l d1,d5
- sub.l d4,d5
- asr.l #4,d5
-
- move.l a5,a4
- move.l a3,a1
-
- moveq #$0f,d7
- .l0 move.w d4,d2
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
- add.l d5,d4
- subq.l #1,d7
- bpl.b .l0
-
- add.l _sourcetstep,a5
- add.l _surfrowbytes,a3
- add.l a2,d0
- add.l a6,d1
-
- subq.l #1,d6
- bpl.b .l1
-
- cmp.l _r_sourcemax,a5
- bcs.b .s00
- sub.l _r_stepback,a5
- .s00
- addq.l #1,d3
- .in
- cmp.l _r_numvblocks,d3
- blt.b .l2
-
- movem.l (sp)+,d2-d7/a2-a6
- rts
-
- ; void __asm R_DrawSurfaceBlock8_mip1 (void)
-
- ; mipmap level 1
-
- @R_DrawSurfaceBlock8_mip1:
- movem.l d2-d7/a2-a6,-(sp)
-
- move.l _pbasesource,a5
- move.l _prowdestbase,a3
-
- moveq #0,d3
- bra.b .in1
- .l21
- move.l _r_lightptr,a0
- move.l (a0),d0
- move.l 4(a0),d1
-
- move.l _r_lightwidth,d2
- lea 0(a0,d2.l*4),a1
- move.l a1,_r_lightptr
-
- move.l (a1)+,d4
- move.l (a1),d5
- sub.l d0,d4
- sub.l d1,d5
- lsr.l #3,d4
- lsr.l #3,d5
- move.l d4,a2
- move.l d5,a6
-
- move.l vid_colormap,a0
- moveq #0,d2
- moveq #$07,d6
- .l11
- move.l d0,d4
- move.l d1,d5
- sub.l d4,d5
- asr.l #3,d5
-
- move.l a5,a4
- move.l a3,a1
-
- moveq #$07,d7
- .l01 move.w d4,d2
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
- add.l d5,d4
- subq.l #1,d7
- bpl.b .l01
-
- add.l _sourcetstep,a5
- add.l _surfrowbytes,a3
- add.l a2,d0
- add.l a6,d1
-
- subq.l #1,d6
- bpl.b .l11
-
- cmp.l _r_sourcemax,a5
- bcs.b .s01
- sub.l _r_stepback,a5
- .s01
- addq.l #1,d3
- .in1
- cmp.l _r_numvblocks,d3
- blt.b .l21
-
- movem.l (sp)+,d2-d7/a2-a6
- rts
-
- ; void __asm R_DrawSurfaceBlock8_mip2 (void)
-
- ; mipmap level 2
-
- @R_DrawSurfaceBlock8_mip2:
- movem.l d2-d6/a2-a6,-(sp)
-
- move.l _pbasesource,a5
- move.l _prowdestbase,a3
-
- moveq #0,d3
- bra.w .in2
- .l22
- move.l _r_lightptr,a0
- move.l (a0),d0
- move.l 4(a0),d1
-
- move.l _r_lightwidth,d2
- lea 0(a0,d2.l*4),a1
- move.l a1,_r_lightptr
-
- move.l (a1)+,d4
- move.l (a1),d5
- sub.l d0,d4
- sub.l d1,d5
- lsr.l #2,d4
- lsr.l #2,d5
- move.l d4,a2
- move.l d5,a6
-
- move.l vid_colormap,a0
- moveq #0,d2
- moveq #$03,d6
- .l12
- move.l d0,d4
- move.l d1,d5
- sub.l d4,d5
- asr.l #3,d5
-
- move.l a5,a4
- move.w d4,d2
- move.l a3,a1
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
- add.l d5,d4
- move.w d4,d2
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
- add.l d5,d4
- move.w d4,d2
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
- add.l d5,d4
- move.w d4,d2
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
-
- add.l _sourcetstep,a5
- add.l _surfrowbytes,a3
- add.l a2,d0
- add.l a6,d1
-
- subq.l #1,d6
- bpl.b .l12
-
- cmp.l _r_sourcemax,a5
- bcs.b .s02
- sub.l _r_stepback,a5
- .s02
- addq.l #1,d3
- .in2
- cmp.l _r_numvblocks,d3
- blt.w .l22
-
- movem.l (sp)+,d2-d6/a2-a6
- rts
-
- ; void __asm R_DrawSurfaceBlock8_mip3 (void)
-
- ; mipmap level 3
-
- @R_DrawSurfaceBlock8_mip3:
- movem.l d2-d6/a2-a6,-(sp)
-
- move.l _pbasesource,a5
- move.l _prowdestbase,a3
-
- moveq #0,d3
- bra.b .in3
- .l23
- move.l _r_lightptr,a0
- move.l (a0),d0
- move.l 4(a0),d1
-
- move.l _r_lightwidth,d2
- lea 0(a0,d2.l*4),a1
- move.l a1,_r_lightptr
-
- move.l (a1)+,d4
- move.l (a1),d5
- sub.l d0,d4
- sub.l d1,d5
- lsr.l #1,d4
- lsr.l #1,d5
- move.l d4,a2
- move.l d5,a6
-
- move.l vid_colormap,a0
- moveq #0,d2
- moveq #$01,d6
- .l13
- move.l d0,d4
- move.l d1,d5
- sub.l d4,d5
- asr.l #3,d5
-
- move.l a5,a4
- move.w d4,d2
- move.l a3,a1
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
- add.l d5,d4
- move.w d4,d2
- move.b (a4)+,d2
- move.b 0(a0,d2.l),(a1)+
-
- add.l _sourcetstep,a5
- add.l _surfrowbytes,a3
- add.l a2,d0
- add.l a6,d1
-
- subq.l #1,d6
- bpl.b .l13
-
- cmp.l _r_sourcemax,a5
- bcs.b .s03
- sub.l _r_stepback,a5
- .s03
- addq.l #1,d3
- .in3
- cmp.l _r_numvblocks,d3
- blt.b .l23
-
- movem.l (sp)+,d2-d6/a2-a6
- rts
-
- ; void R_DrawSurfaceBlock16 (void)
-
- ; dummy
-
- @R_DrawSurfaceBlock16: ; not needed in quake 1
- rts
-
-
- END
-