shave some cycles

This commit is contained in:
4am 2020-11-21 00:35:20 -05:00
parent 2da7d1c180
commit 1e0351206f
2 changed files with 44 additions and 53 deletions

View File

@ -5,10 +5,11 @@
!to "build/FX/DHGR.SOFT.DIAG",plain !to "build/FX/DHGR.SOFT.DIAG",plain
*=$6000 *=$6000
y = $9C y = $6D
row = $9D col = $6E
col = $9E counter = $6F
counter = $9F zphgrrowlo = $70
zphgrrowhi = $88
zpcopymasks1 = $A0 zpcopymasks1 = $A0
zpcopymasks2 = $A8 zpcopymasks2 = $A8
zpcopymasks3 = $B0 zpcopymasks3 = $B0
@ -21,11 +22,9 @@ zpcopymasks3_aux = $E0
zpcopymasks4_aux = $E8 zpcopymasks4_aux = $E8
zpcopymasks5_aux = $F0 zpcopymasks5_aux = $F0
zpcopymasks6_aux = $F8 zpcopymasks6_aux = $F8
hgrlo = $BE00 ; [$C0 bytes, main memory only]
hgr1hi = $BF00 ; [$C0 bytes, main memory only]
!macro RESET_HGR_CALC_BY_7 { !macro RESET_HGR_CALC_BY_7 {
lda hgr1hi, x lda zphgrrowhi, x
sta $27 sta $27
eor #$60 eor #$60
sta $3d sta $3d
@ -47,43 +46,34 @@ hgr1hi = $BF00 ; [$C0 bytes, main memory only]
!source "src/fx/macros.a" !source "src/fx/macros.a"
!source "src/fx/fx.dhgr.common.a" !source "src/fx/fx.dhgr.common.a"
ldx #$60 +COPY_SELF_TO_AUXMEM
- lda copymasks1-1, x
sta zpcopymasks1-1, x ldx #$90
- lda hgrrowlo-1, x
sta zphgrrowlo-1, x
dex dex
bne - 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 lda #(40+24+7-1) ; columns + rows + blocks per row - 1
sta counter sta counter
lda #39 lda #39
sta col sta col
ColLoop ColLoop
lda #23 ldx #23
sta row
ldy col ldy col
sty y sty y
RowLoop RowLoop
lda row lda zphgrrowlo, x
asl
asl
asl
tax
lda hgrlo, x
sta $26 sta $26
sta $3c sta $3c
lda hgr1hi, x lda zphgrrowhi, x
sta $27 sta $27
eor #$60 eor #$60
sta $3d sta $3d
ldy y ldy y
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block2
+LBCS @block2
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks1+i +COPY_BIT_BY $3c, $26, zpcopymasks1+i
@ -94,8 +84,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block2 @block2
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block3
+LBCS @block3
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks2+i +COPY_BIT_BY $3c, $26, zpcopymasks2+i
@ -106,8 +95,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block3 @block3
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block4
+LBCS @block4
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks3+i +COPY_BIT_BY $3c, $26, zpcopymasks3+i
@ -118,8 +106,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block4 @block4
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block5
+LBCS @block5
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks4+i +COPY_BIT_BY $3c, $26, zpcopymasks4+i
@ -130,8 +117,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block5 @block5
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block6
+LBCS @block6
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks5+i +COPY_BIT_BY $3c, $26, zpcopymasks5+i
@ -142,8 +128,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block6 @block6
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block7
+LBCS @block7
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks6+i +COPY_BIT_BY $3c, $26, zpcopymasks6+i
@ -154,8 +139,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block7 @block7
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @nextrow
+LBCS @nextrow
!for i, 0, 7 { !for i, 0, 7 {
lda ($3c),y lda ($3c),y
@ -170,8 +154,7 @@ RowLoop
sta $C005 sta $C005
ldy y ldy y
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block2_aux
+LBCS @block2_aux
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks1_aux+i +COPY_BIT_BY $3c, $26, zpcopymasks1_aux+i
@ -182,8 +165,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block2_aux @block2_aux
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block3_aux
+LBCS @block3_aux
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks2_aux+i +COPY_BIT_BY $3c, $26, zpcopymasks2_aux+i
@ -194,8 +176,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block3_aux @block3_aux
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block4_aux
+LBCS @block4_aux
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks3_aux+i +COPY_BIT_BY $3c, $26, zpcopymasks3_aux+i
@ -206,8 +187,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block4_aux @block4_aux
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block5_aux
+LBCS @block5_aux
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks4_aux+i +COPY_BIT_BY $3c, $26, zpcopymasks4_aux+i
@ -218,8 +198,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block5_aux @block5_aux
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block6_aux
+LBCS @block6_aux
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks5_aux+i +COPY_BIT_BY $3c, $26, zpcopymasks5_aux+i
@ -230,8 +209,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block6_aux @block6_aux
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @block7_aux
+LBCS @block7_aux
!for i, 0, 7 { !for i, 0, 7 {
+COPY_BIT_BY $3c, $26, zpcopymasks6_aux+i +COPY_BIT_BY $3c, $26, zpcopymasks6_aux+i
@ -242,8 +220,7 @@ RowLoop
+RESET_HGR_CALC_BY_7 +RESET_HGR_CALC_BY_7
@block7_aux @block7_aux
iny iny
+IS_Y_OFFSCREEN +BRANCH_IF_Y_IS_OFFSCREEN @nextrow_aux
+LBCS @nextrow_aux
!for i, 0, 7 { !for i, 0, 7 {
lda ($3c),y lda ($3c),y
@ -259,7 +236,7 @@ RowLoop
ldy y ldy y
iny iny
sty y sty y
dec row dex
+LBPL RowLoop +LBPL RowLoop
lda $c000 lda $c000
bmi @exit bmi @exit
@ -268,6 +245,14 @@ RowLoop
+LBNE ColLoop +LBNE ColLoop
@exit rts @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 -> ;1GFEDCBA ->
;1GGFFEED (main) + ;1GGFFEED (main) +
;1DCCBBAA (aux) ;1DCCBBAA (aux)

View File

@ -131,7 +131,7 @@
sta CopyMaskAddr+1 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 ; e.g. LDY, INY, DEY, TYA
!macro IS_Y_OFFSCREEN { !macro IS_Y_OFFSCREEN {
bpl + bpl +
@ -140,6 +140,12 @@
+ cpy #40 + cpy #40
++ ++
} }
!macro BRANCH_IF_Y_IS_OFFSCREEN .target {
bpl +
- jmp .target
+ cpy #40
bcs -
}
_FX_MACROS_=* _FX_MACROS_=*
} }