xbase    set     $FF0000
yreg     set     $FFC00E
triangle move.w  sr,-(sp)
         movem.l d0-d7,-(sp)
         cmp.w   d1,d3
         bge.s   tria2big
         cmp.w   d1,d5
         bge.s   triafswp
         exg     d0,d4
         exg     d1,d5
         bra.s   triafinc
tria2big cmp.w   d3,d5
         bge.s   triahard
         exg     d2,d4
         exg     d3,d5
triafinc cmp.w   d1,d3
         bge.s   triahard
triafswp exg     d0,d2
         exg     d1,d3
triahard cmp.w   d3,d5
         beq.s   trialow
         cmp.w   d1,d3
         beq.s   triahigh
         move.w  d3,d6
         sub.w   d1,d6
         move.w  d4,d7
         sub.w   d0,d7
         muls    d6,d7
         move.w  d5,d6
         sub.w   d1,d6
         divs    d6,d7
         swap    d7
         add.w   d7,d7
         cmp.w   d6,d7
         bcs.s   traninc
         add.l   #$10000,d7
traninc  swap    d7
         add.w   d0,d7
         exg     d0,d7
         move.w  d1,d6
         move.w  d2,d1
         move.w  d3,d2
         move.w  d4,d3
         bsr.s   trapeze
         move.w  d0,d3
         move.w  d1,d4
         move.w  d2,d5
         move.w  d7,d0
         move.w  d0,d1
         move.w  d6,d2
         bra.s   triatrap
trialow  move.w  d2,d3
         move.w  d1,d2
         move.w  d0,d1
         bra.s   triatrap
triahigh move.w  d2,d1
         move.w  d3,d2
         move.w  d4,d3
triatrap bsr.s   trapeze
         movem.l (sp)+,d0-d7
         rtr
line     move.w  sr,-(sp)
         movem.l d0-d5,-(sp)
         move.w  d3,d5
         move.w  d2,d4
         move.w  d2,d3
         move.w  d1,d2
         move.w  d0,d1
         bsr.s   trapeze
         movem.l (sp)+,d0-d5
         rtr
trapeze  move.w  sr,-(sp)
         movem.l d0-d7/a0-a6,-(sp)
         lea     xbase,a1
         lea     yreg,a2
         lea     trapstab,a5
         lea     trapftab,a6
         cmp.w   d0,d1
         bge.s   trapincb
         exg     d0,d1
trapincb cmp.w   d3,d4
         bge.s   trapinct
         exg     d3,d4
trapinct sub.w   d2,d5
         beq     trapline
         bge.s   trapincy
         add.w   d5,d2
         neg.w   d5
         exg     d0,d3
         exg     d1,d4
trapincy neg.w   d2
         add.w   #289,d2
         and.w   #1023,d2
         and.w   #1023,d5
         move.w  #16,d6
         add.w   d6,d0
         add.w   d6,d1
         add.w   d6,d3
         add.w   d6,d4
         sub.w   d0,d3
         ext.l   d3
         sub.w   d1,d4
         ext.l   d4
         move.w  d5,d7
         add.w   d7,d7
         divs    d5,d3
         move.l  d3,d6
         swap    d3
         clr.w   d3
         clr.w   d6
         divs    d7,d6
         ext.l   d6
         asl.l   #1,d6
         add.l   d6,d3
         divs    d5,d4
         move.l  d4,d6
         swap    d4
         clr.w   d4
         clr.w   d6
         divs    d7,d6
         ext.l   d6
         asl.l   #1,d6
         add.l   d6,d4
         move.l  d3,a3
         move.l  d4,a4
         swap    d0
         swap    d1
         move.w  #8000,d0
         move.w  d0,d1
         tst.l   d3
         bpl.s   trapincl
         asr.l   #1,d3
         add.l   d3,d0
         move.l  d0,d3
         bra.s   traptst4
trapincl move.l  d3,d6
         move.l  d0,d3
         asr.l   #1,d6
         sub.l   d6,d0
traptst4 tst.l   d4
         bpl.s   trapincr
         move.l  d4,d6
         move.l  d1,d4
         asr.l   #1,d6
         sub.l   d6,d1
         bra.s   traplpst
trapincr asr.l   #1,d4
         add.l   d4,d1
         move.l  d1,d4
         bra.s   traplpst
trapline cmp.w   d0,d3
         ble.s   trapbtms
         exg     d0,d3
trapbtms cmp.w   d1,d4
         bge.s   traptopb
         exg     d1,d4
traptopb add     #16,d3
         add     #16,d4
         swap    d3
         swap    d4
         neg.w   d2
         add.w   #289,d2
         and.w   #1023,d2
         bra.s   traplpst
traploop tst.w   d5
         bne.s   trapnorm
         move.l  a4,d4
         bmi.s   traprok
         asr.l   #1,d4
         sub.l   d4,d1
traprok  move.l  a3,d3
         bpl.s   trapnorm
         asr.l   #1,d3
         sub.l   d3,d0
trapnorm move.l  d0,d3
         move.l  d1,d4
traplpst swap    d3
         swap    d4
         sub.w   d3,d4
         and.w   #1023,d3
         and.w   #1023,d4
         rol.w   #8,d2
         move.w  d2,(a2)
         rol.w   #8,d2
         move.w  d3,d6
         and.w   #$3F0,d6
         add.w   d6,d6
         lea     0(a1,d6.w),a0
         and.w   #$F,d3
         add.w   d3,d4
         add.w   d3,d3
         move.w  0(a5,d3.w),d6
         sub.w   #16,d4
         move.w  d4,d3
         and.w   #$F,d3
         add.w   d3,d3
         move.w  0(a6,d3.w),d7
         asr.w   #4,d4
         bmi.s   trapptdn
         move.w  d6,(a0)
         clr.l   d6
         bra.s   trapplst
trapptlp move.w  d6,(a0)
trapplst add.w   #32,a0
         dbra    d4,trapptlp
trapptdn or.w    d6,d7
         move.w  d7,(a0)
         add.l   a3,d0
         add.l   a4,d1
         sub.w   #1,d2
         dbra    d5,traploop
         movem.l (sp)+,d0-d7/a0-a6
         rtr
trapstab dc.w    $0000,$0100,$0300,$0700
         dc.w    $0F00,$1F00,$3F00,$7F00
         dc.w    $FF00,$FF01,$FF03,$FF07
         dc.w    $FF0F,$FF1F,$FF3F,$FF7F
trapftab dc.w    $FEFF,$FCFF,$F8FF,$F0FF
         dc.w    $E0FF,$C0FF,$80FF,$00FF
         dc.w    $00FE,$00FC,$00F8,$00F0
         dc.w    $00E0,$00C0,$0080,$0000
         end
