mirror of
https://github.com/a2-4am/4cade.git
synced 2025-08-11 15:25:05 +00:00
shave some cycles (refactor RESET/INC macros)
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user