;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-

.proc line; X_pos =< X_end skall alltid gälla
        ;; note that these have same adresses as stuff in line.inc
        ;; This should be used as a optimisation in the future
        dx = $0c
        dy = $06
        ;;dx
        SEC
        LDA X_end
        SBC X_pos
        STA dx
        BCC dx_no_underflow;; X_end >= X_pos
        EOR #$ff ; Fix bit underflow
        dx_no_underflow:
        SEC
        LDA Y_pos
        SBC Y_end
        STA dy
        BCC down ;normal  Y_pos < Y_end
up:; Y_pos > Y_end
        STA dy
        CMP dx
        BCC shallow; dy < dx
steep:
        jsr line_up_inv
        RTS
shallow: ;dy =< dx
        lda dx
        jsr line_up
        RTS
down:
        EOR #$ff ; Fix bit underflow
        STA dy
        CMP dx
        BCC shallow_; dy < dx
steep_:
        jsr line_down_inv
        RTS
shallow_: ;dy < dx
        jsr line_down
        RTS
.endproc
.include "line_down.s"
.include "line_down_inv.s"
.include "line_up.s"
.include "line_up_inv.s"