;license:MIT ;(c) 2020 by 4am ; !source "src/fx/fx.hgr.precomputed.1bit.a" !source "src/fx/fx.dhgr.common.a" !macro BUILD_SPARSE_BITMASKS_DHGR .copymasks, .mirror_copymasks { ; build sparse lookup tables for bitmasks ldx #$00 txa - sta .copymasks, x sta $C005 sta .copymasks, x sta $C004 inx bne - lda #%00000111 sta .copymasks+$80 sta .mirror_copymasks+$40 lda #%00011000 sta .copymasks+$A0 sta .mirror_copymasks+$20 lda #%01100000 sta .copymasks+$C0 sta .mirror_copymasks sta $C005 lda #%10000011 sta .copymasks sta .mirror_copymasks+$C0 lda #%10001100 sta .copymasks+$20 sta .mirror_copymasks+$A0 lda #%10110000 sta .copymasks+$40 sta .mirror_copymasks+$80 lda #%11000000 sta .copymasks+$60 sta .mirror_copymasks+$60 sta $C004 ; X=0 } !macro FX_PRECOMPUTED_1BIT_DHGR .coords { +BUILD_SPARSE_BITMASKS_DHGR copymasks, mirror_copymasks +BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi +BUILD_HGR_MIRROR_LOOKUP_TABLES hgrlomirror, hgr1himirror +BUILD_MIRROR_COLS mirror_cols +COPY_SELF_TO_AUXMEM ldx #(end-start) ; copy InputLoop code to zero page - lda start-1, x sta $FF, x dex bne - jmp InputLoop start !pseudopc 0 { Exit1Bit rts InputLoop ldy #0 input=*+1 ldx .coords, y ; first value: HGR row (only 0..95 will be in input array) bmi Exit1Bit ; if > 127 then we're done +ROW_X_TO_BASE_ADDRESSES +ROW_X_TO_MIRROR_ADDRESSES inc input lda (input), y +HIGH_3_LOW_5 input sty