shave some cycles (refactor RESET/INC macros)

This commit is contained in:
4am
2020-11-21 21:07:09 -05:00
parent ef30220aa4
commit ab5d4a9b94

View File

@@ -11,58 +11,40 @@ row = $FD
col = $FE col = $FE
counter = $FF counter = $FF
!macro INC_HGR_HI_BY .blocks { !macro SET_HGR_HI_WITH_OFFSET .offset {
; lda dst+1 !if .offset > 0 {
adc #(.blocks*4) adc #(.offset*4)
sta dst+1
eor #$60
sta src+1
} }
!macro SET_HGR_HI {
sta src+1 sta src+1
eor #$60 eor #$60
sta dst+1 sta dst+1
} }
!macro RESET_HGR_HI { !macro RESET_HGR_HI_WITH_OFFSET .offset {
txa txa
+SET_HGR_HI +SET_HGR_HI_WITH_OFFSET .offset
} }
!macro RESET_HGR_HI_AND_INC_BY .blocks { !macro COPY_WITH_MASK .copymask {
txa
adc #(.blocks*4)
sta src+1
eor #$60
sta dst+1
}
; note: .copymask is an immediate value, not an indexed array or a memory address
!macro COPY_WITH_MASK_IMM .copymask {
lda (src), y lda (src), y
eor (dst), y ; merge source and destination bits eor (dst), y ; merge source and destination bits
and #.copymask ; isolate the bits to replace, zero the rest and #.copymask ; isolate the bits to replace, zero the rest
eor (dst), y ; unmerge source and destination bits, leaves 'to keep' destination bits intact eor (dst), y ; unmerge source and destination bits, leaves 'to keep' destination bits intact
sta (dst), y ; write the result sta (dst), y ; write the result
} }
!macro COPY_WITH_MASK_IMM_AND_INC .copymask {
+COPY_WITH_MASK_IMM .copymask ; note: .copymask is an immediate value, not an indexed array or a memory address
lda dst+1 !macro COPY_WITH_OFFSET_AND_MASK .offset, .copymask {
+INC_HGR_HI_BY 1 +RESET_HGR_HI_WITH_OFFSET .offset
+COPY_WITH_MASK .copymask
} }
!macro COPY_BYTE { !macro COPY_BYTE .offset {
+RESET_HGR_HI_WITH_OFFSET .offset
lda (src), y lda (src), y
sta (dst), y sta (dst), y
} }
!macro COPY_BYTE_AND_INC {
+COPY_BYTE
lda dst+1
+INC_HGR_HI_BY 1
}
!source "src/fx/macros.a" !source "src/fx/macros.a"
!source "src/fx/fx.dhgr.common.a" !source "src/fx/fx.dhgr.common.a"
@@ -83,140 +65,126 @@ RowLoop
sta src sta src
sta dst sta dst
lda hgrrowhi, x lda hgrrowhi, x
tax tax ; X = high byte of src throughout RowLoop
+SET_HGR_HI
+BRANCH_IF_Y_IS_OFFSCREEN @block2 +BRANCH_IF_Y_IS_OFFSCREEN @block2
+INC_HGR_HI_BY 3 +SET_HGR_HI_WITH_OFFSET 3
+COPY_WITH_MASK_IMM_AND_INC %10000001 +COPY_WITH_MASK %10000001
+COPY_WITH_MASK_IMM %10000001 +COPY_WITH_OFFSET_AND_MASK 4, %10000001
@block2 @block2
iny iny
+BRANCH_IF_Y_IS_OFFSCREEN @block3 +BRANCH_IF_Y_IS_OFFSCREEN @block3
+RESET_HGR_HI_AND_INC_BY 2 +COPY_WITH_OFFSET_AND_MASK 2, %10000110
+COPY_WITH_MASK_IMM_AND_INC %10000110 +COPY_WITH_OFFSET_AND_MASK 3, %10000001
+COPY_WITH_MASK_IMM_AND_INC %10000001 +COPY_WITH_OFFSET_AND_MASK 4, %10000001
+COPY_WITH_MASK_IMM_AND_INC %10000001 +COPY_WITH_OFFSET_AND_MASK 5, %10010110
+COPY_WITH_MASK_IMM %10010110
@block3 @block3
iny iny
+BRANCH_IF_Y_IS_OFFSCREEN @block4 +BRANCH_IF_Y_IS_OFFSCREEN @block4
+RESET_HGR_HI_AND_INC_BY 2 +COPY_WITH_OFFSET_AND_MASK 2, %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111 +COPY_WITH_OFFSET_AND_MASK 3, %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111 +COPY_WITH_OFFSET_AND_MASK 4, %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111 +COPY_WITH_OFFSET_AND_MASK 5, %10000111
+COPY_WITH_MASK_IMM %10000111
@block4 @block4
iny iny
+BRANCH_IF_Y_IS_OFFSCREEN @block5 +BRANCH_IF_Y_IS_OFFSCREEN @block5
+RESET_HGR_HI_AND_INC_BY 1 +COPY_WITH_OFFSET_AND_MASK 1, %10011001
+COPY_WITH_MASK_IMM_AND_INC %10011001 +COPY_WITH_OFFSET_AND_MASK 2, %10000001
+COPY_WITH_MASK_IMM_AND_INC %10000001 +COPY_WITH_OFFSET_AND_MASK 3, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 4, %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111 +COPY_WITH_OFFSET_AND_MASK 5, %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111 +COPY_WITH_OFFSET_AND_MASK 6, %10011001
+COPY_WITH_MASK_IMM %10011001
@block5 @block5
iny iny
+BRANCH_IF_Y_IS_OFFSCREEN @block6 +BRANCH_IF_Y_IS_OFFSCREEN @block6
+RESET_HGR_HI_AND_INC_BY 1 +COPY_WITH_OFFSET_AND_MASK 1, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 2, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 3, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 4, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 5, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 6, %10011111
+COPY_WITH_MASK_IMM %10011111
@block6 @block6
iny iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block7 +LONG_BRANCH_IF_Y_IS_OFFSCREEN @block7
+RESET_HGR_HI +COPY_WITH_OFFSET_AND_MASK 0, %11100110
+COPY_WITH_MASK_IMM_AND_INC %11100110 +COPY_WITH_OFFSET_AND_MASK 1, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_BYTE 2
+COPY_BYTE_AND_INC +COPY_WITH_OFFSET_AND_MASK 3, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_BYTE 4
+COPY_BYTE_AND_INC +COPY_WITH_OFFSET_AND_MASK 5, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 6, %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111 +COPY_WITH_OFFSET_AND_MASK 7, %11100110
+COPY_WITH_MASK_IMM %11100110
@block7 @block7
iny iny
+BRANCH_IF_Y_IS_OFFSCREEN @switchtoaux +BRANCH_IF_Y_IS_OFFSCREEN @switchtoaux
+RESET_HGR_HI +COPY_BYTE 0
+COPY_BYTE_AND_INC +COPY_BYTE 1
+COPY_BYTE_AND_INC +COPY_BYTE 2
+COPY_BYTE_AND_INC +COPY_BYTE 3
+COPY_BYTE_AND_INC +COPY_BYTE 4
+COPY_BYTE_AND_INC +COPY_BYTE 5
+COPY_BYTE_AND_INC +COPY_BYTE 6
+COPY_BYTE_AND_INC +COPY_BYTE 7
+COPY_BYTE
@switchtoaux @switchtoaux
sta $C003 sta $C003
sta $C005 sta $C005
+BRANCH_IF_Y_IS_OFFSCREEN @block6_aux +BRANCH_IF_Y_IS_OFFSCREEN @block6_aux
+RESET_HGR_HI +COPY_BYTE 0
+COPY_BYTE_AND_INC +COPY_BYTE 1
+COPY_BYTE_AND_INC +COPY_BYTE 2
+COPY_BYTE_AND_INC +COPY_BYTE 3
+COPY_BYTE_AND_INC +COPY_BYTE 4
+COPY_BYTE_AND_INC +COPY_BYTE 5
+COPY_BYTE_AND_INC +COPY_BYTE 6
+COPY_BYTE_AND_INC +COPY_BYTE 7
+COPY_BYTE
@block6_aux @block6_aux
dey dey
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block5_aux +LONG_BRANCH_IF_Y_IS_OFFSCREEN @block5_aux
+RESET_HGR_HI +COPY_WITH_OFFSET_AND_MASK 0, %10110011
+COPY_WITH_MASK_IMM_AND_INC %10110011 +COPY_WITH_OFFSET_AND_MASK 1, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_BYTE 2
+COPY_BYTE_AND_INC +COPY_WITH_OFFSET_AND_MASK 3, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_BYTE 4
+COPY_BYTE_AND_INC +COPY_WITH_OFFSET_AND_MASK 5, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 6, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 7, %10110011
+COPY_WITH_MASK_IMM %10110011
@block5_aux @block5_aux
dey dey
+BRANCH_IF_Y_IS_OFFSCREEN @block4_aux +BRANCH_IF_Y_IS_OFFSCREEN @block4_aux
+RESET_HGR_HI_AND_INC_BY 1 +COPY_WITH_OFFSET_AND_MASK 1, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 2, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 3, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 4, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 5, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 6, %11111100
+COPY_WITH_MASK_IMM %11111100
@block4_aux @block4_aux
dey dey
+BRANCH_IF_Y_IS_OFFSCREEN @block3_aux +BRANCH_IF_Y_IS_OFFSCREEN @block3_aux
+RESET_HGR_HI_AND_INC_BY 1 +COPY_WITH_OFFSET_AND_MASK 1, %11001100
+COPY_WITH_MASK_IMM_AND_INC %11001100 +COPY_WITH_OFFSET_AND_MASK 2, %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000 +COPY_WITH_OFFSET_AND_MASK 3, %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100 +COPY_WITH_OFFSET_AND_MASK 4, %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000 +COPY_WITH_OFFSET_AND_MASK 5, %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000 +COPY_WITH_OFFSET_AND_MASK 6, %11001100
+COPY_WITH_MASK_IMM %11001100
@block3_aux @block3_aux
dey dey
+BRANCH_IF_Y_IS_OFFSCREEN @block2_aux +BRANCH_IF_Y_IS_OFFSCREEN @block2_aux
+RESET_HGR_HI_AND_INC_BY 2 +COPY_WITH_OFFSET_AND_MASK 2, %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000 +COPY_WITH_OFFSET_AND_MASK 3, %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000 +COPY_WITH_OFFSET_AND_MASK 4, %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000 +COPY_WITH_OFFSET_AND_MASK 5, %11110000
+COPY_WITH_MASK_IMM %11110000
@block2_aux @block2_aux
dey dey
+BRANCH_IF_Y_IS_OFFSCREEN @block1_aux +BRANCH_IF_Y_IS_OFFSCREEN @block1_aux
+RESET_HGR_HI_AND_INC_BY 2 +COPY_WITH_OFFSET_AND_MASK 2, %10110000
+COPY_WITH_MASK_IMM_AND_INC %10110000 +COPY_WITH_OFFSET_AND_MASK 3, %11000000
+COPY_WITH_MASK_IMM_AND_INC %11000000 +COPY_WITH_OFFSET_AND_MASK 4, %11000000
+COPY_WITH_MASK_IMM_AND_INC %11000000 +COPY_WITH_OFFSET_AND_MASK 5, %10110000
+COPY_WITH_MASK_IMM %10110000
@block1_aux @block1_aux
dey dey
+BRANCH_IF_Y_IS_OFFSCREEN @switchtomain +BRANCH_IF_Y_IS_OFFSCREEN @switchtomain
+RESET_HGR_HI_AND_INC_BY 3 +COPY_WITH_OFFSET_AND_MASK 3, %11000000
+COPY_WITH_MASK_IMM_AND_INC %11000000 +COPY_WITH_OFFSET_AND_MASK 4, %11000000
+COPY_WITH_MASK_IMM %11000000
@switchtomain @switchtomain
sta $C002 sta $C002
sta $C004 sta $C004