mirror of
https://github.com/a2-4am/4cade.git
synced 2024-11-23 12:33:32 +00:00
shave some cycles (skip if copymask=0, fake bit 3)
This commit is contained in:
parent
d0745e7941
commit
63870a0bc8
@ -15,19 +15,15 @@
|
|||||||
inx
|
inx
|
||||||
bne -
|
bne -
|
||||||
|
|
||||||
lda #%10000001
|
lda #%00000111
|
||||||
sta .copymasks+$60
|
|
||||||
sta .mirror_copymasks+$60
|
|
||||||
|
|
||||||
lda #%10000110
|
|
||||||
sta .copymasks+$80
|
sta .copymasks+$80
|
||||||
sta .mirror_copymasks+$40
|
sta .mirror_copymasks+$40
|
||||||
|
|
||||||
lda #%10011000
|
lda #%00011000
|
||||||
sta .copymasks+$A0
|
sta .copymasks+$A0
|
||||||
sta .mirror_copymasks+$20
|
sta .mirror_copymasks+$20
|
||||||
|
|
||||||
lda #%11100000
|
lda #%01100000
|
||||||
sta .copymasks+$C0
|
sta .copymasks+$C0
|
||||||
sta .mirror_copymasks
|
sta .mirror_copymasks
|
||||||
|
|
||||||
@ -81,50 +77,58 @@ input=*+1
|
|||||||
sty <y
|
sty <y
|
||||||
clc
|
clc
|
||||||
bankloop
|
bankloop
|
||||||
|
lda copymasks, x
|
||||||
|
beq +
|
||||||
|
sta <copymask
|
||||||
|
|
||||||
; main 1x2 block in top-left quadrant
|
; main 1x2 block in top-left quadrant
|
||||||
src1=*+1
|
src1=*+1
|
||||||
lda $FDFD, y
|
lda $FDFD, y
|
||||||
eor (<dest1), y
|
eor (<dest1), y
|
||||||
and copymasks, x
|
copymask=*+1
|
||||||
|
and #$FD ; SMC
|
||||||
eor (<dest1), y
|
eor (<dest1), y
|
||||||
dest1=*+1
|
dest1=*+1
|
||||||
sta $FDFD, y
|
sta $FDFD, y
|
||||||
src2=*+1
|
src2=*+1
|
||||||
lda $FDFD, y
|
lda $FDFD, y
|
||||||
eor (<dest2), y
|
eor (<dest2), y
|
||||||
and copymasks, x
|
and <copymask
|
||||||
eor (<dest2), y
|
eor (<dest2), y
|
||||||
dest2=*+1
|
dest2=*+1
|
||||||
sta $FDFD, y
|
sta $FDFD, y
|
||||||
|
|
||||||
; corresponding 1x2 block in top-right quadrant (same row, opposite column)
|
; corresponding 1x2 block in bottom-left quadrant (opposite row, original column)
|
||||||
|
+COPY_BIT_ZP mirror_src1, mirror_dest1, copymask
|
||||||
|
+COPY_BIT_ZP mirror_src2, mirror_dest2, copymask
|
||||||
|
|
||||||
|
+
|
||||||
|
lda mirror_copymasks, x
|
||||||
|
beq +
|
||||||
|
sta <mirror_copymask
|
||||||
|
; corresponding 1x2 block in bottom-right quadrant (opposite row, opposite column)
|
||||||
lda mirror_cols, y
|
lda mirror_cols, y
|
||||||
tay
|
tay
|
||||||
+COPY_BIT src1, dest1, mirror_copymasks
|
|
||||||
+COPY_BIT src2, dest2, mirror_copymasks
|
|
||||||
|
|
||||||
; corresponding 1x2 block in bottom-right quadrant (opposite row, opposite column)
|
|
||||||
mirror_src1=*+1
|
mirror_src1=*+1
|
||||||
lda $FDFD, y
|
lda $FDFD, y
|
||||||
eor (<mirror_dest1), y
|
eor (<mirror_dest1), y
|
||||||
and mirror_copymasks, x
|
mirror_copymask=*+1
|
||||||
|
and #$FD ; SMC
|
||||||
eor (<mirror_dest1), y
|
eor (<mirror_dest1), y
|
||||||
mirror_dest1=*+1
|
mirror_dest1=*+1
|
||||||
sta $FDFD, y
|
sta $FDFD, y
|
||||||
mirror_src2=*+1
|
mirror_src2=*+1
|
||||||
lda $FDFD, y
|
lda $FDFD, y
|
||||||
eor (<mirror_dest2), y
|
eor (<mirror_dest2), y
|
||||||
and mirror_copymasks, x
|
and <mirror_copymask
|
||||||
eor (<mirror_dest2), y
|
eor (<mirror_dest2), y
|
||||||
mirror_dest2=*+1
|
mirror_dest2=*+1
|
||||||
sta $FDFD, y
|
sta $FDFD, y
|
||||||
|
|
||||||
; corresponding 1x2 block in bottom-left quadrant (opposite row, original column)
|
; corresponding 1x2 block in top-right quadrant (same row, opposite column)
|
||||||
lda mirror_cols, y
|
+COPY_BIT_ZP src1, dest1, mirror_copymask
|
||||||
tay
|
+COPY_BIT_ZP src2, dest2, mirror_copymask
|
||||||
+COPY_BIT mirror_src1, mirror_dest1, copymasks
|
+
|
||||||
+COPY_BIT mirror_src2, mirror_dest2, copymasks
|
|
||||||
|
|
||||||
bcs +
|
bcs +
|
||||||
sta $C003
|
sta $C003
|
||||||
sta $C005
|
sta $C005
|
||||||
|
@ -124,6 +124,14 @@
|
|||||||
sta (.dest1),y ; write the result
|
sta (.dest1),y ; write the result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
!macro COPY_BIT_ZP .src1, .dest1, .zpcopymask {
|
||||||
|
lda (.src1),y
|
||||||
|
eor (.dest1),y ; merge source and destination bits
|
||||||
|
and <.zpcopymask ; isolate the bits to replace, zero the rest
|
||||||
|
eor (.dest1),y ; unmerge source and destination bits, leaves 'to keep' destination bits intact
|
||||||
|
sta (.dest1),y ; write the result
|
||||||
|
}
|
||||||
|
|
||||||
!macro SWITCH_TO_MASKS .copy {
|
!macro SWITCH_TO_MASKS .copy {
|
||||||
lda #<.copy
|
lda #<.copy
|
||||||
sta CopyMaskAddr
|
sta CopyMaskAddr
|
||||||
|
Loading…
Reference in New Issue
Block a user