home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / SCENE / IMATROLL / SRC / TC_LINE.S < prev   
Text File  |  2001-11-06  |  3KB  |  79 lines

  1. ; In: D0.w - x1
  2. ;     D1.w - y1
  3. ;     D2.w - x2
  4. ;     D3.w - y2
  5. ;     D4.w - Farbe
  6. tc_line:
  7.                    cmp.w   D2,D0   ;always left to right
  8.                    ble.s   noother
  9.                    exg     D0,D2
  10.                    exg     D1,D3
  11. noother:
  12.                    move.l  #640,D7 ;Y-Inc (Length of a Scanline)
  13.  
  14.                    move.l screen_adr,A0 ;get Screenadr.
  15.                    sub.w   D0,D2   ;dx
  16.                    add.w   D0,D0   ;*2
  17.                    adda.w  D0,A0   ;X-Screenadr.
  18.  
  19.                    sub.w   D1,D3   ;dy
  20.                    bpl.s   noabs2  ;positve?
  21.                    neg.w   D3
  22.                    neg.l   D7      ;then Y-Inc must be Y-Dec
  23. noabs2:
  24.  
  25.                    muls    #640,D1
  26.                    adda.l  D1,A0   ;Pixel-Screenadr.
  27.                                    ;alt. you could use
  28.                                    ;add.l (multab.l,pc,d1*4),a0
  29.  
  30.                    cmp.w   D2,D3   ;dy>dx?
  31.                    bgt.s   moredy
  32. ;----------------------------------
  33. moredx:
  34.                    move.w  D3,D1   ;d = 2*dy-dx
  35.                    add.w   D1,D1
  36.                    move.w  D1,D5   ;inc1=2*dy
  37.                    sub.w   D2,D1
  38.                    move.w  D1,D6   ;inc2=2*(dy-dx)
  39.                    sub.w   D2,D6
  40.  
  41.                    tst.w   D1      ;init flags in the first run
  42. setline_mdx:
  43.                    bpl.s   incy
  44. incx:
  45.                    move.w  D4,(A0)+ ;SetPix & X-Add
  46.                    add.w   D5,D1   ;d=d+inc1
  47.                    dbra    D2,setline_mdx  ;doesn't change flags
  48.                    rts
  49. incy:
  50.                    move.w  D4,(A0)+ ;SetPix & X-Add
  51.                    adda.l  D7,A0   ;Y-Add
  52.                    add.w   D6,D1   ;d=d+inc2
  53.                    dbra    D2,setline_mdx  ;doesn't change flags
  54.                    rts
  55. ;----------------------------------
  56. moredy:
  57.                    move.w  D2,D1   ;d = 2*dx-dy
  58.                    add.w   D1,D1
  59.                    move.w  D1,D5   ;inc1=2*dx
  60.                    sub.w   D3,D1
  61.                    move.w  D1,D6   ;inc2=2*(dx-dy)
  62.                    sub.w   D3,D6
  63.  
  64.                    tst.w   D1
  65. setline_mdy:
  66.                    bpl.s   incy2
  67. incx2:
  68.                    move.w  D4,(A0) ;SetPix
  69.                    adda.l  D7,A0   ;Y-Add
  70.                    add.w   D5,D1   ;d=d+inc1
  71.                    dbra    D3,setline_mdy  ;doesn't change flags
  72.                    rts
  73. incy2:
  74.                    move.w  D4,(A0)+ ;SetPix & X-Add
  75.                    adda.l  D7,A0   ;Y-Add
  76.                    add.w   D6,D1   ;d=d+inc2
  77.                    dbra    D3,setline_mdy  ;doesn't change flags
  78.                    rts
  79.