c64(day02): Implement
This commit is contained in:
parent
5bacc864b4
commit
8efa00bd48
5 changed files with 697 additions and 83 deletions
|
@ -106,3 +106,73 @@ tree_contains:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
brk
|
brk
|
||||||
|
|
||||||
|
test_tree:
|
||||||
|
move_16_imm($03, !str_test+)
|
||||||
|
jsr write_string
|
||||||
|
|
||||||
|
move_16_imm($03, $10)
|
||||||
|
jsr tree_insert
|
||||||
|
move_16_imm($03, $08)
|
||||||
|
jsr tree_insert
|
||||||
|
move_16_imm($03, $04)
|
||||||
|
jsr tree_insert
|
||||||
|
move_16_imm($03, $12)
|
||||||
|
jsr tree_insert
|
||||||
|
move_16_imm($03, $1337)
|
||||||
|
jsr tree_insert
|
||||||
|
|
||||||
|
move_16_imm($03, $08)
|
||||||
|
jsr tree_contains
|
||||||
|
bne !fail+
|
||||||
|
|
||||||
|
move_16_imm($03, $13)
|
||||||
|
jsr tree_contains
|
||||||
|
beq !fail+
|
||||||
|
|
||||||
|
move_16_imm($03, $12)
|
||||||
|
jsr tree_contains
|
||||||
|
bne !fail+
|
||||||
|
|
||||||
|
move_16_imm($03, $1337)
|
||||||
|
jsr tree_contains
|
||||||
|
bne !fail+
|
||||||
|
|
||||||
|
move_16_imm($03, $0420)
|
||||||
|
jsr tree_contains
|
||||||
|
beq !fail+
|
||||||
|
|
||||||
|
move_16_imm($03, !str_success+)
|
||||||
|
jsr write_string
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
!fail:
|
||||||
|
u16_u16_move($10, $03)
|
||||||
|
|
||||||
|
move_16_imm($03, !str_fail+)
|
||||||
|
jsr write_string
|
||||||
|
|
||||||
|
lda $11
|
||||||
|
jsr print_hex_0x
|
||||||
|
lda $10
|
||||||
|
jsr print_hex
|
||||||
|
jsr print_newline
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
!str_test:
|
||||||
|
.text "[ ] test-tree"
|
||||||
|
.byte '\r', 0
|
||||||
|
|
||||||
|
!str_fail:
|
||||||
|
.text "[!!]"
|
||||||
|
.byte '\n'
|
||||||
|
.text "Failed: "
|
||||||
|
.byte 0
|
||||||
|
|
||||||
|
!str_success:
|
||||||
|
.text "[OK]"
|
||||||
|
.byte '\n', 0
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
* = * "Day 01 Input"
|
* = * "Day 01 Input"
|
||||||
day01_input:
|
day01_input:
|
||||||
.import text "../rust/inputs/day01"
|
//.import text "../rust/inputs/day01"
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
* = * "Day 01 Code"
|
* = * "Day 01 Code"
|
||||||
|
|
500
c64/day02.asm
Normal file
500
c64/day02.asm
Normal file
|
@ -0,0 +1,500 @@
|
||||||
|
// vim: filetype=kickass
|
||||||
|
|
||||||
|
* = * "Day 02 Input"
|
||||||
|
!input:
|
||||||
|
.import binary "../inputs/02"
|
||||||
|
.byte 0
|
||||||
|
|
||||||
|
!str_title:
|
||||||
|
.text "# Day 02"
|
||||||
|
.byte '\n', '\n'
|
||||||
|
.text "Part 1: "
|
||||||
|
.byte 0
|
||||||
|
|
||||||
|
* = * "Day 02 Code"
|
||||||
|
day02:
|
||||||
|
{
|
||||||
|
.const input_pointer = $40
|
||||||
|
.const range_low = $42
|
||||||
|
.const range_high = $43
|
||||||
|
.const letter = $44
|
||||||
|
.const is_valid = $45
|
||||||
|
.const valid_count = $46
|
||||||
|
|
||||||
|
{
|
||||||
|
move_16_imm($03, !str_title-)
|
||||||
|
jsr write_string
|
||||||
|
|
||||||
|
.break
|
||||||
|
move_16_imm(input_pointer, !input-)
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
sty valid_count + 0
|
||||||
|
sty valid_count + 1
|
||||||
|
|
||||||
|
part1_loop:
|
||||||
|
jsr parse_rule
|
||||||
|
beq part1_done
|
||||||
|
|
||||||
|
// Increment range_high so we can beq.
|
||||||
|
inc range_high
|
||||||
|
// Decrement range_low so it overflows on invalid passwords
|
||||||
|
dec range_low
|
||||||
|
|
||||||
|
password:
|
||||||
|
lda (input_pointer), y
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
cmp #$0a
|
||||||
|
beq newline
|
||||||
|
cmp letter
|
||||||
|
bne password
|
||||||
|
|
||||||
|
dec range_low
|
||||||
|
dec range_high
|
||||||
|
bne password
|
||||||
|
|
||||||
|
// range_high went to 0, so it contains the letter too many times
|
||||||
|
// Skip to newline, then loop back around.
|
||||||
|
!:
|
||||||
|
lda (input_pointer), y
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
cmp #$0a
|
||||||
|
bne !-
|
||||||
|
jmp part1_loop
|
||||||
|
|
||||||
|
newline:
|
||||||
|
// If range_low is positive, we didn't meet the minimum
|
||||||
|
lda range_low
|
||||||
|
bpl part1_loop
|
||||||
|
|
||||||
|
inc valid_count + 0
|
||||||
|
bne part1_loop
|
||||||
|
inc valid_count + 1
|
||||||
|
jmp part1_loop
|
||||||
|
|
||||||
|
part1_done:
|
||||||
|
.break
|
||||||
|
lda valid_count + 0; sta udivmod32_dividend + 0
|
||||||
|
lda valid_count + 1; sta udivmod32_dividend + 1
|
||||||
|
lda #0
|
||||||
|
sta udivmod32_dividend + 2
|
||||||
|
sta udivmod32_dividend + 3
|
||||||
|
jsr print_decimal_u32
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
move_16_imm($03, str_part2)
|
||||||
|
jsr write_string
|
||||||
|
|
||||||
|
.break
|
||||||
|
move_16_imm(input_pointer, !input-)
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
sty valid_count + 0
|
||||||
|
sty valid_count + 1
|
||||||
|
|
||||||
|
part2_loop:
|
||||||
|
jsr parse_rule
|
||||||
|
beq part2_done
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta is_valid
|
||||||
|
|
||||||
|
password:
|
||||||
|
lda (input_pointer), y
|
||||||
|
tax
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
cmp #$0a
|
||||||
|
beq newline
|
||||||
|
|
||||||
|
dec range_low
|
||||||
|
bne !+
|
||||||
|
cmp letter
|
||||||
|
bne !+
|
||||||
|
lda #1
|
||||||
|
eor is_valid
|
||||||
|
sta is_valid
|
||||||
|
!:
|
||||||
|
|
||||||
|
dec range_high
|
||||||
|
bne !+++
|
||||||
|
txa
|
||||||
|
cmp letter
|
||||||
|
bne !+
|
||||||
|
lda #1
|
||||||
|
eor is_valid
|
||||||
|
sta is_valid
|
||||||
|
!:
|
||||||
|
|
||||||
|
// If we checked both numbers, we can skip the rest of the password.
|
||||||
|
!:
|
||||||
|
lda (input_pointer), y
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
cmp #$0a
|
||||||
|
bne !-
|
||||||
|
jmp newline
|
||||||
|
!:
|
||||||
|
|
||||||
|
jmp password
|
||||||
|
|
||||||
|
newline:
|
||||||
|
lda is_valid
|
||||||
|
beq part2_loop
|
||||||
|
|
||||||
|
inc valid_count + 0
|
||||||
|
bne part2_loop
|
||||||
|
inc valid_count + 1
|
||||||
|
jmp part2_loop
|
||||||
|
|
||||||
|
part2_done:
|
||||||
|
.break
|
||||||
|
lda valid_count + 0; sta udivmod32_dividend + 0
|
||||||
|
lda valid_count + 1; sta udivmod32_dividend + 1
|
||||||
|
lda #0
|
||||||
|
sta udivmod32_dividend + 2
|
||||||
|
sta udivmod32_dividend + 3
|
||||||
|
jsr print_decimal_u32
|
||||||
|
}
|
||||||
|
|
||||||
|
move_16_imm($03, str_done)
|
||||||
|
jsr write_string
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
!:
|
||||||
|
ldx #0
|
||||||
|
!: inx; bne !-
|
||||||
|
!: inx; bne !-
|
||||||
|
!: inx; bne !-
|
||||||
|
!: inx; bne !-
|
||||||
|
iny
|
||||||
|
bne !-----
|
||||||
|
|
||||||
|
lda #1
|
||||||
|
sta $d020
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
!:
|
||||||
|
ldx #0
|
||||||
|
!: inx; bne !-
|
||||||
|
!: inx; bne !-
|
||||||
|
iny
|
||||||
|
bne !---
|
||||||
|
|
||||||
|
sta $d021
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
!:
|
||||||
|
ldx #0
|
||||||
|
!: inx; bne !-
|
||||||
|
!: inx; bne !-
|
||||||
|
!: inx; bne !-
|
||||||
|
iny
|
||||||
|
bne !----
|
||||||
|
{
|
||||||
|
.const timer = $40
|
||||||
|
.const xvel = $41
|
||||||
|
|
||||||
|
|
||||||
|
lda #(sprite1 / 64)
|
||||||
|
sta $07f8
|
||||||
|
lda #(sprite2 / 64)
|
||||||
|
sta $07f9
|
||||||
|
lda #(sprite3 / 64)
|
||||||
|
sta $07fa
|
||||||
|
lda #(sprite4 / 64)
|
||||||
|
sta $07fb
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta $d001 // TL y
|
||||||
|
sta $d003 // TR y
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta $d005 // BL y
|
||||||
|
sta $d007 // BR y
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta $d000 // TL x
|
||||||
|
sta $d004 // BL x
|
||||||
|
|
||||||
|
lda #48
|
||||||
|
sta $d002 // TR x
|
||||||
|
sta $d006 // BR x
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta $d010
|
||||||
|
|
||||||
|
lda #$0f
|
||||||
|
sta $d015 // sprite enable
|
||||||
|
sta $d01c // enable multicolor
|
||||||
|
sta $d01d // double width
|
||||||
|
sta $d017 // double height
|
||||||
|
|
||||||
|
lda #$09
|
||||||
|
sta $d025
|
||||||
|
lda #$08
|
||||||
|
sta $d026
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta $d027
|
||||||
|
sta $d028
|
||||||
|
sta $d029
|
||||||
|
sta $d02a
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta timer
|
||||||
|
lda #127
|
||||||
|
sta xvel
|
||||||
|
|
||||||
|
SetRasterInterrupt(raster_irq)
|
||||||
|
cli
|
||||||
|
|
||||||
|
jmp *
|
||||||
|
|
||||||
|
raster_irq:
|
||||||
|
pha
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
tya
|
||||||
|
pha
|
||||||
|
|
||||||
|
dec timer
|
||||||
|
beq !+
|
||||||
|
jmp done
|
||||||
|
!:
|
||||||
|
lda #200
|
||||||
|
sta timer
|
||||||
|
|
||||||
|
// 0-214: Move bottom sprites
|
||||||
|
inc $d005
|
||||||
|
inc $d007
|
||||||
|
bne !+
|
||||||
|
// If they wrap around, disable them
|
||||||
|
lda $d015
|
||||||
|
and #%0011
|
||||||
|
sta $d015
|
||||||
|
!:
|
||||||
|
|
||||||
|
// 42-256: Move top sprites
|
||||||
|
// if top_sprite.disabled || top_sprite.y >= 42
|
||||||
|
lda $d015
|
||||||
|
and #$08
|
||||||
|
beq !+
|
||||||
|
lda $d007
|
||||||
|
cmp #42
|
||||||
|
bcc !++
|
||||||
|
!:
|
||||||
|
inc $d001
|
||||||
|
inc $d003
|
||||||
|
bne !+
|
||||||
|
// If they wrap around, disable them
|
||||||
|
lda $d015
|
||||||
|
and #%1100
|
||||||
|
sta $d015
|
||||||
|
!:
|
||||||
|
|
||||||
|
|
||||||
|
lda xvel
|
||||||
|
beq !+
|
||||||
|
jmp no_flip
|
||||||
|
!:
|
||||||
|
// If velocity is negative, flip the sprites
|
||||||
|
ldy #63
|
||||||
|
flip_loop:
|
||||||
|
//
|
||||||
|
// Sprite 1
|
||||||
|
//
|
||||||
|
lda sprite1 - 3, y
|
||||||
|
sta zp_temp
|
||||||
|
|
||||||
|
ldx sprite1 - 1, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite1 - 3, y
|
||||||
|
|
||||||
|
ldx zp_temp
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite1 - 1, y
|
||||||
|
|
||||||
|
ldx sprite1 - 2, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite1 - 2, y
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sprite 2
|
||||||
|
//
|
||||||
|
lda sprite2 - 3, y
|
||||||
|
sta zp_temp
|
||||||
|
|
||||||
|
ldx sprite2 - 1, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite2 - 3, y
|
||||||
|
|
||||||
|
ldx zp_temp
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite2 - 1, y
|
||||||
|
|
||||||
|
ldx sprite2 - 2, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite2 - 2, y
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sprite 3
|
||||||
|
//
|
||||||
|
lda sprite3 - 3, y
|
||||||
|
sta zp_temp
|
||||||
|
|
||||||
|
ldx sprite3 - 1, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite3 - 3, y
|
||||||
|
|
||||||
|
ldx zp_temp
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite3 - 1, y
|
||||||
|
|
||||||
|
ldx sprite3 - 2, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite3 - 2, y
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sprite 4
|
||||||
|
//
|
||||||
|
lda sprite4 - 3, y
|
||||||
|
sta zp_temp
|
||||||
|
|
||||||
|
ldx sprite4 - 1, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite4 - 3, y
|
||||||
|
|
||||||
|
ldx zp_temp
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite4 - 1, y
|
||||||
|
|
||||||
|
ldx sprite4 - 2, y
|
||||||
|
lda flip_map, x
|
||||||
|
sta sprite4 - 2, y
|
||||||
|
|
||||||
|
dey; dey; dey
|
||||||
|
beq !+
|
||||||
|
jmp flip_loop
|
||||||
|
!:
|
||||||
|
|
||||||
|
lda $d000; clc; adc #48; sta $d000; sta $d004
|
||||||
|
lda $d002; sec; sbc #48; sta $d002; sta $d006
|
||||||
|
no_flip:
|
||||||
|
|
||||||
|
lda xvel
|
||||||
|
cmp #$80; ror
|
||||||
|
cmp #$80; ror
|
||||||
|
cmp #$80; ror
|
||||||
|
cmp #$80; ror
|
||||||
|
cmp #$80; ror
|
||||||
|
tax
|
||||||
|
|
||||||
|
// Move left sprites
|
||||||
|
txa; clc; adc $d000; sta $d000; sta $d004
|
||||||
|
bne !+
|
||||||
|
// If they wrap around, disable them
|
||||||
|
lda $d015
|
||||||
|
and #%1010
|
||||||
|
sta $d015
|
||||||
|
!:
|
||||||
|
|
||||||
|
// Move right sprites
|
||||||
|
txa; clc; adc $d002; sta $d002; sta $d006
|
||||||
|
bne !+
|
||||||
|
// If they wrap around, disable them
|
||||||
|
lda $d015
|
||||||
|
and #%0101
|
||||||
|
sta $d015
|
||||||
|
!:
|
||||||
|
|
||||||
|
dec xvel
|
||||||
|
|
||||||
|
done:
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
}
|
||||||
|
|
||||||
|
mul10:
|
||||||
|
asl
|
||||||
|
sta zp_temp
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
adc zp_temp
|
||||||
|
rts
|
||||||
|
|
||||||
|
parse_rule:
|
||||||
|
low_number:
|
||||||
|
// 13-16 k: kkkkkgmkbvkkrskhd
|
||||||
|
// ^^^
|
||||||
|
lda (input_pointer), y
|
||||||
|
bne !+
|
||||||
|
// Check for null terminator
|
||||||
|
rts
|
||||||
|
!:
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
sec; sbc #'0'
|
||||||
|
sta range_low
|
||||||
|
|
||||||
|
lda (input_pointer), y
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
cmp #$2d
|
||||||
|
beq !+
|
||||||
|
tax
|
||||||
|
lda range_low
|
||||||
|
jsr mul10
|
||||||
|
sta range_low
|
||||||
|
txa
|
||||||
|
|
||||||
|
sec; sbc #'0'
|
||||||
|
clc; adc range_low
|
||||||
|
sta range_low
|
||||||
|
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
!:
|
||||||
|
|
||||||
|
high_number:
|
||||||
|
// 13-16 k: kkkkkgmkbvkkrskhd
|
||||||
|
// ^^^
|
||||||
|
lda (input_pointer), y
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
sec; sbc #'0'
|
||||||
|
sta range_high
|
||||||
|
|
||||||
|
lda (input_pointer), y
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
cmp #$20
|
||||||
|
beq !+
|
||||||
|
tax
|
||||||
|
lda range_high
|
||||||
|
jsr mul10
|
||||||
|
sta range_high
|
||||||
|
txa
|
||||||
|
|
||||||
|
sec; sbc #'0'
|
||||||
|
clc; adc range_high
|
||||||
|
sta range_high
|
||||||
|
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
!:
|
||||||
|
|
||||||
|
//
|
||||||
|
// 13-16 k: kkkkkgmkbvkkrskhd
|
||||||
|
// ^^^
|
||||||
|
//
|
||||||
|
lda (input_pointer), y
|
||||||
|
sta letter
|
||||||
|
|
||||||
|
// TODO adc #3 instead?
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
y_buf_inc(input_pointer)
|
||||||
|
|
||||||
|
lda #1
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
}
|
190
c64/main.asm
190
c64/main.asm
|
@ -40,75 +40,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test_tree:
|
|
||||||
move_16_imm($03, !str_test+)
|
|
||||||
jsr write_string
|
|
||||||
|
|
||||||
move_16_imm($03, $10)
|
|
||||||
jsr tree_insert
|
|
||||||
move_16_imm($03, $08)
|
|
||||||
jsr tree_insert
|
|
||||||
move_16_imm($03, $04)
|
|
||||||
jsr tree_insert
|
|
||||||
move_16_imm($03, $12)
|
|
||||||
jsr tree_insert
|
|
||||||
move_16_imm($03, $1337)
|
|
||||||
jsr tree_insert
|
|
||||||
|
|
||||||
move_16_imm($03, $08)
|
|
||||||
jsr tree_contains
|
|
||||||
bne !fail+
|
|
||||||
|
|
||||||
move_16_imm($03, $13)
|
|
||||||
jsr tree_contains
|
|
||||||
beq !fail+
|
|
||||||
|
|
||||||
move_16_imm($03, $12)
|
|
||||||
jsr tree_contains
|
|
||||||
bne !fail+
|
|
||||||
|
|
||||||
move_16_imm($03, $1337)
|
|
||||||
jsr tree_contains
|
|
||||||
bne !fail+
|
|
||||||
|
|
||||||
move_16_imm($03, $0420)
|
|
||||||
jsr tree_contains
|
|
||||||
beq !fail+
|
|
||||||
|
|
||||||
move_16_imm($03, !str_success+)
|
|
||||||
jsr write_string
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
!fail:
|
|
||||||
u16_u16_move($10, $03)
|
|
||||||
|
|
||||||
move_16_imm($03, !str_fail+)
|
|
||||||
jsr write_string
|
|
||||||
|
|
||||||
lda $11
|
|
||||||
jsr print_hex_0x
|
|
||||||
lda $10
|
|
||||||
jsr print_hex
|
|
||||||
jsr print_newline
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
!str_test:
|
|
||||||
.text "[ ] test-tree"
|
|
||||||
.byte '\r', 0
|
|
||||||
|
|
||||||
!str_fail:
|
|
||||||
.text "[!!]"
|
|
||||||
.byte '\n'
|
|
||||||
.text "Failed: "
|
|
||||||
.byte 0
|
|
||||||
|
|
||||||
!str_success:
|
|
||||||
.text "[OK]"
|
|
||||||
.byte '\n', 0
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// main
|
// main
|
||||||
//
|
//
|
||||||
|
@ -131,10 +62,123 @@ main:
|
||||||
jmp !-
|
jmp !-
|
||||||
|
|
||||||
|
|
||||||
#import "day01.asm"
|
|
||||||
#import "day05.asm"
|
|
||||||
#import "day09.asm"
|
|
||||||
#import "screen.asm"
|
#import "screen.asm"
|
||||||
#import "math.asm"
|
#import "math.asm"
|
||||||
#import "btree.asm"
|
|
||||||
#import "menu.asm"
|
#import "menu.asm"
|
||||||
|
|
||||||
|
*=$2000 "Sprite"
|
||||||
|
.align 64
|
||||||
|
sprite1:
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $A0
|
||||||
|
.byte $00, $0A, $B8
|
||||||
|
.byte $00, $AB, $F8
|
||||||
|
.byte $0A, $BF, $FE
|
||||||
|
.byte $AB, $FF, $FE
|
||||||
|
.byte $BF, $FF, $FF
|
||||||
|
.byte $BF, $FF, $FD
|
||||||
|
.byte $BF, $FF, $D5
|
||||||
|
.byte $BF, $FD, $57
|
||||||
|
.byte $2F, $D5, $7F
|
||||||
|
.byte $2D, $57, $FF
|
||||||
|
|
||||||
|
|
||||||
|
.align 64
|
||||||
|
sprite2:
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $80, $00, $00
|
||||||
|
.byte $80, $00, $00
|
||||||
|
.byte $A0, $00, $00
|
||||||
|
.byte $E0, $00, $00
|
||||||
|
.byte $E8, $02, $80
|
||||||
|
|
||||||
|
.align 64
|
||||||
|
sprite3:
|
||||||
|
.byte $09, $7F, $FF
|
||||||
|
.byte $0B, $FF, $FF
|
||||||
|
.byte $0B, $FF, $F5
|
||||||
|
.byte $02, $FF, $5A
|
||||||
|
.byte $02, $F5, $5B
|
||||||
|
.byte $00, $95, $FA
|
||||||
|
.byte $00, $9F, $FE
|
||||||
|
.byte $00, $BF, $FE
|
||||||
|
.byte $00, $2F, $FF
|
||||||
|
.byte $00, $2F, $FF
|
||||||
|
.byte $00, $0B, $F5
|
||||||
|
.byte $00, $0B, $55
|
||||||
|
.byte $00, $09, $5F
|
||||||
|
.byte $00, $02, $FF
|
||||||
|
.byte $00, $02, $BF
|
||||||
|
.byte $00, $00, $BF
|
||||||
|
.byte $00, $00, $AE
|
||||||
|
.byte $00, $00, $2A
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
|
||||||
|
.align 64
|
||||||
|
sprite4:
|
||||||
|
.byte $F8, $2B, $80
|
||||||
|
.byte $FA, $BF, $E0
|
||||||
|
.byte $EB, $FF, $E0
|
||||||
|
.byte $BF, $FF, $E0
|
||||||
|
.byte $FF, $FF, $E0
|
||||||
|
.byte $FF, $FF, $F8
|
||||||
|
.byte $FF, $FF, $D8
|
||||||
|
.byte $FF, $FD, $58
|
||||||
|
.byte $BF, $D5, $78
|
||||||
|
.byte $BD, $57, $F8
|
||||||
|
.byte $95, $7F, $E0
|
||||||
|
.byte $97, $FF, $E0
|
||||||
|
.byte $BF, $FF, $A0
|
||||||
|
.byte $BF, $FE, $80
|
||||||
|
.byte $BF, $FA, $00
|
||||||
|
.byte $BF, $A8, $00
|
||||||
|
.byte $FA, $80, $00
|
||||||
|
.byte $A8, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
.byte $00, $00, $00
|
||||||
|
|
||||||
|
|
||||||
|
.align 256
|
||||||
|
flip_map:
|
||||||
|
.for (var i = 0; i < 256; i++) {
|
||||||
|
// 11001001 >> 6 = 11 & $03 == 11
|
||||||
|
// 11001001 >> 2 = 110010 & $0c == 00
|
||||||
|
// 11001001 << 2 = 001001 & $30 == 10
|
||||||
|
// 11001001 << 6 = 01 & $c0 == 01
|
||||||
|
// -------- |
|
||||||
|
// 01100011
|
||||||
|
.byte ((i >> 6) & $03) | ((i >> 2) & $0c) | ((i << 2) & $30) | ((i << 6) & $c0)
|
||||||
|
}
|
||||||
|
|
||||||
|
#import "day01.asm"
|
||||||
|
#import "day02.asm"
|
||||||
|
#import "day05.asm"
|
||||||
|
#import "day09.asm"
|
||||||
|
#import "btree.asm"
|
||||||
|
|
18
c64/menu.asm
18
c64/menu.asm
|
@ -109,17 +109,17 @@ menu_update:
|
||||||
|
|
||||||
!days:
|
!days:
|
||||||
.word day01 // 1
|
.word day01 // 1
|
||||||
.word 0 // 2
|
.word day02 // 2
|
||||||
.word 0 // 3
|
.word 0 // 3
|
||||||
.word 0 // 4
|
.word 0 // 4
|
||||||
.word day05 // 5
|
.word day05 // 5
|
||||||
.word 0 // 6
|
.word 0 // 6
|
||||||
.word 0 // 7
|
.word 0 // 7
|
||||||
.word 0 // 8
|
.word 0 // 8
|
||||||
.word 0
|
.word 0 // 17
|
||||||
.word day09 // 9
|
.word day09 // 9
|
||||||
.word 0
|
.word 0 // 16
|
||||||
.word 0
|
.word 0 // 18
|
||||||
.word 0 // 15
|
.word 0 // 15
|
||||||
.word 0
|
.word 0
|
||||||
.word 0 // 10
|
.word 0 // 10
|
||||||
|
@ -241,7 +241,7 @@ stabilized_irq:
|
||||||
* = * "Menu Data"
|
* = * "Menu Data"
|
||||||
menu_characters:
|
menu_characters:
|
||||||
.byte ' ',' ',' ',' ',$6f,$6f,$6f,$52,$52,$52,$46,$46,$46,$46,$42,$46,$46,$46,$46,$52,$52,$52,$6f,$6f,$6f,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','1','*','*'
|
.byte ' ',' ',' ',' ',$6f,$6f,$6f,$52,$52,$52,$46,$46,$46,$46,$42,$46,$46,$46,$46,$52,$52,$52,$6f,$6f,$6f,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','1','*','*'
|
||||||
.byte $45,$45,$77,$77,' ',$2e,$27,' ',' ',$2d,' ',' ',$2d,' ',' ',$4d,$2d,' ',$2e,$27,$27,$68,' ',$68,' ',$77,$77,$45,$45,$44,$43,$40,$46,$52,$6f,' ',' ','2',' ',' '
|
.byte $45,$45,$77,$77,' ',$2e,$27,' ',' ',$2d,' ',' ',$2d,' ',' ',$4d,$2d,' ',$2e,$27,$27,$68,' ',$68,' ',$77,$77,$45,$45,$44,$43,$40,$46,$52,$6f,' ',' ','2','*','*'
|
||||||
.byte $68,' ',' ',$68,' ',$27,$2e,$27,$2e,' ',$2d,' ',' ',' ',$2d,' ',$4d,' ',$2d,$27,$27,$3a,' ',' ',$68,' ',$68,' ',' ',' ',$68,' ',' ',$68,' ',' ',' ','3',' ',' '
|
.byte $68,' ',' ',$68,' ',$27,$2e,$27,$2e,' ',$2d,' ',' ',' ',$2d,' ',$4d,' ',$2d,$27,$27,$3a,' ',' ',$68,' ',$68,' ',' ',' ',$68,' ',' ',$68,' ',' ',' ','3',' ',' '
|
||||||
.byte ' ',' ',$68,' ',$68,' ',' ',$68,' ',$27,$27,$2e,$2e,$27,$27,$27,$64,$1b,$1d,$2e,$27,' ',' ',$68,' ',' ',' ',' ',$68,' ',' ',' ',$68,' ',$68,' ',' ','4',' ',' '
|
.byte ' ',' ',$68,' ',$68,' ',' ',$68,' ',$27,$27,$2e,$2e,$27,$27,$27,$64,$1b,$1d,$2e,$27,' ',' ',$68,' ',' ',' ',' ',$68,' ',' ',' ',$68,' ',$68,' ',' ','4',' ',' '
|
||||||
.byte $27,$2e,' ',$68,' ',' ',$68,' ',' ',$68,' ',' ',$64,$64,$6f,$4e,$63,$27,$27,' ',' ',$68,' ',' ',$68,' ',' ',$68,' ',' ',' ',' ',' ',$68,' ',' ',' ','5','*','*'
|
.byte $27,$2e,' ',$68,' ',' ',$68,' ',' ',$68,' ',' ',$64,$64,$6f,$4e,$63,$27,$27,' ',' ',$68,' ',' ',$68,' ',' ',$68,' ',' ',' ',' ',' ',$68,' ',' ',' ','5','*','*'
|
||||||
|
@ -251,7 +251,7 @@ menu_characters:
|
||||||
.byte ' ',' ',$68,' ',' ',' ',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ','1','7',' ',' '
|
.byte ' ',' ',$68,' ',' ',' ',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ','1','7',' ',' '
|
||||||
.byte ' ',' ',' ',' ',' ',$68,' ',$4d,' ',' ',' ',' ',' ',' ',' ',' ',' ',$27,$27,'.','.',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',' ','9','*','*'
|
.byte ' ',' ',' ',' ',' ',$68,' ',$4d,' ',' ',' ',' ',' ',' ',' ',' ',' ',$27,$27,'.','.',' ',' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',' ','9','*','*'
|
||||||
.byte ' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',$68,' ',' ',' ',' ',' ',$27,' ','[',']','.',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$68,' ',' ',$2e,' ','1','6',' ',' '
|
.byte ' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',$68,' ',' ',' ',' ',' ',$27,' ','[',']','.',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$68,' ',' ',$2e,' ','1','6',' ',' '
|
||||||
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',' ',' ',' ',' ',$27,' ',',',' ',':',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$3a,$27,$27,' ',' ',' ',' ',' ',' '
|
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',' ',' ',' ',' ',$27,' ',',',' ',':',$4d,' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',$3a,$27,$27,' ',' ','1','8',' ',' '
|
||||||
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,$4d,' ',' ',' ',' ',$27,'.','.',$27,' ',' ',$4d,$6f,$6f,$64,$64,$64,' ',' ',$68,' ',$27,$2e,' ',$2c,' ','1','5',' ',' '
|
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,$4d,' ',' ',' ',' ',$27,'.','.',$27,' ',' ',$4d,$6f,$6f,$64,$64,$64,' ',' ',$68,' ',$27,$2e,' ',$2c,' ','1','5',' ',' '
|
||||||
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',$68,' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$63,$63,$63,$77,$77,$4d,' ',' ',$3a,' ',' ',' ',' ',' ',' ',' '
|
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$4d,' ',$68,' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$63,$63,$63,$77,$77,$4d,' ',' ',$3a,' ',' ',' ',' ',' ',' ',' '
|
||||||
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$4d,' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$2e,$4d,$27,' ',$2c,' ',' ','1','0',' ',' '
|
.byte ' ',' ',' ',' ',' ',' ',' ',' ',' ',$68,' ',' ',$4d,' ',' ',' ',$68,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',$2e,$4d,$27,' ',$2c,' ',' ','1','0',' ',' '
|
||||||
|
@ -270,15 +270,15 @@ menu_colors:
|
||||||
.byte $6f, $0e, $6e, $0e, $0e, $0e, $0e, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $02, $0e, $0e, $0e, $0e, $0e // 0;00 - 0;20 | 6;10 - 6;30
|
.byte $6f, $0e, $6e, $0e, $0e, $0e, $0e, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $02, $0e, $0e, $0e, $0e, $0e // 0;00 - 0;20 | 6;10 - 6;30
|
||||||
.byte $0e, $0e, $0e, $0e, $0e, $00, $00, $f0, $00, $00, $00, $00, $00, $50, $50, $10, $e0, $6f, $07, $07 // 0;20 - 1;00 | 6;30 - 7;10
|
.byte $0e, $0e, $0e, $0e, $0e, $00, $00, $f0, $00, $00, $00, $00, $00, $50, $50, $10, $e0, $6f, $07, $07 // 0;20 - 1;00 | 6;30 - 7;10
|
||||||
.byte $0e, $0e, $0e, $0e, $0e, $01, $61, $0e, $0e, $61, $00, $00, $01, $00, $01, $01, $61, $0e, $01, $01 // 1;00 - 1;20 | 7;10 - 7;30
|
.byte $0e, $0e, $0e, $0e, $0e, $01, $61, $0e, $0e, $61, $00, $00, $01, $00, $01, $01, $61, $0e, $01, $01 // 1;00 - 1;20 | 7;10 - 7;30
|
||||||
.byte $01, $06, $00, $66, $0e, $0e, $0e, $fe, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $00, $10, $0f, $00, $60 // 1;20 - 2;00 | 7;30 - 8;10
|
.byte $01, $06, $00, $66, $0e, $0e, $0e, $fe, $0e, $0e, $0e, $0e, $6e, $0e, $0e, $00, $10, $0f, $07, $67 // 1;20 - 2;00 | 7;30 - 8;10
|
||||||
.byte $06, $0e, $0e, $06, $0e, $01, $01, $01, $01, $0e, $01, $00, $b0, $00, $01, $0e, $01, $0e, $01, $61 // 2;00 - 2;20 | 8;10 - 8;30
|
.byte $06, $0e, $0e, $06, $0e, $01, $01, $01, $01, $0e, $01, $00, $b0, $00, $01, $0e, $01, $0e, $01, $61 // 2;00 - 2;20 | 8;10 - 8;30
|
||||||
.byte $01, $01, $00, $00, $06, $00, $b6, $b0, $00, $00, $06, $03, $03, $06, $03, $60, $00, $1f, $00, $00 // 2;20 - 3;00 | 8;30 - 9;10
|
.byte $01, $01, $00, $00, $06, $00, $f6, $f0, $00, $00, $06, $03, $03, $06, $03, $60, $00, $1f, $00, $00 // 2;20 - 3;00 | 8;30 - 9;10
|
||||||
.byte $0e, $0e, $06, $0e, $06, $0e, $0e, $c6, $ce, $c1, $c1, $01, $01, $01, $01, $61, $01, $01, $01, $01 // 3;00 - 3;20 | 9;10 - 9;30
|
.byte $0e, $0e, $06, $0e, $06, $0e, $0e, $c6, $ce, $c1, $c1, $01, $01, $01, $01, $61, $01, $01, $01, $01 // 3;00 - 3;20 | 9;10 - 9;30
|
||||||
.byte $01, $00, $00, $66, $00, $00, $00, $f0, $76, $70, $00, $00, $06, $0e, $06, $00, $00, $0f, $10, $00 // 3;20 - 4;00 | 9;30 - 10;10
|
.byte $01, $00, $00, $66, $00, $00, $00, $f0, $76, $70, $00, $00, $06, $0e, $06, $00, $00, $0f, $10, $00 // 3;20 - 4;00 | 9;30 - 10;10
|
||||||
.byte $65, $05, $00, $06, $0e, $0e, $b6, $0e, $1e, $16, $51, $01, $01, $01, $01, $01, $01, $01, $61, $00 // 4;00 - 4;20 | 10;10 - 10;30
|
.byte $65, $05, $00, $06, $0e, $0e, $b6, $0e, $1e, $16, $51, $01, $01, $01, $01, $01, $01, $01, $61, $00 // 4;00 - 4;20 | 10;10 - 10;30
|
||||||
.byte $00, $66, $00, $00, $56, $00, $f0, $f6, $00, $00, $00, $00, $00, $06, $00, $00, $00, $0f, $07, $17 // 4;20 - 5;00 | 10;30 - 11;10
|
.byte $00, $66, $00, $00, $56, $00, $f0, $f6, $00, $00, $00, $00, $00, $06, $00, $00, $00, $0f, $07, $17 // 4;20 - 5;00 | 10;30 - 11;10
|
||||||
.byte $05, $00, $00, $05, $05, $b1, $01, $b1, $01, $b1, $11, $01, $01, $61, $01, $00, $06, $00, $00, $06 // 5;00 - 5;20 | 11;10 - 11;30
|
.byte $05, $00, $00, $05, $05, $b1, $01, $b1, $01, $b1, $11, $01, $01, $61, $01, $00, $06, $00, $00, $06 // 5;00 - 5;20 | 11;10 - 11;30
|
||||||
.byte $00, $50, $56, $50, $00, $00, $00, $00, $00, $06, $00, $00, $00, $00, $00, $00, $00, $0f, $00, $60 // 5;20 - 6;00 | 11;30 - 12;10
|
.byte $00, $50, $56, $50, $00, $00, $f0, $f0, $00, $06, $00, $00, $00, $00, $00, $00, $00, $0f, $00, $60 // 5;20 - 6;00 | 11;30 - 12;10
|
||||||
.byte $16, $00, $05, $01, $01, $c5, $55, $c5, $50, $00 // 6;00 - 6;10 | 12;10 - 12;20
|
.byte $16, $00, $05, $01, $01, $c5, $55, $c5, $50, $00 // 6;00 - 6;10 | 12;10 - 12;20
|
||||||
|
|
||||||
.byte $00, $01, $01, $01, $01, $01, $f1, $f1, $01, $06, $00, $05, $05, $0e, $05, $00, $0f, $0f, $00, $00 // 12;20 - 13;00 | 18;30 - 19;10
|
.byte $00, $01, $01, $01, $01, $01, $f1, $f1, $01, $06, $00, $05, $05, $0e, $05, $00, $0f, $0f, $00, $00 // 12;20 - 13;00 | 18;30 - 19;10
|
||||||
|
|
Loading…
Reference in a new issue