fix most of by one errors of linedraw.
This commit is contained in:
parent
185f37dccc
commit
8eb5ff855b
6 changed files with 52 additions and 20 deletions
|
@ -5,26 +5,24 @@
|
||||||
.include "line.inc"
|
.include "line.inc"
|
||||||
|
|
||||||
;; Fix line that is too long
|
;; Fix line that is too long
|
||||||
LDA Y_pos
|
LDA #$C8 ;y_max = $C8
|
||||||
CMP #$C8 ;;y_max = $C8
|
CMP Y_pos
|
||||||
BCC do_not_fix_y_pos
|
BCS do_not_fix_y_pos
|
||||||
LDA #$C8
|
|
||||||
STA Y_pos
|
STA Y_pos
|
||||||
do_not_fix_y_pos:
|
do_not_fix_y_pos:
|
||||||
LDA Y_end
|
|
||||||
CMP #$C8 ;;y_max = $C8
|
|
||||||
BCC do_not_fix_y_end
|
|
||||||
LDA #$C8
|
LDA #$C8
|
||||||
|
CMP Y_pos ;y_max = $C8
|
||||||
|
BCS do_not_fix_y_end
|
||||||
STA Y_end
|
STA Y_end
|
||||||
do_not_fix_y_end:
|
do_not_fix_y_end:
|
||||||
|
|
||||||
|
|
||||||
;;dx
|
;;dx
|
||||||
SEC
|
SEC
|
||||||
LDA X_end
|
LDA X_end
|
||||||
SBC X_pos
|
SBC X_pos
|
||||||
BCS dx_no_underflow;; X_end >= X_pos
|
BCS dx_no_underflow;; X_end >= X_pos
|
||||||
EOR #$ff ; Fix bit underflow
|
EOR #$ff ; Fix bit underflow
|
||||||
|
ADC #$01
|
||||||
STA dx
|
STA dx
|
||||||
;; line_* expect X_pos < X_end and now its not the case.
|
;; line_* expect X_pos < X_end and now its not the case.
|
||||||
;; Lets move them around
|
;; Lets move them around
|
||||||
|
@ -36,28 +34,27 @@ do_not_fix_y_end:
|
||||||
LDY Y_end
|
LDY Y_end
|
||||||
STX Y_end
|
STX Y_end
|
||||||
STY Y_pos
|
STY Y_pos
|
||||||
|
|
||||||
|
|
||||||
dx_no_underflow:
|
dx_no_underflow:
|
||||||
STA dx
|
STA dx
|
||||||
|
|
||||||
SEC
|
SEC
|
||||||
LDA Y_pos
|
LDA Y_end
|
||||||
SBC Y_end
|
SBC Y_pos
|
||||||
STA dy
|
BCS down ;normal Y_pos < Y_end
|
||||||
BCC down ;normal Y_pos < Y_end
|
|
||||||
up:; Y_pos > Y_end
|
up:; Y_pos > Y_end
|
||||||
|
EOR #$ff ; Fix bit underflow
|
||||||
|
ADC #$01
|
||||||
STA dy
|
STA dy
|
||||||
|
|
||||||
CMP dx
|
CMP dx
|
||||||
BCC shallow; dy < dx
|
BCC shallow; dy < dx
|
||||||
steep:
|
steep:
|
||||||
jsr line_up_inv
|
jsr line_up_inv
|
||||||
RTS
|
RTS
|
||||||
shallow: ;dy =< dx
|
shallow: ;dy =< dx
|
||||||
lda dx
|
|
||||||
jsr line_up
|
jsr line_up
|
||||||
RTS
|
RTS
|
||||||
down:
|
down:
|
||||||
EOR #$ff ; Fix bit underflow
|
|
||||||
STA dy
|
STA dy
|
||||||
CMP dx
|
CMP dx
|
||||||
BCC shallow_; dy < dx
|
BCC shallow_; dy < dx
|
||||||
|
|
|
@ -67,6 +67,7 @@ end_selfmod:
|
||||||
STA byte_to_paint
|
STA byte_to_paint
|
||||||
;; X = X_end - X_pos
|
;; X = X_end - X_pos
|
||||||
LDX dx
|
LDX dx
|
||||||
|
INX ; okay if it overflow to $00 because it will go back to $ff in loop.
|
||||||
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$00, #$00,! ;; Y has always a offset of at least 1 = C + $0000
|
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$00, #$00,! ;; Y has always a offset of at least 1 = C + $0000
|
||||||
INY
|
INY
|
||||||
for_x:
|
for_x:
|
||||||
|
|
|
@ -55,6 +55,7 @@ end_selfmod:
|
||||||
INY
|
INY
|
||||||
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$00, #$00, !
|
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$00, #$00, !
|
||||||
LDX dy
|
LDX dy
|
||||||
|
INX
|
||||||
CLC
|
CLC
|
||||||
for_y: ; C =0
|
for_y: ; C =0
|
||||||
LDA byte_to_paint
|
LDA byte_to_paint
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
X_pos_ = $0E
|
X_pos_ = $0E
|
||||||
Y_end_ = $0F
|
Y_end_ = $0F
|
||||||
X_end_ = $0C
|
X_end_ = $0C
|
||||||
|
|
||||||
|
full_angle_test:
|
||||||
LDA #$d2
|
LDA #$d2
|
||||||
STA X_pos_
|
STA X_pos_
|
||||||
LDA #$62
|
LDA #$62
|
||||||
|
@ -36,14 +38,43 @@
|
||||||
|
|
||||||
jsr clear_screen
|
jsr clear_screen
|
||||||
|
|
||||||
|
full_angle_test_pos_end_swapped:
|
||||||
|
LDA #$d2
|
||||||
|
STA X_end_
|
||||||
|
LDA #$62
|
||||||
|
STA Y_end_
|
||||||
|
LDA #$ff
|
||||||
|
STA X_pos_
|
||||||
|
LDA #$0
|
||||||
|
STA Y_pos_
|
||||||
|
|
||||||
|
;; Full angle test
|
||||||
|
@loop:
|
||||||
|
LDA Y_end_
|
||||||
|
STA Y_end
|
||||||
|
LDA X_end_
|
||||||
|
STA X_end
|
||||||
|
LDA X_pos_
|
||||||
|
STA X_pos
|
||||||
|
LDA Y_pos_
|
||||||
|
STA Y_pos
|
||||||
|
|
||||||
|
jsr line
|
||||||
|
INC Y_pos_
|
||||||
|
LDA Y_pos_
|
||||||
|
CMP #$ff
|
||||||
|
bne @loop
|
||||||
|
|
||||||
|
jsr clear_screen
|
||||||
|
|
||||||
long_line_test_a:
|
long_line_test_a:
|
||||||
LDA #$00
|
LDA #$01
|
||||||
STA X_pos_
|
STA X_pos_
|
||||||
LDA #$60
|
LDA #$60
|
||||||
STA Y_pos_
|
STA Y_pos_
|
||||||
LDA #$ff
|
LDA #$ff
|
||||||
STA X_end_
|
STA X_end_
|
||||||
LDA #$0
|
LDA #$00
|
||||||
STA Y_end_
|
STA Y_end_
|
||||||
@loop:
|
@loop:
|
||||||
LDA Y_pos_
|
LDA Y_pos_
|
||||||
|
@ -64,7 +95,7 @@ long_line_test_a:
|
||||||
jsr clear_screen
|
jsr clear_screen
|
||||||
|
|
||||||
long_line_test_b:
|
long_line_test_b:
|
||||||
LDA #$00
|
LDA #$01
|
||||||
STA X_pos_
|
STA X_pos_
|
||||||
LDA #$00
|
LDA #$00
|
||||||
STA Y_pos_
|
STA Y_pos_
|
||||||
|
@ -90,7 +121,7 @@ long_line_test_b:
|
||||||
jsr clear_screen
|
jsr clear_screen
|
||||||
|
|
||||||
long_line_test_b_pos_end_swapped:
|
long_line_test_b_pos_end_swapped:
|
||||||
LDA #$00
|
LDA #$01
|
||||||
STA X_end_
|
STA X_end_
|
||||||
LDA #$00
|
LDA #$00
|
||||||
STA Y_end_
|
STA Y_end_
|
||||||
|
|
|
@ -50,6 +50,7 @@ end_selfmod:
|
||||||
;LDY #$01
|
;LDY #$01
|
||||||
INY
|
INY
|
||||||
LDX dx
|
LDX dx
|
||||||
|
INX
|
||||||
for_x:
|
for_x:
|
||||||
LDA byte_to_paint
|
LDA byte_to_paint
|
||||||
ORA (btp_mem_pos), Y
|
ORA (btp_mem_pos), Y
|
||||||
|
|
|
@ -52,6 +52,7 @@ end_selfmod:
|
||||||
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$00, #$00,!
|
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$00, #$00,!
|
||||||
CLC
|
CLC
|
||||||
LDX dy
|
LDX dy
|
||||||
|
INX
|
||||||
for_y:
|
for_y:
|
||||||
LDA byte_to_paint
|
LDA byte_to_paint
|
||||||
ORA (btp_mem_pos), Y
|
ORA (btp_mem_pos), Y
|
||||||
|
|
Loading…
Add table
Reference in a new issue