; VINTAGE COMPUTING CHRISTMAS CHALLENGE 2025
; HTTPS://LOGIKER.COM/VCCC2025
; BY KGJENKINS, 2025-12-19

TEXTX               EQU  $24
TEXTY               EQU  $25
VTABZ               EQU  $FC24
HOME                EQU  $FC58
COUT                EQU  $FDED

                    ORG  $1000

SNOWFLAKE           JSR  HOME                    ; CLEAR SCREEN
                    STA  TEXTY                   ; 0
                    LDX  #23                     ; END OF DATA
                    LDY  #8                      ; Y = BIT COUNTER
FORROW              LDA  #19                     ; RIGHT TO LEFT
                    STA  TEXTX
GETBIT              ASL  DATA,X                  ; GET BIT
                    BCC  NEXTBIT                 ; BIT SET?
                    LDA  TEXTY                   ; YES, PRINT
                    JSR  PRINT
                    LDA  #18                     ; PRINT VERTICAL MIRROR IMAGE
                    SEC
                    SBC  TEXTY
                    JSR  PRINT
NEXTBIT             DEY                          ; DECR BIT COUNTER
                    BNE  SAMEBYTE                ; BYTE DONE?
                    DEX                          ; YES, PREP FOR NEXT BYTE
LOOP                BMI  LOOP                    ; DONE, SO LOOP FOREVER
                    LDY  #8
SAMEBYTE            DEC  TEXTX
                    BNE  GETBIT
                    INC  TEXTY                   ; NEXT LINE
                    BPL  FORROW

PRINT               JSR  VTABZ                   ; SET ROW FOR PRINTING
                    LDA  #$AA                    ; ASTERISK
                    JSR  COUT                    ; PRINT
                    DEC  TEXTX                   ; CANCEL AUTO-ADVANCE
                    RTS

DATA                HEX  FC,FF,9F,E4,24,92,4A,02
                    HEX  92,00,C8,09,38,95,83,21
                    HEX  0C,8A,A3,00,2A,00,40,00

; DATA IS A REVERSED, PACKED VERSION OF THIS:
; 0000 0000  0100 0000  000
; 0000 0001  0101 0000  000
; 0010 1000  1110 0010  100
; 0001 1000  0100 0011  000
; 0011 1001  0101 0011  100
; 0000 0100  1110 0100  000
; 0000 0010  0100 1000  000
; 0100 1001  0101 0010  010
; 0010 0100  1110 0100  100
; 1111 1111  1111 1111  111


; HERE'S THE ASSEMBLED MACHINE CODE OF
; THE PROGRAM AND DATA (82 BYTES TOTAL)
;
; 1000: 20 58 FC 85 25 A2 17 A0
; 1008: 08 A9 13 85 24 1E 3A 10
; 1010: 90 0D A5 25 20 2F 10 A9
; 1018: 12 38 E5 25 20 2F 10 88
; 1020: D0 05 CA 30 FE A0 08 C6
; 1028: 24 D0 E2 E6 25 10 DA 20
; 1030: 24 FC A9 AA 20 ED FD C6
; 1038: 24 60 FC FF 9F E4 24 92
; 1040: 4A 02 92 00 C8 09 38 95
; 1048: 83 21 0C 8A A3 00 2A 00
; 1050: 40 00

