;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*- ;;drawing line from 2 cordinates ;;# * (X_end, Y_end) # ;;# # ;;# * # ;;# * # ;;# (X_pos, Y_pos) # ;; ;;NOTE THAT X_pos <= X_end, Y_pos >= Y_end. Max 45deg! .proc line_up ;; Look at line_down for referense .include "line.inc"; Defines memory positions, ex X_pos LDA #$00 STA V + 1 STA dy_2 + 1 STA $FD SEC LDA dx SBC dy STA V Mult_16 V, V + 1 Mult_16 dy_2, dy_2 + 1 Mov_16 D, D + 1, dy_2, dy_2 + 1 Add_16 D, D + 1, #$ff, #$01, ! Sub_16 D, D + 1, dx, #$00 selfmod: LDA dy_2 STA case_2 + 1 LDA dy_2 + 1 STA case_2 + 7 LDA V STA case_1 + 1 LDA V + 1 STA case_1 + 7 end_selfmod: jsr pixel_draw Sub_16 btp_mem_pos, btp_mem_pos + 1, #$01, #$00 ;; Y has always a offset of at least 1 LDY #$01 LDX dx for_x: LDA byte_to_paint ORA (btp_mem_pos), Y STA (btp_mem_pos), Y increment_pixel_x: LSR byte_to_paint BCC increment_pixel_x_end move_8px_left: Add_16 btp_mem_pos, btp_mem_pos + 1, #$07, #$00,! LDA #%10000000 STA byte_to_paint increment_pixel_x_end: DEX ;CPX X_end BEQ end Lag_16 D, D + 1, #$00, #$02, case_2 case_1: Sub_16_A D, D + 1, #>V, #dy_2, #