simplify branch logic for circle draw
This commit is contained in:
parent
a1089ccd1c
commit
385ae9c9e6
3 changed files with 31 additions and 43 deletions
|
@ -8,27 +8,25 @@
|
||||||
t2 = $E1
|
t2 = $E1
|
||||||
X_math = radius
|
X_math = radius
|
||||||
Y_math = $E2
|
Y_math = $E2
|
||||||
jmp_location_pointer_two = $E3 ;16-bit value (uses E4)
|
|
||||||
jmp_location_pointer = $E5 ;16-bit value (uses E6)
|
|
||||||
;; E8 - EA is used by pixel.inc
|
;; E8 - EA is used by pixel.inc
|
||||||
byte_to_paint_qaa = byte_to_paint
|
byte_to_paint_qaa = byte_to_paint
|
||||||
byte_to_paint_qcb = $EB
|
byte_to_paint_qcb = $E3
|
||||||
byte_to_paint_qca = $EC
|
byte_to_paint_qca = $E4
|
||||||
byte_to_paint_qdb = $ED
|
byte_to_paint_qdb = $E5
|
||||||
|
|
||||||
btp_mem_pos_qaa = btp_mem_pos
|
btp_mem_pos_qaa = btp_mem_pos
|
||||||
btp_mem_pos_qcb = $D0 ; 16bit value (uses D1)
|
btp_mem_pos_qcb = $E6 ; 16bit value (uses E7)
|
||||||
btp_mem_pos_qdb = $D2 ; 16bit value (uses D3)
|
btp_mem_pos_qdb = $EB ; 16bit value (uses EC)
|
||||||
btp_mem_pos_qda = $D4 ; 16bit value (uses D5)
|
btp_mem_pos_qda = $ED ; 16bit value (uses EE)
|
||||||
btp_mem_pos_qab = $D6 ; 16bit value (uses D7)
|
btp_mem_pos_qab = $D0 ; 16bit value (uses D1)
|
||||||
btp_mem_pos_qca = $D8 ; 16bit value (uses D9)
|
btp_mem_pos_qca = $D2 ; 16bit value (uses D3)
|
||||||
btp_mem_pos_qba = $DA ; 16bit value (uses DB)
|
btp_mem_pos_qba = $D4 ; 16bit value (uses D5)
|
||||||
btp_mem_pos_qbb = $DC ; 16bit value (uses DD)
|
btp_mem_pos_qbb = $D6 ; 16bit value (uses D7)
|
||||||
|
|
||||||
Y_qda = $DE
|
Y_qda = $EF
|
||||||
Y_qdb = $DF
|
Y_qdb = $D8
|
||||||
Y_qbb = $E7 ;; <-- we use E7 here!
|
Y_qbb = $D9
|
||||||
Y_qaa = $C0
|
Y_qaa = $DA
|
||||||
;;Reuse addresses, be carful here!
|
;;Reuse addresses, be carful here!
|
||||||
temp__ = Y_qaa
|
temp__ = Y_qaa
|
||||||
temp_ = Y_qda
|
temp_ = Y_qda
|
||||||
|
|
|
@ -24,16 +24,6 @@
|
||||||
.proc circle; user-procedure :clobbers (A X Y) :clobbers-arguments 3
|
.proc circle; user-procedure :clobbers (A X Y) :clobbers-arguments 3
|
||||||
|
|
||||||
.include "circle.inc"
|
.include "circle.inc"
|
||||||
;; Because loop is so big, We need to save positions in pointer
|
|
||||||
LDA #<while_x_bigger_then_y
|
|
||||||
STA jmp_location_pointer
|
|
||||||
LDA #>while_x_bigger_then_y
|
|
||||||
STA jmp_location_pointer + 1
|
|
||||||
LDA #<endif
|
|
||||||
STA jmp_location_pointer_two
|
|
||||||
LDA #>endif
|
|
||||||
STA jmp_location_pointer_two + 1
|
|
||||||
|
|
||||||
|
|
||||||
;; X_math = radius (share the same address)
|
;; X_math = radius (share the same address)
|
||||||
;;Y_math =0
|
;;Y_math =0
|
||||||
|
@ -140,7 +130,7 @@ while_x_bigger_then_y: ; C=1 here because above and branching logic
|
||||||
draw_pixels:
|
draw_pixels:
|
||||||
draw_qaa:
|
draw_qaa:
|
||||||
LDY Y_qaa
|
LDY Y_qaa
|
||||||
LDA byte_to_paint ;A byte containing a single 1. Coresponds to 2^rest(X_pos/8)
|
LDA byte_to_paint_qaa ;A byte containing a single 1. Coresponds to 2^rest(X_pos/8)
|
||||||
ORA (btp_mem_pos), Y; Y = rest(Y_pos/8)
|
ORA (btp_mem_pos), Y; Y = rest(Y_pos/8)
|
||||||
STA (btp_mem_pos), Y
|
STA (btp_mem_pos), Y
|
||||||
draw_qba:
|
draw_qba:
|
||||||
|
@ -149,7 +139,7 @@ draw_qba:
|
||||||
STA (btp_mem_pos_qba), Y
|
STA (btp_mem_pos_qba), Y
|
||||||
draw_qda:
|
draw_qda:
|
||||||
LDY Y_qda
|
LDY Y_qda
|
||||||
LDA byte_to_paint
|
LDA byte_to_paint_qaa
|
||||||
ORA (btp_mem_pos_qda), Y
|
ORA (btp_mem_pos_qda), Y
|
||||||
STA (btp_mem_pos_qda), Y
|
STA (btp_mem_pos_qda), Y
|
||||||
draw_qca:
|
draw_qca:
|
||||||
|
@ -188,10 +178,10 @@ qaa_y:
|
||||||
BPL qaa_y_end
|
BPL qaa_y_end
|
||||||
qaa_y_underflow:
|
qaa_y_underflow:
|
||||||
;; Switch to chunk bellow
|
;; Switch to chunk bellow
|
||||||
; So we subtract #$0140
|
;; So we subtract #$0140
|
||||||
;; Note that C =1, read from while_x_bigger_then_y label.
|
;; Note that C =1, read from while_x_bigger_then_y label.
|
||||||
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$40, #$01, ! ;-320
|
Sub_16 btp_mem_pos_qaa, btp_mem_pos_qaa + 1, #$40, #$01, ! ;-320
|
||||||
Sub_16 btp_mem_pos_qba, btp_mem_pos_qba + 1, #$40, #$01,!
|
Sub_16 btp_mem_pos_qba, btp_mem_pos_qba + 1, #$40, #$01, ! ;-320
|
||||||
STY Y_qaa ; Y_qaa =$07
|
STY Y_qaa ; Y_qaa =$07
|
||||||
qaa_y_end:
|
qaa_y_end:
|
||||||
qda_y:
|
qda_y:
|
||||||
|
@ -218,8 +208,8 @@ qcb_x:
|
||||||
BCC qcb_x_end
|
BCC qcb_x_end
|
||||||
qcb_x_overflow:
|
qcb_x_overflow:
|
||||||
INC byte_to_paint_qcb
|
INC byte_to_paint_qcb
|
||||||
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$08, #$00,!
|
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$08, #$00, !
|
||||||
Sub_16 btp_mem_pos_qbb, btp_mem_pos_qbb + 1, #$08, #$00,!
|
Sub_16 btp_mem_pos_qbb, btp_mem_pos_qbb + 1, #$08, #$00, !
|
||||||
CLC
|
CLC
|
||||||
qcb_x_end:
|
qcb_x_end:
|
||||||
|
|
||||||
|
@ -235,7 +225,7 @@ qcb_x_end:
|
||||||
;; if t2 < 0 then skip to endif
|
;; if t2 < 0 then skip to endif
|
||||||
;; we can skipp CMP #$00 because SBC above do the same
|
;; we can skipp CMP #$00 because SBC above do the same
|
||||||
BPL if
|
BPL if
|
||||||
JMP (jmp_location_pointer_two) ; jump to endif
|
JMP endif
|
||||||
if:
|
if:
|
||||||
change_x:
|
change_x:
|
||||||
DEC X_math
|
DEC X_math
|
||||||
|
@ -244,8 +234,8 @@ qaa_x:
|
||||||
ASL byte_to_paint
|
ASL byte_to_paint
|
||||||
BCC qaa_x_end
|
BCC qaa_x_end
|
||||||
qaa_x_overflow:
|
qaa_x_overflow:
|
||||||
Sub_16 btp_mem_pos_qaa, btp_mem_pos_qaa + 1, #$08, #$00, ! ;+8
|
Sub_16 btp_mem_pos_qaa, btp_mem_pos_qaa + 1, #$08, #$00, ! ;-8
|
||||||
Sub_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$08, #$00, ! ;+8
|
Sub_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$08, #$00, ! ;-8
|
||||||
;; Restores byte to paint
|
;; Restores byte to paint
|
||||||
INC byte_to_paint
|
INC byte_to_paint
|
||||||
qaa_x_end:
|
qaa_x_end:
|
||||||
|
@ -255,16 +245,16 @@ qca_x:
|
||||||
BCC qca_x_end
|
BCC qca_x_end
|
||||||
qca_x_overflow:
|
qca_x_overflow:
|
||||||
ROR byte_to_paint_qca
|
ROR byte_to_paint_qca
|
||||||
Add_16 btp_mem_pos_qca, btp_mem_pos_qca + 1, #$08, #$00, !
|
Add_16 btp_mem_pos_qca, btp_mem_pos_qca + 1, #$08, #$00, ! ;+8
|
||||||
Add_16 btp_mem_pos_qba, btp_mem_pos_qba + 1, #$08, #$00, !
|
Add_16 btp_mem_pos_qba, btp_mem_pos_qba + 1, #$08, #$00, ! ;+8
|
||||||
qca_x_end:
|
qca_x_end:
|
||||||
|
|
||||||
qdb_y:
|
qdb_y:
|
||||||
DEC Y_qdb
|
DEC Y_qdb
|
||||||
BPL qdb_y_end
|
BPL qdb_y_end
|
||||||
qdb_overflow:
|
qdb_overflow:
|
||||||
Sub_16 btp_mem_pos_qdb, btp_mem_pos_qdb + 1, #$3f, #$01, ! ;+320
|
Sub_16 btp_mem_pos_qdb, btp_mem_pos_qdb + 1, #$3f, #$01, ! ;-320
|
||||||
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$40, #$01, ! ;+320
|
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$40, #$01, ! ;-320
|
||||||
STY Y_qdb
|
STY Y_qdb
|
||||||
qdb_y_end:
|
qdb_y_end:
|
||||||
|
|
||||||
|
@ -285,7 +275,7 @@ endif:
|
||||||
LDA X_math
|
LDA X_math
|
||||||
CMP Y_math
|
CMP Y_math
|
||||||
BCC end
|
BCC end
|
||||||
JMP (jmp_location_pointer)
|
jmp while_x_bigger_then_y
|
||||||
end:
|
end:
|
||||||
RTS
|
RTS
|
||||||
.endproc
|
.endproc
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
|
|
||||||
;.include "routines/arithmatic/mult_test.s"
|
;.include "routines/arithmatic/mult_test.s"
|
||||||
;.include "routines/arithmatic/div_test.s"
|
;.include "routines/arithmatic/div_test.s"
|
||||||
.include "routines/circle/circle_test.s"
|
;.include "routines/circle/circle_test.s"
|
||||||
;.include "routines/circle/circle_test_size.s"
|
.include "routines/circle/circle_test_size.s"
|
||||||
;.include "routines/circle/circle_test_position.s"
|
;.include "routines/circle/circle_test_position.s"
|
||||||
;.include "routines/line/line_test.s"
|
;.include "routines/line/line_test.s"
|
||||||
;.include "routines/text/char_draw_test.s"
|
;.include "routines/text/char_draw_test.s"
|
||||||
|
|
Loading…
Add table
Reference in a new issue