From 1e0351206fbe3ac44c09d6abe2994ee899f7dad2 Mon Sep 17 00:00:00 2001 From: 4am Date: Sat, 21 Nov 2020 00:35:20 -0500 Subject: [PATCH] shave some cycles --- src/fx/fx.dhgr.soft.diagonal.a | 89 ++++++++++++++-------------------- src/fx/macros.a | 8 ++- 2 files changed, 44 insertions(+), 53 deletions(-) diff --git a/src/fx/fx.dhgr.soft.diagonal.a b/src/fx/fx.dhgr.soft.diagonal.a index 3dff15e3d..b6de9ccea 100644 --- a/src/fx/fx.dhgr.soft.diagonal.a +++ b/src/fx/fx.dhgr.soft.diagonal.a @@ -5,10 +5,11 @@ !to "build/FX/DHGR.SOFT.DIAG",plain *=$6000 -y = $9C -row = $9D -col = $9E -counter = $9F +y = $6D +col = $6E +counter = $6F +zphgrrowlo = $70 +zphgrrowhi = $88 zpcopymasks1 = $A0 zpcopymasks2 = $A8 zpcopymasks3 = $B0 @@ -21,11 +22,9 @@ zpcopymasks3_aux = $E0 zpcopymasks4_aux = $E8 zpcopymasks5_aux = $F0 zpcopymasks6_aux = $F8 -hgrlo = $BE00 ; [$C0 bytes, main memory only] -hgr1hi = $BF00 ; [$C0 bytes, main memory only] !macro RESET_HGR_CALC_BY_7 { - lda hgr1hi, x + lda zphgrrowhi, x sta $27 eor #$60 sta $3d @@ -47,43 +46,34 @@ hgr1hi = $BF00 ; [$C0 bytes, main memory only] !source "src/fx/macros.a" !source "src/fx/fx.dhgr.common.a" - ldx #$60 -- lda copymasks1-1, x - sta zpcopymasks1-1, x + +COPY_SELF_TO_AUXMEM + + ldx #$90 +- lda hgrrowlo-1, x + sta zphgrrowlo-1, x dex bne - - +BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi - - +COPY_SELF_TO_AUXMEM - lda #(40+24+7-1) ; columns + rows + blocks per row - 1 sta counter lda #39 sta col ColLoop - lda #23 - sta row + ldx #23 ldy col sty y RowLoop - lda row - asl - asl - asl - tax - lda hgrlo, x + lda zphgrrowlo, x sta $26 sta $3c - lda hgr1hi, x + lda zphgrrowhi, x sta $27 eor #$60 sta $3d ldy y - +IS_Y_OFFSCREEN - +LBCS @block2 + +BRANCH_IF_Y_IS_OFFSCREEN @block2 !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks1+i @@ -94,8 +84,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block2 iny - +IS_Y_OFFSCREEN - +LBCS @block3 + +BRANCH_IF_Y_IS_OFFSCREEN @block3 !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks2+i @@ -106,8 +95,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block3 iny - +IS_Y_OFFSCREEN - +LBCS @block4 + +BRANCH_IF_Y_IS_OFFSCREEN @block4 !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks3+i @@ -118,8 +106,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block4 iny - +IS_Y_OFFSCREEN - +LBCS @block5 + +BRANCH_IF_Y_IS_OFFSCREEN @block5 !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks4+i @@ -130,8 +117,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block5 iny - +IS_Y_OFFSCREEN - +LBCS @block6 + +BRANCH_IF_Y_IS_OFFSCREEN @block6 !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks5+i @@ -142,8 +128,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block6 iny - +IS_Y_OFFSCREEN - +LBCS @block7 + +BRANCH_IF_Y_IS_OFFSCREEN @block7 !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks6+i @@ -154,8 +139,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block7 iny - +IS_Y_OFFSCREEN - +LBCS @nextrow + +BRANCH_IF_Y_IS_OFFSCREEN @nextrow !for i, 0, 7 { lda ($3c),y @@ -170,8 +154,7 @@ RowLoop sta $C005 ldy y - +IS_Y_OFFSCREEN - +LBCS @block2_aux + +BRANCH_IF_Y_IS_OFFSCREEN @block2_aux !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks1_aux+i @@ -182,8 +165,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block2_aux iny - +IS_Y_OFFSCREEN - +LBCS @block3_aux + +BRANCH_IF_Y_IS_OFFSCREEN @block3_aux !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks2_aux+i @@ -194,8 +176,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block3_aux iny - +IS_Y_OFFSCREEN - +LBCS @block4_aux + +BRANCH_IF_Y_IS_OFFSCREEN @block4_aux !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks3_aux+i @@ -206,8 +187,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block4_aux iny - +IS_Y_OFFSCREEN - +LBCS @block5_aux + +BRANCH_IF_Y_IS_OFFSCREEN @block5_aux !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks4_aux+i @@ -218,8 +198,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block5_aux iny - +IS_Y_OFFSCREEN - +LBCS @block6_aux + +BRANCH_IF_Y_IS_OFFSCREEN @block6_aux !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks5_aux+i @@ -230,8 +209,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block6_aux iny - +IS_Y_OFFSCREEN - +LBCS @block7_aux + +BRANCH_IF_Y_IS_OFFSCREEN @block7_aux !for i, 0, 7 { +COPY_BIT_BY $3c, $26, zpcopymasks6_aux+i @@ -242,8 +220,7 @@ RowLoop +RESET_HGR_CALC_BY_7 @block7_aux iny - +IS_Y_OFFSCREEN - +LBCS @nextrow_aux + +BRANCH_IF_Y_IS_OFFSCREEN @nextrow_aux !for i, 0, 7 { lda ($3c),y @@ -259,7 +236,7 @@ RowLoop ldy y iny sty y - dec row + dex +LBPL RowLoop lda $c000 bmi @exit @@ -268,6 +245,14 @@ RowLoop +LBNE ColLoop @exit rts +hgrrowlo + !byte $00,$80,$00,$80,$00,$80,$00,$80 + !byte $28,$A8,$28,$A8,$28,$A8,$28,$A8 + !byte $50,$D0,$50,$D0,$50,$D0,$50,$D0 +hgrrowhi + !byte $20,$20,$21,$21,$22,$22,$23,$23 + !byte $20,$20,$21,$21,$22,$22,$23,$23 + !byte $20,$20,$21,$21,$22,$22,$23,$23 ;1GFEDCBA -> ;1GGFFEED (main) + ;1DCCBBAA (aux) diff --git a/src/fx/macros.a b/src/fx/macros.a index 13c836d5b..dff050ddc 100644 --- a/src/fx/macros.a +++ b/src/fx/macros.a @@ -131,7 +131,7 @@ sta CopyMaskAddr+1 } -; must set N flag based on Y immediately before using this macro +; must set N flag based on Y immediately before using these macros ; e.g. LDY, INY, DEY, TYA !macro IS_Y_OFFSCREEN { bpl + @@ -140,6 +140,12 @@ + cpy #40 ++ } +!macro BRANCH_IF_Y_IS_OFFSCREEN .target { + bpl + +- jmp .target ++ cpy #40 + bcs - +} _FX_MACROS_=* }