From bdca0cd82a7ceca56f5e0fac91a60d42e00b646e Mon Sep 17 00:00:00 2001 From: hugova Date: Mon, 30 Jun 2025 22:18:45 +0200 Subject: [PATCH] Do some renaming and change the code structure for circle-draw --- wip-hugo/routines/circle/circle.inc | 18 ++++-- wip-hugo/routines/circle/circle.s | 24 +++---- wip-hugo/routines/circle/circle_help.s | 86 ++++++++++++++------------ 3 files changed, 69 insertions(+), 59 deletions(-) diff --git a/wip-hugo/routines/circle/circle.inc b/wip-hugo/routines/circle/circle.inc index 6d53416..adbe318 100644 --- a/wip-hugo/routines/circle/circle.inc +++ b/wip-hugo/routines/circle/circle.inc @@ -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 diff --git a/wip-hugo/routines/circle/circle.s b/wip-hugo/routines/circle/circle.s index af2bc75..88a221c 100644 --- a/wip-hugo/routines/circle/circle.s +++ b/wip-hugo/routines/circle/circle.s @@ -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 diff --git a/wip-hugo/routines/circle/circle_help.s b/wip-hugo/routines/circle/circle_help.s index 0e32a59..148e5d6 100644 --- a/wip-hugo/routines/circle/circle_help.s +++ b/wip-hugo/routines/circle/circle_help.s @@ -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