;;; -*- 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 STA <dy_2 STA $FD SEC LDA dx SBC dy STA >V Mult_16 >V, <V Mult_16 >dy_2, <dy_2 Mov_16 >D, <D, >dy_2, <dy_2 Add_16 >D, <D, #$ff, #$01, ! Sub_16 >D, <D, dx, #$00 selfmod: LDA >dy_2 STA case_2 +1 LDA <dy_2 STA case_2 +7 LDA >V STA case_1 +1 LDA <V STA case_1 +7 end_selfmod: jsr pixel_draw Sub_16 >btp_mem_pos, <btp_mem_pos, #$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, #$07, #$00,! LDA #%10000000 STA byte_to_paint increment_pixel_x_end: DEX ;CPX X_end BEQ end Lag_16 >D, <D, #$00, #$02, case_2 case_1: Sub_16_A >D, <D, #>V, #<V,! decrement_y_pos: DEY BNE for_x move_8px_up: LDY #$08 Sub_16 >btp_mem_pos, <btp_mem_pos, #$40, #$01, ! jmp for_x decrement_y_pos_end: case_2: Add_16 >D, <D, #>dy_2, #<dy_2,! JMP for_x end: RTS .endproc