diff --git a/wip-hugo/routines/circle/circle.inc b/wip-hugo/routines/circle/circle.inc index 4c3c742..6d53416 100644 --- a/wip-hugo/routines/circle/circle.inc +++ b/wip-hugo/routines/circle/circle.inc @@ -20,3 +20,4 @@ btp_mem_pos_swop = $D0 ; 16bit value (uses D1) temp__ = $D2 temp___ = $D3 + btp_mem_pos_swop_inv_y = $D4 ;16bit value (uses D5) diff --git a/wip-hugo/routines/circle/circle.s b/wip-hugo/routines/circle/circle.s index 98e562e..af2bc75 100644 --- a/wip-hugo/routines/circle/circle.s +++ b/wip-hugo/routines/circle/circle.s @@ -42,10 +42,13 @@ draw_lower_px_in_circle: LDA btp_mem_pos STA btp_mem_pos_swop + STA btp_mem_pos_swop_inv_y LDA btp_mem_pos + 1 + STA btp_mem_pos_swop_inv_y + 1 STA btp_mem_pos_swop + 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, 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 LDA temp STA Y_pos @@ -69,29 +72,11 @@ draw_right_px_in_circle: -SEC ;; See draw_pixel_inv +SEC ;; circle_help expect this while_x_bigger_then_y: - ;;Draw pixels + ;;Draw pixels and does the ypos incrementation logic JSR circle_help -increment_y_pos: - INC Y_rel ; y++ - DEY - BPL increment_y_pos_end -move_8px_down: - LDY #$07 - ;; Switch to chunk bellow - ; So we subtract #$0140 - ; C = 1 because branching! - 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 - ;; X and Y has swopped - Sub_16 btp_mem_pos_swop, btp_mem_pos_swop + 1, #$08, #$00 - - -increment_y_pos_end: ;;t1 += y CLC @@ -119,10 +104,10 @@ move_8px_left: ;; Y is inverted Sub_16 btp_mem_pos_inv_y, btp_mem_pos_inv_y + 1, #$08, #$00, ! - ;; X and Y has swoped Sub_16 btp_mem_pos_swop, btp_mem_pos_swop + 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 ;; 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 5cee148..a917c87 100644 --- a/wip-hugo/routines/circle/circle_help.s +++ b/wip-hugo/routines/circle/circle_help.s @@ -3,7 +3,7 @@ ;;We have named the parts of the circle as such. -;; | +;; * | ;; qbb | qab ;; | ;; qba | qaa @@ -11,7 +11,7 @@ ;; qca | qda ;; | ;; qcb | qdb -;; | +;; | * ;; v Y ;; The q stands for quarter, whe have 4 quarter, and each quarter is split into 2 @@ -33,7 +33,7 @@ draw_qcb:; xy swaped loop: INY goto_loop: - asl byte_to_paint; lsr asl + ASL byte_to_paint; lsr asl BCC loop STY temp___ @@ -46,8 +46,22 @@ goto_loop: ORA (btp_mem_pos_swop), Y STA (btp_mem_pos_swop), Y; +;; this one is buggy +draw_qdb:; xy swaped and y is inverted. -draw_qab: ;xy swoped + mirroring + LDX temp + LDA binary_factor, X; (see END.s) + TAX + LDA inverse_factor_value, X;; (see END.s) + + ORA (btp_mem_pos_swop_inv_y), Y + STA (btp_mem_pos_swop_inv_y), Y; + + SEC + LDA #$07 + SBC temp___ + TAY +draw_qab:; xy swoped + mirroring LDA btp_mem_pos_center_two SBC btp_mem_pos_swop @@ -56,38 +70,33 @@ draw_qab: ;xy swoped + mirroring SBC btp_mem_pos_swop + 1 STA btp_mem_pos_inv + 1 - LDY temp___ - SEC LDA #$07 - SBC temp___ - TAY + SBC temp + TAX + LDA binary_factor, X; (see END.s) - LDX byte_to_paint - LDA inverse_factor_value, X;; (see END.s) TAX ;; A is saved to x because qba use this as well ORA (btp_mem_pos_inv), Y STA (btp_mem_pos_inv), Y LDY temp - LDX temp_ +; LDX temp_ LDA temp__ STA byte_to_paint -draw_qda: - ;; inverted Y, this is shared with qca +draw_qda:; y is inverted + ;; invert Y, this is shared with qca STY temp LDA #$07 - SEC + ;SEC SBC temp TAY - LDA byte_to_paint ORA (btp_mem_pos_inv_y), Y STA (btp_mem_pos_inv_y), Y draw_qca: ;;mirror technique - SEC - ;;C = 1 beacause the branching to while_x_bigger_then_y and SEC on first ittteration. + ;SEC LDA btp_mem_pos_center_two SBC btp_mem_pos STA btp_mem_pos_inv @@ -110,7 +119,7 @@ draw_qca: ;;mirror technique LDY temp draw_qba: ;;mirror_technique - SEC + ;SEC LDA btp_mem_pos_center_two SBC btp_mem_pos_inv_y STA btp_mem_pos_inv @@ -125,5 +134,23 @@ draw_qba: ;;mirror_technique ORA (btp_mem_pos_inv), Y STA (btp_mem_pos_inv), Y +increment_y_pos: + INC Y_rel ; y++ + DEY + BPL increment_y_pos_end +move_8px_down: + LDY #$07 + ;; Switch to chunk bellow + ; So we subtract #$0140 + ; C = 1 because branching! + 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 + ;; X and Y has swopped + Sub_16 btp_mem_pos_swop, btp_mem_pos_swop + 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 +increment_y_pos_end: RTS .endproc