line   CALLGRAF _OwnBlitter
;       CALLEXEC _Forbid        ;DMA ein- und Task-Switching ausschalten
       movem.l d0-d7/a0-a6,-(sp)
       lea     HW,a5
       move.w  #$83c0,$96(a5)

       move.l  d6,a0   ;Zeiger auf Bitplane
       move.l  4(a0),a0
       moveq   #80,d4
       mulu    d1,d4
       moveq   #-$10,d5
       and.w   d0,d5
       lsr.w   #3,d5
       add.w   d5,d4
       add.l   a0,d4   ;d4=Startaddresse der Linie
       clr.l   d5      ;Oktant und Deltas berechnen
       sub.w   d1,d3
       roxl.b  #1,d5   ;Vorz. von DeltaX in d5 schieben
       tst.w   d3      ;N-Flag restaurieren
       bge     y2gy1   ;wenn DeltaY pos. dann y2gy1
       neg.w   d3      ;DeltaY negieren (ist dann pos)
y2gy1  sub.w   d0,d2   ;X2-X1 DeltaX nach d2
       roxl.b  #1,d5   ;Vorz. DeltaX in d5
       tst.w   d2      ;N-Flag restaurieren
       bge     x2gx1   ;Wenn DeltaX pos. dann x2gx1
       neg.w   d2      ;DeltaX negieren (ist dann pos)
x2gx1  move.w  d3,d1   ;DeltaY nach d1
       sub.w   d2,d1   ;DeltaY-DeltaX
       bge     dygdx   ;wenn DeltaY > DeltaX naxh dygdx
       exg     d2,d3   ;Kl. Delta nach d2
dygdx  roxl.b  #1,d5   ;d5=Ergebnis
       lea     okttab(pc),a2
       move.b  0(a2,d5),d5 ;Oktant holen
       add.w   d2,d2   ;Kl. Delta*2

wblit  btst    #14,$2(a5) ;dmaconr testen
       bne     wblit   ;wenn Blitter noch nicht fertig ist

       move.w  d2,$62(a5) ;2*Kl. Delta nach BLTBMOD
       sub.w   d3,d2   ;2*Kl. Delta - Gr. Delta
       bge     signnl  ;wenn 2*KDelta > GDelta nach signnl
       or.b    #$40,d5 ;Sign-Flag setzen
signnl move.w  d2,$52(a5) ;2*KDelta-GDelta in BLTAPTL
       sub.w   d3,d2   ;2*KDelta - 2*GDelta
       move.w  d2,$64(a5) ;nach BLTAMOD
;sonstige Register initialisieren
       move.w  #$8000,$74(a5)  ;BLTADAT
       move.w  #$ffff,$72(a5)  ;BLTBDAT
       move.w  #$ffff,$44(a5)  ;BLTAFWM
       and.w   #$000f,d0       ;Untere 4 Bits von X1
       ror.w   #4,d0           ;an START0-3 schieben
       or.w    #$0bca,d0       ;USEx und LFx setzen
       move.w  d0,$40(a5)      ;nach BLTCON0
       move.w  d5,$42(a5)      ;Oktant in BLTCON1
       move.l  d4,$48(a5)      ;Startadr. in BLTCPTH
       move.l  d4,$54(a5)      ;   "      in BLTDPTH
       move.w  #80,$60(a5)     ;Breite in BLTCMOD
       move.w  #80,$66(a5)     ;   "   in BLTCMOD
       lsl.w   #6,d3           ;Länge*64
       addq.w  #2,d3           ;+ width
       move.w  d3,$58(a5)      ;in BLTSIZE + Blitter starten
;       CALLEXEC _Permit
       CALLGRAF _DisownBlitter
       movem.l (sp)+,a6-a0/d7-d0
       rts

