Do some renaming and change the code structure for circle-draw

This commit is contained in:
hugova 2025-06-30 22:18:45 +02:00
parent fd587ea440
commit bdca0cd82a
3 changed files with 69 additions and 59 deletions

View file

@ -14,10 +14,16 @@
; E8 - EA is used by pixel.inc
btp_mem_pos_center = $E6 ; 16bit value (uses E7)
btp_mem_pos_center_two = btp_mem_pos_center
btp_mem_pos_inv_y =$EB ; 16bit value (uses EC)
btp_mem_pos_inv = $ED ; 16bit value (uses EE)
btp_mem_pos_swop = $D0 ; 16bit value (uses D1)
temp__ = $D2
temp___ = $D3
btp_mem_pos_swop_inv_y = $D4 ;16bit value (uses D5)
temp__ = $D0
temp___ = $D1
btp_mem_pos_qaa = btp_mem_pos
btp_mem_pos_qcb = $D2 ; 16bit value (uses D3)
btp_mem_pos_qdb = $D4 ;16bit value (uses D5)
btp_mem_pos_qda =$D6 ; 16bit value (uses D7)
;;mirrord
btp_mem_pos_qab = $D8
btp_mem_pos_qca = $DA
btp_mem_pos_qba = $DC
btp_mem_pos_qbb = $DE

View file

@ -41,14 +41,14 @@ draw_lower_px_in_circle:
JSR pixel_draw
LDA btp_mem_pos
STA btp_mem_pos_swop
STA btp_mem_pos_swop_inv_y
STA btp_mem_pos_qcb
STA btp_mem_pos_qdb
LDA btp_mem_pos + 1
STA btp_mem_pos_swop_inv_y + 1
STA btp_mem_pos_swop + 1
STA btp_mem_pos_qdb + 1
STA btp_mem_pos_qcb + 1
;; fix offset of 8 bytes, idk why this is needed
Sub_16 btp_mem_pos_swop, btp_mem_pos_swop + 1, #$40, #$01 ;-320
Sub_16 btp_mem_pos_swop_inv_y, btp_mem_pos_swop_inv_y + 1, #$40, #$01 ;-320
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$40, #$01 ;-320
Sub_16 btp_mem_pos_qdb, btp_mem_pos_qdb + 1, #$40, #$01 ;-320
LDA temp
STA Y_pos
@ -63,12 +63,12 @@ draw_right_px_in_circle:
;; This sets byte_to_paint, btp_mem_pos and Y
LDA btp_mem_pos
STA btp_mem_pos_inv_y
STA btp_mem_pos_qda
LDA btp_mem_pos + 1
STA btp_mem_pos_inv_y + 1
STA btp_mem_pos_qda + 1
;; fix offset of 8 bytes, idk why this is needed
Sub_16 btp_mem_pos_inv_y, btp_mem_pos_inv_y + 1, #$40, #$01 ;-320
Sub_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$40, #$01 ;-320
@ -103,11 +103,11 @@ move_8px_left:
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$08, #$00, !
;; Y is inverted
Sub_16 btp_mem_pos_inv_y, btp_mem_pos_inv_y + 1, #$08, #$00, !
Sub_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$08, #$00, !
;; X and Y has swoped
Sub_16 btp_mem_pos_swop, btp_mem_pos_swop + 1, #$40, #$01 ;-320
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$40, #$01 ;-320
;; X and Y has swoped and Y has inverted
Sub_16 btp_mem_pos_swop_inv_y, btp_mem_pos_swop_inv_y +1, #$40, #$01 ;+320
Sub_16 btp_mem_pos_qdb, btp_mem_pos_qdb +1, #$40, #$01 ;+320
;; Restores byte to paint
LDA #%00000001

View file

