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

;drawing line from 2 cordinates
;;#                                      (X_end, Y_end) #
;;#                                   *                 #
;;#                         *                           #
;;#                *                                    #
;;# (X_pos, Y_pos)                                      #
;;NOTE THAT Y_pos >) Y_end, X_pos <= X_end. Min 45deg!

.proc line_up_inv
        ;; Look at line_down for referense
        .include "line.inc"; Defines memory positions, ex X_pos

        LDA #$00
        STA V + 1
        STA dx_2 + 1
        STA $FD

        SEC
        LDA dy
        SBC dx
        STA V
        Mult_16 V, V + 1

        Mult_16 dx_2, dx_2 + 1

        Mov_16 D, D + 1, dx_2, dx_2 + 1
        Add_16 D, D + 1, #$ff, #$01, !
        Sub_16 D, D + 1, dy, #$00

selfmod:
        LDA dx_2
        STA case_2 + 1
        LDA dx_2 + 1
        STA case_2 + 7
        LDA V
        STA case_1 + 1
        LDA V + 1
        STA case_1 + 7
end_selfmod:
        jsr pixel_draw
        LDY #$00
        LDX dy
for_y:
        LDA byte_to_paint
        ORA (btp_mem_pos), Y
        STA (btp_mem_pos), Y
decrement_y_pos:
        DEY
        CPY #$ff
        BNE decrement_y_pos_end
move_8px_up:
        LDY #$07
        Sub_16 btp_mem_pos, btp_mem_pos + 1,#$40 , #$01, !
decrement_y_pos_end:
        DEX
        BEQ end
        Lag_16 D, D + 1, #$00, #$02, case_2
case_1:
        Sub_16_A D, D + 1, #>V, #<V, !
increment_pixel_x:
        LDA byte_to_paint
        LSR byte_to_paint
        BCC for_y
move_8px_left:
        Add_16 btp_mem_pos, btp_mem_pos + 1, #$07, #$00,!
        LDA #%10000000
        STA byte_to_paint
        JMP for_y
case_2:
        Add_16 D, D + 1, #>dx_2, #<dx_2, !
        JMP for_y
end:
        RTS
.endproc