diff --git a/wip-hugo/routines/line/line_down.s b/wip-hugo/routines/line/line_down.s index 1580a45..87361c1 100644 --- a/wip-hugo/routines/line/line_down.s +++ b/wip-hugo/routines/line/line_down.s @@ -22,9 +22,8 @@ SEC LDA dx SBC dy + Mult_16 A, V +1 STA V - Mult_16 V, V +1 - ;dy_2 = dy*2 Mult_16 dy_2, dy_2 +1 ;>dy_2 = dy (same address) @@ -39,9 +38,21 @@ ;; and to its branch logic later in the loop. ;;D = 2*dy - dx + 2*255 - Mov_16 D, D + 1, dy_2, dy_2 + 1 - Add_16 D, D + 1, #$ff, #$01, ! - Sub_16 D, D + 1, dx, #$00 + LDA dy_2 + ADC #$ff + TAX + LDA dy + 1 + ADC #$01 + TAY + + SEC + TXA + SBC dx + STA D + TYA + SBC #$00 + STA D + 1 + selfmod: ;; Self modifying code. Makes LDA and SBC instructions each take 1 cycle less. ;; You can remove this if you run the loop without # at dy_2 and V. diff --git a/wip-hugo/routines/line/line_down_inv.s b/wip-hugo/routines/line/line_down_inv.s index f57deee..84f723d 100644 --- a/wip-hugo/routines/line/line_down_inv.s +++ b/wip-hugo/routines/line/line_down_inv.s @@ -19,15 +19,25 @@ SEC LDA dy SBC dx + Mult_16 A, V + 1 STA V - Mult_16 V, V + 1 Mult_16 dx_2, dx_2 + 1 - Mov_16 D, D + 1, dx_2, dx_2 + 1 - Add_16 D, D + 1, #$ff, #$01, ! - Sub_16 D, D + 1, dy, #$00 + LDA dx_2 + ADC #$ff + TAX + LDA dx + 1 + ADC #$01 + TAY + SEC + TXA + SBC dy + STA D + TYA + SBC #$00 + STA D + 1 selfmod: LDA dx_2 diff --git a/wip-hugo/routines/line/line_up.s b/wip-hugo/routines/line/line_up.s index d6c93d6..7952917 100644 --- a/wip-hugo/routines/line/line_up.s +++ b/wip-hugo/routines/line/line_up.s @@ -21,14 +21,25 @@ SEC LDA dx SBC dy + Mult_16 A, V + 1 STA V - Mult_16 V, V + 1 - Mult_16 dy_2, dy_2 + 1 - Mov_16 D, D + 1, dy_2, dy_2 + 1 - Add_16 D, D + 1, #$ff, #$01, ! - Sub_16 D, D + 1, dx, #$00 + + LDA dy_2 + ADC #$ff + TAX + LDA dy + 1 + ADC #$01 + TAY + + SEC + TXA + SBC dx + STA D + TYA + SBC #$00 + STA D + 1 selfmod: LDA dy_2 diff --git a/wip-hugo/routines/line/line_up_inv.s b/wip-hugo/routines/line/line_up_inv.s index c847147..fe08ed6 100644 --- a/wip-hugo/routines/line/line_up_inv.s +++ b/wip-hugo/routines/line/line_up_inv.s @@ -20,14 +20,25 @@ SEC LDA dy SBC dx + Mult_16 A, V + 1 STA V - Mult_16 V, V + 1 Mult_16 dx_2, dx_2 + 1 - Mov_16 D, D + 1, dx_2, dx_2 + 1 - Add_16 D, D + 1, #$ff, #$01, ! - Sub_16 D, D + 1, dy, #$00 + LDA dx_2 + ADC #$ff + TAX + LDA dx + 1 + ADC #$01 + TAY + + SEC + TXA + SBC dy + STA D + TYA + SBC #$00 + STA D + 1 selfmod: LDA dx_2