;license:MIT ;(c) 2019-2022 by 4am ; mirror_src1 = $E8 ; word mirror_dest1 = $EA ; word mirror_src2 = $EC ; word mirror_dest2 = $EE ; word src1 = $F0 ; word dest1 = $F2 ; word src2 = $F4 ; word dest2 = $F6 ; word reverse_input = $FC ; word input = $FE ; word +BUILD_SPARSE_BITMASKS_1BIT_DHGR copymasks, mirror_copymasks +BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi +BUILD_HGR_MIRROR_LOOKUP_TABLES hgrlomirror, hgr1himirror +BUILD_MIRROR_COLS_DHGR mirror_cols +COPY_TO_AUXMEM $60, 4 +LDADDR Coordinates +ST16 input +LDADDR EndCoordinates-2 +ST16 reverse_input jmp Loop Exit rts Loop ldy #0 lda (input),y bmi Exit tax +ROW_X_TO_BASE_ADDRESSES +ROW_X_TO_MIRROR_ADDRESSES inc input lda (input),y +HIGH_3_LOW_5 input ; top-left quadrant (original row, original column, original input order) clc - lda copymasks, x beq + +COPY_BIT src1, dest1, copymasks +COPY_BIT src2, dest2, copymasks + bcs + sta $C003 sta $C005 sec bcs - + sta $C002 sta $C004 ; bottom-right quadrant (opposite row, opposite column, original input order) lda mirror_cols,y tay clc - lda mirror_copymasks, x beq + +COPY_BIT mirror_src1, mirror_dest1, mirror_copymasks +COPY_BIT mirror_src2, mirror_dest2, mirror_copymasks + bcs + sta $C003 sta $C005 sec bcs - + sta $C002 sta $C004 ldy #0 lda (reverse_input),y tax +ROW_X_TO_BASE_ADDRESSES +ROW_X_TO_MIRROR_ADDRESSES iny lda (reverse_input),y +HIGH_3_LOW_5 reverse_input ; bottom-left quadrant (opposite row, original column, reverse input order) clc - lda copymasks, x beq + +COPY_BIT mirror_src1, mirror_dest1, copymasks +COPY_BIT mirror_src2, mirror_dest2, copymasks + bcs + sta $C003 sta $C005 sec bcs - + sta $C002 sta $C004 ; top-right quadrant (same row, opposite column, reverse input order) lda mirror_cols,y tay clc - lda mirror_copymasks, x beq + +COPY_BIT src1, dest1, mirror_copymasks +COPY_BIT src2, dest2, mirror_copymasks + bcs + sta $C003 sta $C005 sec bcs - + sta $C002 sta $C004 inc input bne + inc input+1 + lda reverse_input php dec reverse_input dec reverse_input plp bne + dec reverse_input+1 bit $c000 bmi ++ + jmp Loop ++ rts