Skip to content

Instantly share code, notes, and snippets.

@voins
Created December 17, 2019 06:51
Show Gist options
  • Save voins/f68d7b7ecefb6f03a1549f0819d66659 to your computer and use it in GitHub Desktop.
Save voins/f68d7b7ecefb6f03a1549f0819d66659 to your computer and use it in GitHub Desktop.
Day1, part1, #AdventOfCode
* = $C000
.START
LDA #<.RESULT
STA $FD
LDA #>.RESULT
STA $FE
LDA #<.INPUT
STA $FB
LDA #>.INPUT
STA $FC
.FUELLOOP
JSR .FUEL
JSR .NEXTNUMBER
BNE .FUELLOOP
LDA #<.INPUT
STA $FB
LDA #>.INPUT
STA $FC
LDA #$FD
STA .ADDLOOP+5
LDA #$00
JSR .SIGNEXTEND
.SUMLOOP
JSR .ADD
JSR .NEXTNUMBER
BNE .SUMLOOP
LDA #<.RESBCD
STA $FB
LDA #>.RESBCD
STA $FC
.BCDNEXTBYTE
SED
LDX #$08
.BCDLOOP
LDY #$00
LDA ($FD), Y
ASL
STA ($FD), Y
LDY #$04
.BCDPROP
LDA ($FB), Y
ADC ($FB), Y
STA ($FB), Y
DEY
BPL .BCDPROP
DEX
BNE .BCDLOOP
CLD
INC $FD
LDA $FD
CMP $FB
BNE .BCDNEXTBYTE
LDY #$04
.NUMBERS
LDA ($FB), Y
AND #$0F
ORA #$30
PHA
LDA ($FB), Y
LSR
LSR
LSR
LSR
ORA #$30
PHA
DEY
BPL .NUMBERS
LDY #$0A
.LEADING
PLA
CMP #$30
BNE .PRINT
DEY
BNE .LEADING
LDA #$30
JSR $FFD2
RTS
.PRINTAGAIN
PLA
.PRINT
JSR $FFD2
DEY
BNE .PRINTAGAIN
.END
RTS
.NEXTNUMBER
CLC
LDA #$04
ADC $FB
STA $FB
LDA #$00
ADC $FC
STA $FC
CMP $FE
BNE .RETURN
LDA $FB
CMP $FD
.RETURN
RTS
; start processing number
.FUEL
.REVERSE ; (FB) <-> (FB)
LDY #$03
.REVERSELOOP
LDA ($FB), Y
PHA
DEY
BPL .REVERSELOOP
LDY #$03
.REVERSELOOP2
PLA
STA ($FB), Y
DEY
BPL .REVERSELOOP2
LDA #$01
JSR .SIGNEXTEND
JSR .ADD
JSR .COPY
LDX #$03
.SHIFTAGAIN
JSR .SHIFT
JSR .SHIFT
JSR .ADD
DEX
BNE .SHIFTAGAIN ; FB = FB * 0x55
JSR .COPY
JSR .SHIFT8
JSR .ADD ; FB = (FB * 0x5555) >> 8
JSR .SHIFT8
JSR .ADD ; FB = (FB * 0x555555) >> 16
JSR .SHIFT8
LDA #$FE
JSR .SIGNEXTEND
JMP .ADD ; FB = (FB / 3 ) - 2
.COPY ; (FB) -> (FD)
LDY #$03
.COPYLOOP
LDA ($FB), Y
STA ($FD), Y
DEY
BPL .COPYLOOP
RTS
.SIGNEXTEND ; A -> (FD)
LDY #$03
STA ($FD), Y
DEY
ORA #$00
BPL .SIGNPLUS
LDA #$FF
!8 $2C
.SIGNPLUS
LDA #$00
.SIGNLOOP
STA ($FD), Y
DEY
BPL .SIGNLOOP
RTS
.ADD ; (FB) + (FD) -> (FB)
CLC
LDY #$03
.ADDLOOP
LDA ($FB), Y
ADC ($FD), Y
STA ($FB), Y
DEY
BPL .ADDLOOP
RTS
.SHIFT ; (FD) << 1 -> (FD)
CLC
LDY #$03
.SHIFTLOOP
LDA ($FD), Y
ROL
STA ($FD), Y
DEY
BPL .SHIFTLOOP
RTS
.SHIFT8 ; (FB) >> 8 -> (FB)
LDY #$02
.SHIFT8LOOP
LDA ($FB), Y
INY
STA ($FB), Y
DEY
DEY
BPL .SHIFT8LOOP
LDA #$00
INY
STA ($FB), Y
RTS
.INPUT
!32 109067, 75007, 66030, 93682, 83818, 108891, 139958, 129246, 80272
!32 119897, 112804, 69495, 95884, 85402, 148361, 75986, 120063, 127683
!32 146962, 76907, 61414, 98452, 134330, 53858, 82662, 143258, 82801
!32 60279, 131782, 105989, 102464, 96563, 71172, 113731, 90645, 94830
!32 133247, 110149, 54792, 134863, 125919, 145490, 69836, 108808, 87954
!32 148957, 110182, 126668, 148024, 96915, 117727, 147378, 75967, 91915
!32 60130, 85331, 66800, 103419, 72627, 72687, 61606, 113160, 107082
!32 110793, 61589, 105005, 73952, 65705, 117243, 140944, 117091, 113482
!32 91379, 148185, 113853, 119822, 78179, 85407, 119886, 109230, 68783
!32 63914, 51101, 93549, 53361, 127984, 106315, 54997, 138941, 81075
!32 120272, 120307, 98414, 115245, 105649, 89793, 88421, 121104, 97084
!32 56928
.RESULT
!32 0
.RESBCD
!8 0, 0, 0, 0, 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment