home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / DEMOS / TRSI-CrackIntroNo2.lha / PLY2-Intro2 / INC / linemacros.s < prev   
Encoding:
Text File  |  1994-05-20  |  4.5 KB  |  274 lines

  1. ; flineinit (#)Scrw
  2. ; lineinit (#)Scrw
  3. ; fline     (?)Screen D0-D3, A3=Multab
  4. ; clipfline (?)Screen,(#)scrw,(#)scrh, sonst wie filline
  5. ; line     (?)Screen D0-D3, A3=Multab
  6.  
  7.     
  8. ;;************* LINEDRAW ROUTINE *******************
  9. ;                 LINEDRAW ROUTINE FOR USE WITH FILLING:
  10. ; Preload:  d0=X1  d1=Y1  d2=X2  d3=Y2 A3=Multab
  11. ; $dff060=Screenwidth (word)  $dff072=-$8000 (longword)  $dff044=-1 (longword)
  12. ; Verbrät d0-d5
  13.  
  14. fline MACRO             ;(?)Screen
  15.     cmp.w   d1,d3
  16.     bgt.s   .line1
  17.     exg     d0,d2
  18.     exg     d1,d3
  19.     beq.s   .out
  20. .line1    moveq    #0,d4
  21.     move.w  d1,d4
  22.     add.w    d4,d4
  23.     move.w    (a3,d4.w),d4
  24.     move.w  d0,d5
  25.     asr.w   #3,d5
  26.     add.w   d5,d4
  27.     add.l   \1,d4
  28.     moveq   #0,d5
  29.     sub.w   d1,d3
  30.     sub.w   d0,d2
  31.     bpl.s   .line2
  32.     moveq   #1,d5
  33.     neg.w   d2
  34. .line2    move.w  d3,d1
  35.     add.w   d1,d1
  36.     cmp.w   d2,d1
  37.     dbhi    d3,.line3
  38. .line3    move.w  d3,d1
  39.     sub.w   d2,d1
  40.     bpl.s   .line4
  41.     exg     d2,d3
  42. .line4    addx.w  d5,d5
  43.     add.w   d2,d2
  44.     move.w  d2,d1
  45.     sub.w   d3,d2
  46.     addx.w  d5,d5
  47.     and.w   #15,d0
  48.     ror.w   #4,d0
  49.     or.w    #$a4a,d0
  50.     LWBLIT
  51.     move.w  d2,$52(a6)
  52.     sub.w   d3,d2
  53.     lsl.w   #6,d3
  54.     addq.w  #2,d3
  55.     move.w  d0,$40(a6)
  56.      move.b  .oct(PC,d5.w),$43(a6)
  57.     move.l  d4,$48(a6)
  58.     move.l  d4,$54(a6)
  59.     movem.w d1/d2,$62(a6)
  60.     move.w  d3,$58(a6)
  61. .out    rts
  62. .oct    dc.l    $3431353,$b4b1757
  63.     ENDM
  64.  
  65. ;;
  66. clipfline MACRO     ;(?)Screen,(#)scrw,(#)scrh ,sonst wie filline
  67.     
  68.     cmp.w   d0,d2
  69.     bgt.s   .line0
  70.     exg     d0,d2
  71.     exg     d1,d3
  72. .line0            ;D0<=D2
  73.     tst.w    d2
  74.     bmi.w    .out
  75.  
  76.     tst.w    d0        ;Links clippen
  77.     bpl.s    .nlclip
  78.     sub.w    d2,d0
  79.     sub.w    d3,d1
  80.     muls    d2,d1
  81.     divs    d0,d1
  82.     neg.w    d1
  83.     add.w    d3,d1    
  84.     moveq    #0,d0
  85. .nlclip
  86.     cmp.w    #(\2)-1,d0
  87.     bgt.s    .fullrclip
  88.     cmp.w    #(\2),d2    ;Rechts clippen (für Filled!)
  89.     blo.s    .nrclip
  90.     move.w    #(\2)-1,d4
  91.     sub.w    d0,d4
  92.     move.w    d3,d5
  93.     sub.w    d0,d2
  94.     sub.w    d1,d3
  95.     muls    d4,d3
  96.     divs    d2,d3
  97.     add.w    d1,d3    
  98.     move.w    #(\2)-1,d2
  99.     movem.w    d0-d3,-(sp)
  100.     move.w    d2,d0
  101.     move.w    d5,d1
  102.     bsr    .yexecute
  103.     movem.w    (sp)+,d0-d3    
  104.     bra.s    .yexecute
  105. .fullrclip
  106.     move.w    #(\2)-1,d0
  107.     move.w    #(\2)-1,d2
  108. .nrclip
  109.  
  110. .yexecute
  111.     cmp.w   d1,d3
  112.     beq.w   .out
  113.     bgt.s   .line1
  114.     exg     d0,d2
  115.     exg     d1,d3
  116. .line1            ;D1<D3
  117.     tst.w    d3        ;Linie ganz oberhalb oder unterhalb ?
  118.     bmi.w    .out
  119.     cmp.w    #(\3)-1,d1
  120.     bgt.w    .out
  121.  
  122.     tst.w    d1
  123.     bpl.s    .ntclip
  124.                 ;Oben clippen
  125.     tst.w    d3
  126.     beq.w    .out
  127.     sub.w    d2,d0
  128.     sub.w    d3,d1
  129.     muls    d3,d0
  130.     divs    d1,d0
  131.     neg.w    d0
  132.     add.w    d2,d0    
  133.     moveq    #0,d1
  134. .ntclip
  135.     cmp.w    #(\3),d3    ;Unten clippen
  136.     blo.s    .nbclip
  137.     move.w    #(\3)-1,d4
  138.     sub.w    d1,d4
  139.     beq.w    .out
  140.     sub.w    d0,d2
  141.     sub.w    d1,d3
  142.     muls    d4,d2
  143.     divs    d3,d2
  144.     add.w    d0,d2    
  145.     move.w    #(\3)-1,d3
  146. .nbclip
  147.     moveq    #0,d4
  148.     move.w  d1,d4
  149.     add.w    d4,d4
  150.     move.w    (a3,d4.w),d4
  151.     move.w  d0,d5
  152.     asr.w   #3,d5
  153.     add.w   d5,d4
  154.     add.l   \1,d4
  155.     moveq   #0,d5
  156.     sub.w   d1,d3
  157.     sub.w   d0,d2
  158.     bpl.s   .line2
  159.     moveq   #1,d5
  160.     neg.w   d2
  161. .line2    move.w  d3,d1
  162.     add.w   d1,d1
  163.     cmp.w   d2,d1
  164.     dbhi    d3,.line3
  165. .line3    move.w  d3,d1
  166.     sub.w   d2,d1
  167.     bpl.s   .line4
  168.     exg     d2,d3
  169. .line4    addx.w  d5,d5
  170.     add.w   d2,d2
  171.     move.w  d2,d1
  172.     sub.w   d3,d2
  173.     addx.w  d5,d5
  174.     and.w   #15,d0
  175.     ror.w   #4,d0
  176.     or.w    #$a4a,d0
  177.     LWBLIT
  178.     move.w  d2,$52(a6)
  179.     sub.w   d3,d2
  180.     lsl.w   #6,d3
  181.     addq.w  #2,d3
  182.     move.w  d0,$40(a6)
  183.      move.b  .oct(PC,d5.w),$43(a6)
  184.     move.l  d4,$48(a6)
  185.     move.l  d4,$54(a6)
  186.     movem.w d1/d2,$62(a6)
  187.     move.w  d3,$58(a6)
  188. .out    rts
  189. .oct    dc.l    $3431353,$b4b1757
  190.     ENDM
  191. ;;
  192. flineinit MACRO        ;(#)Scrw
  193.     PROCOFF
  194.     LWBLIT
  195.     PROCON
  196.     move.w    #(\1)/8,$60(a6)
  197.     move.l    #-$8000,$72(a6)
  198.     move.l    #-1,$44(a6)
  199.     ENDM
  200.  
  201. ;;
  202. lineinit MACRO        ;(#)Scrw
  203.  
  204.     PROCOFF
  205.     LWBLIT
  206.     PROCON
  207.     move.w    #(\1)/8,$60(a6)
  208.     move.l    #-$8000,$72(a6)
  209.     move.l    #-1,$44(a6)
  210.     ENDM
  211.  
  212. ;;
  213. line    MACRO    ;(?)Screen D0-D3, A3=Multab
  214.  
  215.     cmp.w    d0,d2        ;Start&Endpunkte gleich ?
  216.     bne.s    .noeq
  217.     cmp.w    d1,d3
  218.     bne.s    .noeq
  219.     rts
  220. .noeq
  221.     move.w    d1,d4
  222.     add.w    d4,d4
  223.     move.w    (a3,d4.w),d4
  224.     moveq    #-$10,d5
  225.     and.w    d0,d5
  226.     lsr.w    #3,d5
  227.     add.w    d5,d4
  228.     add.l    a1,d4
  229.     clr.l    d5
  230.     sub.w    d1,d3
  231.     roxl.b    #1,d5
  232.     tst.w    d3
  233.     bge.s    .y2gy1
  234.     neg.w    d3
  235. .y2gy1    sub.w    d0,d2
  236.     roxl.b    #1,d5
  237.     tst.w    d2
  238.     bge.s    .x2gx1
  239.     neg.w    d2
  240. .x2gx1    move.w    d3,d1
  241.     sub.w    d2,d1
  242.     bge.s    .dygdx
  243.     exg    d2,d3
  244. .dygdx    roxl.b    #1,d5
  245.     move.b    okttab(pc,d5),d5
  246.     add.w    d2,d2
  247.     WBLIT
  248.     move.w    d2,$62(a6)        ;BLTBMOD
  249.     sub.w    d3,d2
  250.     bge.s    .signnl
  251.     or.b    #$40,d5
  252. .signnl    move.w    d2,$52(a6)        ;BLTAPTL
  253.     sub.w    d3,d2
  254.     move.w    d2,$64(a6)        ;BLTAMOD
  255.     move.w    #$8000,$74(a6)        ;BLTADAT
  256.     move.w    #-1,$72(a6)        ;BLTBDAT
  257.     move.w    #$ffff,$44(a6)        ;BLTAFWM
  258.     and.w    #$f,d0
  259.     ror.w    #4,d0
  260.     or.w    #$0bca,d0
  261.     move.w    d0,$40(a6)        ;BLTCON0
  262.     move.w    d5,$42(a6)        ;BLTCON1
  263.     move.l    d4,$48(a6)        ;BLTCPT
  264.     move.l    d4,$54(a6)        ;BLTDPT
  265.     move.w    #scrbw*planz,$60(a6)    ;BLTCMOD
  266.     move.w    #scrbw*planz,$66(a6)    ;BLTDMOD
  267.     lsl.w    #6,d3
  268.     addq.w    #2,d3
  269.     move.w    d3,$58(a6)        ;BLTSIZE
  270.     rts
  271. okttab    dc.b    0*4+1,4*4+1,2*4+1,5*4+1,1*4+1,6*4+1,3*4+1,7*4+1
  272.     ENDM
  273.  
  274.