@ -15,13 +15,39 @@
;; v Y
;; The q stands for quarter, whe have 4 quarter, and each quarter is split into 2
;; We first calculate all btp_mem_pos for the inverted half quarters!
calculate_inverted_bmp:
;; qab = 2*center - qcb
;; qca = 2*center - qaa
;; qbq = 2*center - qda
LDA btp_mem_pos_center_two
SBC btp_mem_pos_qcb
STA btp_mem_pos_qab
LDA btp_mem_pos_center_two + 1
SBC btp_mem_pos_qcb + 1
STA btp_mem_pos_qab + 1
LDA btp_mem_pos_center_two
SBC btp_mem_pos
STA btp_mem_pos_qca
LDA btp_mem_pos_center_two + 1
SBC btp_mem_pos + 1
STA btp_mem_pos_qca + 1
LDA btp_mem_pos_center_two
SBC btp_mem_pos_qda
STA btp_mem_pos_qba
LDA btp_mem_pos_center_two + 1
SBC btp_mem_pos_qda + 1
STA btp_mem_pos_qba + 1
draw_qaa:
LDA byte_to_paint ;A byte containing a single 1. Coresponds to X position in the chunk.
ORA (btp_mem_pos), Y
STA (btp_mem_pos), Y
;; something is wrong | well isue for another time
draw_qcb:; xy swaped
STY temp
LDA byte_to_paint
@ -46,8 +72,8 @@ revert_byte_to_paint:
LDY temp___
ORA (btp_mem_pos_swop), Y
STA (btp_mem_pos_swop), Y;
ORA (btp_mem_pos_qcb), Y
STA (btp_mem_pos_qcb), Y;
draw_qdb:; xy swaped and y is inverted.
@ -60,20 +86,10 @@ draw_qdb:; xy swaped and y is inverted.
;;Uses modifyed Y from above
ORA (btp_mem_pos_swop_inv_y), Y
STA (btp_mem_pos_swop_inv_y), Y;
LDY temp
LDA temp__
STA byte_to_paint
ORA (btp_mem_pos_qdb), Y
STA (btp_mem_pos_qdb), Y;
draw_qab:; xy swoped + mirroring
LDA btp_mem_pos_center_two
SBC btp_mem_pos_swop
STA btp_mem_pos_inv
LDA btp_mem_pos_center_two + 1
SBC btp_mem_pos_swop + 1
STA btp_mem_pos_inv + 1
SEC
LDA #$07
@ -85,30 +101,22 @@ draw_qab:; xy swoped + mirroring
TAX
LDA binary_factor, X; (see END.s)
ORA (btp_mem_pos_inv), Y
STA (btp_mem_pos_inv), Y
ORA (btp_mem_pos_qab), Y
STA (btp_mem_pos_qab), Y
LDY temp
draw_qda:; y is inverted
;; invert Y, this is shared with qca
STY temp
LDA #$07
SBC temp
TAY
LDA byte_to_paint
ORA (btp_mem_pos_inv_y), Y
STA (btp_mem_pos_inv_y), Y
ORA (btp_mem_pos_qda), Y
STA (btp_mem_pos_qda), Y
draw_qca: ;;mirror technique
;SEC
LDA btp_mem_pos_center_two
SBC btp_mem_pos
STA btp_mem_pos_inv
LDA btp_mem_pos_center_two + 1
SBC btp_mem_pos + 1
STA btp_mem_pos_inv + 1
;; calculate byte_to_paint_inv 00000001 --> 10000000, 00000010 --> 01000000 ... etc
;; uses a table!
@ -118,24 +126,20 @@ draw_qca: ;;mirror technique
TAX ;; A is saved to x because qba use this as well
; A = byte_to_paint_inv
ORA (btp_mem_pos_inv), Y
STA (btp_mem_pos_inv), Y
ORA (btp_mem_pos_qca), Y
STA (btp_mem_pos_qca), Y
;;Recover the Y value (we changed it because evrything is inverted)
LDY temp
draw_qba: ;;mirror_technique
;SEC
LDA btp_mem_pos_center_two
SBC btp_mem_pos_inv_y
STA btp_mem_pos_inv
LDA btp_mem_pos_center_two + 1
SBC btp_mem_pos_inv_y + 1
STA btp_mem_pos_inv + 1
TXA
ORA (btp_mem_pos_inv), Y
STA (btp_mem_pos_inv), Y
ORA (btp_mem_pos_qba), Y
STA (btp_mem_pos_qba), Y
increment_y_pos:
INC Y_rel ; y++
@ -149,11 +153,11 @@ move_8px_down:
Sub_16 btp_mem_pos, btp_mem_pos + 1, #$40, #$01, ! ;-320
;; Y is inverted
Add_16 btp_mem_pos_inv_y, btp_mem_pos_inv_y + 1, #$40, #$01 ;+320
Add_16 btp_mem_pos_qda, btp_mem_pos_qda + 1, #$40, #$01 ;+320
;; X and Y has swopped
Sub_16 btp_mem_pos_swop, btp_mem_pos_swop + 1, #$08, #$00
Sub_16 btp_mem_pos_qcb, btp_mem_pos_qcb + 1, #$08, #$00
;; X and Y has swoped and Y has inverted
Add_16 btp_mem_pos_swop_inv_y, btp_mem_pos_swop_inv_y +1, #$08, #$00
Add_16 btp_mem_pos_qdb, btp_mem_pos_qdb +1, #$08, #$00
increment_y_pos_end:
RTS
.endproc