Compare commits
2 Commits
421c5deaf8
...
8fbaa207c5
Author | SHA1 | Date | |
---|---|---|---|
8fbaa207c5 | |||
8868221a5b |
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
*.o
|
||||
*.bin
|
||||
*.d
|
||||
*.map
|
||||
|
@ -50,7 +50,7 @@ end: .long _binary_2019_day1_input_txt_end
|
||||
.global _parse_int
|
||||
.align 4
|
||||
_parse_int:
|
||||
/* r0 = pointer to text ; r1 = number */
|
||||
/* r8 = pointer to text ; r1 = number */
|
||||
mov #0,r1 /* r1: accumulated number */
|
||||
parse_int_loop:
|
||||
mov.b @r8+,r2
|
||||
|
@ -1,2 +1,2 @@
|
||||
2019/day1/part1.elf: 2019/day1/part1_part2.o 2019/day1/sample.txt.o 2019/day1/input.txt.o
|
||||
2019/day1/part1_part2.elf: 2019/day1/part1_part2.o 2019/day1/sample.txt.o 2019/day1/input.txt.o
|
||||
$(DEFAULT_LINK)
|
||||
|
1000
2020/day2/input.txt
Normal file
1000
2020/day2/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
3
2020/day2/sample.txt
Normal file
3
2020/day2/sample.txt
Normal file
@ -0,0 +1,3 @@
|
||||
1-3 a: abcde
|
||||
1-3 b: cdefg
|
||||
2-9 c: ccccccccc
|
134
2020/day2/solution.s
Normal file
134
2020/day2/solution.s
Normal file
@ -0,0 +1,134 @@
|
||||
.global _start
|
||||
_start:
|
||||
mova stack_top,r0
|
||||
mov r0,r15
|
||||
|
||||
/* part1 */
|
||||
mova _part1,r0
|
||||
mov r0,r14
|
||||
mova solve,r0
|
||||
jsr @r0
|
||||
nop
|
||||
/* move part1 answer to GBR */
|
||||
ldc r13,gbr
|
||||
|
||||
/* part2 */
|
||||
mova _part2,r0
|
||||
mov r0,r14
|
||||
mova solve,r0
|
||||
jsr @r0
|
||||
nop
|
||||
/* move part2 answer to VBR */
|
||||
ldc r13,vbr
|
||||
|
||||
trapa #0
|
||||
|
||||
/* return number of valid passwords in r13 */
|
||||
.balign 4
|
||||
solve:
|
||||
sts.l pr,@-r15
|
||||
|
||||
mov.l start,r8
|
||||
mov.l end,r9
|
||||
|
||||
/* password is from r1 to r8, excluding r8; next line is at r8 */
|
||||
mov #0,r13
|
||||
line_loop:
|
||||
mova _parse_line,r0
|
||||
jsr @r0
|
||||
nop
|
||||
jsr @r14
|
||||
nop
|
||||
cmp/eq r8,r9
|
||||
bf/s line_loop
|
||||
add r1,r13
|
||||
|
||||
lds.l @r15+,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
/* return: valid as `1` in r1 */
|
||||
/* r10: test position 1 */
|
||||
/* r11: test position 2 */
|
||||
/* r12: test character */
|
||||
.balign 4
|
||||
_part2:
|
||||
add #-1,r1 /* offset for 1-based indexing */
|
||||
mov r10,r0
|
||||
mov.b @(r0,r1),r3 /* r3: character */
|
||||
cmp/eq r3,r12
|
||||
movt r2
|
||||
mov r11,r0
|
||||
mov.b @(r0,r1),r3 /* r3: character */
|
||||
cmp/eq r3,r12
|
||||
movt r1
|
||||
rts
|
||||
xor r2,r1
|
||||
|
||||
/* return: valid as `1` in r1 */
|
||||
/* r10: count >= lower bound */
|
||||
/* r11: count <= upper bound */
|
||||
/* r12: test character */
|
||||
.balign 4
|
||||
_part1:
|
||||
mov #0,r2 /* r2: count */
|
||||
part1_loop:
|
||||
cmp/eq r1,r8
|
||||
bt part1_break
|
||||
mov.b @r1+,r3 /* r3: character */
|
||||
cmp/eq r3,r12
|
||||
movt r0
|
||||
bra part1_loop
|
||||
add r0,r2
|
||||
part1_break:
|
||||
/* lower bound */
|
||||
cmp/hs r10,r2 /* Rn ≥ Rm (unsigned) ; r2 >= r10 */
|
||||
movt r0
|
||||
cmp/hs r2,r11 /* Rn ≥ Rm (unsigned) ; r11 >= r2 */
|
||||
movt r1
|
||||
rts
|
||||
and r0,r1
|
||||
|
||||
.balign 4
|
||||
_parse_line:
|
||||
/* save PR */
|
||||
sts.l pr,@-r15
|
||||
|
||||
mov.l parse_base10_ptr,r0
|
||||
jsr @r0
|
||||
nop
|
||||
mov r1,r10 /* r10: first number */
|
||||
mov.l parse_base10_ptr,r0
|
||||
jsr @r0
|
||||
nop
|
||||
mov r1,r11 /* r11: second number */
|
||||
|
||||
mov.b @r8+,r12 /* r12: character */
|
||||
/* skip colon character ; skip space character */
|
||||
add #2,r8
|
||||
/* advance until newline */
|
||||
mov r8,r1
|
||||
newline_loop:
|
||||
mov.b @r8+,r0
|
||||
cmp/eq #0xa,r0
|
||||
bf newline_loop
|
||||
|
||||
/* restore PR */
|
||||
lds.l @r15+,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
.balign 4
|
||||
parse_base10_ptr: /* r8 = pointer to text ; r1 = returned number */
|
||||
.long _parse_base10
|
||||
|
||||
.balign 4
|
||||
start: .long _binary_2020_day2_input_txt_start
|
||||
end: .long _binary_2020_day2_input_txt_end
|
||||
|
||||
.balign 4
|
||||
stack_bot:
|
||||
.rept 16
|
||||
.long 0
|
||||
.endr
|
||||
stack_top:
|
323
2020/day3/input.txt
Normal file
323
2020/day3/input.txt
Normal file
@ -0,0 +1,323 @@
|
||||
.#....#..##.#..####....#.......
|
||||
......#..#....#....###......#.#
|
||||
#..#.....#..............##.#.#.
|
||||
#.#...#....#...#......##..#..#.
|
||||
...#..#.##..#..#........###.#.#
|
||||
...#.#..........#.........##...
|
||||
...#.#....#.#....#..#......#...
|
||||
..##.#.....#.......#.###..#..##
|
||||
..#.......#.......#....##......
|
||||
....##........##.##...#.###.##.
|
||||
#.......#.......##..#......#...
|
||||
..##.............##.#......#...
|
||||
...#.####....#.....#...##......
|
||||
.............##.#......#.......
|
||||
..#...#....#......#....#.......
|
||||
..#....#..#............#.......
|
||||
##...#..#........##..#......#..
|
||||
##........##........#.#.......#
|
||||
#.......#........#.#..#....###.
|
||||
.....#..#.#..........##...#....
|
||||
..##...#......#.#...#..#...#...
|
||||
##.##...#......#....#....#...#.
|
||||
#.......#..#.#..#....#..###.#.#
|
||||
#.............#.#....#..#.#....
|
||||
...#.......###.#.##.##.#...#..#
|
||||
.##.......##..##...#..###......
|
||||
.......#.#.#.#..####..#..#..#..
|
||||
...##......#.#.##.###....#.###.
|
||||
###......###......#.#####..#...
|
||||
..#........##..#..##.##..#...#.
|
||||
.....##..#...#..#.##.....#.#...
|
||||
#......#.##....#..##.#....#.#..
|
||||
##.#.##..#................#....
|
||||
......#.#....#......##.....#...
|
||||
..#...##..#..#...#..#.#..#.....
|
||||
........#.#.#.##...#.#.....#.#.
|
||||
#.#......#.....##..#...#.......
|
||||
..#.#......#...........###.....
|
||||
......##....#....##..#..#.#.#.#
|
||||
##....#.###...#......#..#...#..
|
||||
#.#.##....###...####.......#..#
|
||||
##...........#.....#........#.#
|
||||
.##.#..#.....#......#.......#..
|
||||
##..##..###....#.........##....
|
||||
..#..#..#.##...#.#...#........#
|
||||
#.##.###...#.......#...........
|
||||
.........#.................#...
|
||||
#.##...#.....#..##........#....
|
||||
....#.#...##...#...........#...
|
||||
.#.....#.#..#...##..##.....#...
|
||||
.#.....####....#..##..#........
|
||||
...#..#......##.#..##.#.#.#..#.
|
||||
.##.#.....#.....#...#.......##.
|
||||
......#..#..#......#...####....
|
||||
.......#......##..#..##.....#..
|
||||
......#.#..#...#..#.#..........
|
||||
....##.........#...............
|
||||
.#....#..##.....#....##.##.....
|
||||
#.#.....#...#....####....#.#...
|
||||
#.....#....#.#...#.............
|
||||
...#..#.....#....##..#..#......
|
||||
...#.#............#...........#
|
||||
###.#..#.#......#.....##.....#.
|
||||
####....#....###.....#..#.#####
|
||||
.###..#...#.#..#......##.#.#.#.
|
||||
.....#.##.#....#..##....#..#..#
|
||||
...#....#...##.....#......#.#..
|
||||
....#...#....#...#....#.....#.#
|
||||
.#.....#.....#.#..#......#..#..
|
||||
..#..##....##.##....#.....##...
|
||||
#..##...#.##...#..#.#.#.....#..
|
||||
...#..##.#..#....#.#....######.
|
||||
..........#..#.....#....#...##.
|
||||
#.#####.#.###..#.....#.........
|
||||
#....#......#..#.#.##.##..###..
|
||||
..#...###.#.#....##.##...##....
|
||||
.......#....#..#...##......#...
|
||||
...#.#...#..#.....#..##.#......
|
||||
###..##...........#............
|
||||
..#....#.##....#.#..##...#.....
|
||||
##....#...#....#.....#.#..##...
|
||||
..............#.##.#..#..##.###
|
||||
......#..#..#..#.#....###...##.
|
||||
.#...#..#.#.#....#..........#..
|
||||
..#.#.....#..#...........#.##..
|
||||
...#.#......#......#..#..#.#...
|
||||
...#....#.#.#.....#...#.##..#..
|
||||
.#.#..#...#........##.......#..
|
||||
##..........#..#...#....###.#..
|
||||
#.....###......#..#.#.#....#.#.
|
||||
..###.......#.#...............#
|
||||
#....#.....#.#......#..##.##...
|
||||
#.##.#.#....#..#.#...#.#...#..#
|
||||
#....#..#...........#.......#..
|
||||
...#.####.....#.........###.##.
|
||||
......#..#.....#..........#..#.
|
||||
#...#.#..####...#...#.#.##...##
|
||||
.##.........#......#.#.#.......
|
||||
.......##...##.##....###...##..
|
||||
...#..#....#..#.#.#.....#.#....
|
||||
#....#.#.#.......##..###..##...
|
||||
......#............#.#...#..#..
|
||||
#.#.....#......#...#.......###.
|
||||
...#.#................#...#....
|
||||
.....#......#.#..#...##.#.#...#
|
||||
#....#.#..#..#..##..#.##..#....
|
||||
#.................#..#....#....
|
||||
..#....#.......####....###.....
|
||||
.#..#.#.#...###..#...#..###....
|
||||
..#..#.#......#.###..........#.
|
||||
.....#......#.......##....##.#.
|
||||
.#....#........#.#.##.#........
|
||||
#.#..##..#..#.#...####....##...
|
||||
...#....#.#..#...#..........#..
|
||||
.#.....#.##....#...##..........
|
||||
....##....#.....#.....#...#.###
|
||||
.#...##.#.#..##..#...#.#..#..#.
|
||||
..#.......#.##.....#.#........#
|
||||
...#...#.....##..#.#.#....#....
|
||||
...#.....#.......##.........#.#
|
||||
.##.....#..#.#...#.#...#.#...#.
|
||||
...........#...#.###..#...#..#.
|
||||
#.##........#..###.##...####...
|
||||
.#.....#.#...##...#..#..#...##.
|
||||
..#....#..#...#.....#.....##...
|
||||
..###..#.#.....##........#.##..
|
||||
.#.#..##........#.##....#..#.##
|
||||
.####.#..##..#.#..#....##....#.
|
||||
.##....##...#.#........#.......
|
||||
....#..#..#...#..#..#..#.#.....
|
||||
...#......................#....
|
||||
#.....#.#....#..#..#.#..#....#.
|
||||
##.....#.....##..........###...
|
||||
.#..#..............#...##.#.#.#
|
||||
...#...#.#.............#.#..#.#
|
||||
..#.....#.......#......#.#.....
|
||||
.###.#..#..#..#.#..#.....#.....
|
||||
.....##..##...##.......#....###
|
||||
.#........###...##..#....##....
|
||||
#....#.#......##..#....#.##..#.
|
||||
#....#.#...#........##...###...
|
||||
.#.....#...#.###....#.##.#.####
|
||||
###......#....#...#....##..#..#
|
||||
##....#..###......#...#.#.#....
|
||||
..........#......##.#..#.......
|
||||
.#..#......###.........##...#..
|
||||
....#......#....#.........#.#.#
|
||||
##.#.#...#.#...#...#..#......#.
|
||||
....#.##.........#..#.....##.#.
|
||||
........#...#..#.#.#.#.....##..
|
||||
..#......#.#.#..#.....##.......
|
||||
..............#....#....##.#..#
|
||||
....#.#.....#....#.#.###.#....#
|
||||
..#..........#..#......#.##..#.
|
||||
...#...#.#.............#..#....
|
||||
#.......#..#..##.........##..#.
|
||||
..##..#............#.....#.....
|
||||
....#.#..##...#.#..#.........#.
|
||||
........#.......#.##....#....#.
|
||||
...#.....#.#.....#.#....#......
|
||||
..#......##.#.............#.#.#
|
||||
#.#.............#.#.....#......
|
||||
.##....##.#.....#....#...##....
|
||||
.#.#....##....#.....##.........
|
||||
...#.....#.....#.....#..#.###..
|
||||
.......#....#...##.#...#...#..#
|
||||
..#.#.......#...###.#...#....#.
|
||||
.....###..##....###.#.##.......
|
||||
....#..................##.#.##.
|
||||
.#.......###.##...#.#.....#....
|
||||
....#....##...##.....#.#...#..#
|
||||
#..#.....#......##...#....#....
|
||||
#..##.........#.....#...#......
|
||||
...#..##.......##......#..#####
|
||||
.#..###.###.#.##........#......
|
||||
.#...#....#....#.#....#...##...
|
||||
##........#....#.........##..#.
|
||||
.#.....##............#.#.......
|
||||
....#....#...........###.....##
|
||||
.#......#.#.#..#....#.#.....##.
|
||||
......#.##.#..##....#.#.#..#...
|
||||
#....#......#...#..####........
|
||||
......#..#..##..#.......#.#..#.
|
||||
##....##.###.#...#.##.#..#.###.
|
||||
.#.........#...##...#.#......#.
|
||||
..#.#...........####.#....##.##
|
||||
.....#.#..##.#...###...#..#.#..
|
||||
...#..#..##.#...#.....#.##...##
|
||||
..##......##..........#..###...
|
||||
.#......##.....#.##....#.#.##.#
|
||||
...#.......##..##.....#....#...
|
||||
.##...#...#....#..#............
|
||||
#..#....#...........#..........
|
||||
......#...#.#.......#...#.##..#
|
||||
..#.###..#.....#.....#..#.....#
|
||||
....#....#..........##....#..#.
|
||||
.......##.#.#.#......#....#...#
|
||||
####..#.###........#..#......#.
|
||||
#........##.#.#.#.............#
|
||||
.#......#......#..#.##.....#...
|
||||
.....##.##......##.#.....#.#.#.
|
||||
.......##.#.....##.......#.#.#.
|
||||
.#.#..#.#..#.##...#.#....#.#..#
|
||||
.#..##....#..#...##.......#..#.
|
||||
.#.#..#.......#................
|
||||
#........#.#.#......#.#.#.#....
|
||||
##......#...#..##.#...##.##....
|
||||
##.#..#...........##...#..###..
|
||||
......#.####...#........#.#.#..
|
||||
...#........##..###.#.#...#...#
|
||||
.#.....##..#......##......###..
|
||||
..#.#...#......#..#..##.#.....#
|
||||
#....#..#.#..........#...#.....
|
||||
.#......#.##..###..#.#....#..##
|
||||
.......#.......#..#..#......#..
|
||||
..##.....##.#..#..#.....##.....
|
||||
........#.##...#.#.#..#..#..#..
|
||||
...#.######.........#.....#..##
|
||||
.#.#............#....#.........
|
||||
#...#....###.#......#.#........
|
||||
#.........#....#...##..........
|
||||
....#...........#.###.#...###..
|
||||
.........#........#.#.#..#...#.
|
||||
.#.......#.#.....#.#.....#.##..
|
||||
.....#.......#.....#.#.#.......
|
||||
#.##..#..##.......#...#......#.
|
||||
.###.....##...##.#...##.##.#.#.
|
||||
...#......##..##............#.#
|
||||
...#......................#..##
|
||||
#..#..#................#...#...
|
||||
#..#....#.#.#...##.......#..#..
|
||||
....#.#..###.##...#..#.###..#..
|
||||
..#...#....####.#............#.
|
||||
......#....#.#...#.#.#.........
|
||||
#...#........#.....##..###.#..#
|
||||
#....#...#...##...#..#....##...
|
||||
#..#...#..#.......#.#..##.#..#.
|
||||
#.#..........#...........##....
|
||||
.#...###...#......#.......#.#.#
|
||||
.........#.........#...#...##..
|
||||
##.#..###......##..#.....#..#..
|
||||
....##...............#.....#...
|
||||
.....#.....###.#.....#.#.......
|
||||
....#..#......###..#..##..#....
|
||||
......................#.....#..
|
||||
..#..#...##....##....#........#
|
||||
..#....#...#...#.......#.....#.
|
||||
...##.#.#.##......#.#.#.#.####.
|
||||
.###...#..#......#.#..#........
|
||||
#..#...##.#..#..##..##....#...#
|
||||
...#...#..#..#..#........#..##.
|
||||
.##....#.##.#....#...#.#.#....#
|
||||
#..#....#..#....#.......##..#.#
|
||||
...#.#....####...........#...#.
|
||||
#...#####...#.#..#......#...#.#
|
||||
.##....#.#.#..#......#..##.....
|
||||
..........#..#.#.#.....##......
|
||||
.....#....#..................#.
|
||||
.........#...#...#....#..###...
|
||||
.#.#.#....#....................
|
||||
......##............##.###..#..
|
||||
#.#...#........####.##..#.#.##.
|
||||
#........#.#.#.#..#.##.....#...
|
||||
......####..#.##.......#....#..
|
||||
.........#...#...#.....#.......
|
||||
..##.....#...#...#.....##.....#
|
||||
....#...##....#.....#..#..##.##
|
||||
..#.........##...##..###..#....
|
||||
#....#.#.........##.###.#...##.
|
||||
.##...#....#..#..#.#....##.....
|
||||
##..#..#..#...........#.##....#
|
||||
....#..........#...#..#.....#..
|
||||
........###..#..#.#.#.....##...
|
||||
#...#...#..###............###..
|
||||
..#.....#.#.#..#..#.#..#......#
|
||||
..#...##..#....#...#......#....
|
||||
#....#........##.....#..##....#
|
||||
#.....#.#.#..#.......##.#.#.##.
|
||||
..##...#...#.....#..........#..
|
||||
##.....#....#......#..........#
|
||||
......#..#..........#.#..####..
|
||||
......#...#............##...##.
|
||||
..#.......##.......#...###.###.
|
||||
.#..#.#.#...#..##.#......#.#...
|
||||
.##.....##.#.#...#.##.........#
|
||||
#.#.######...........#.#####.#.
|
||||
........#.##...##....##.#.##.#.
|
||||
....#......#.....#.....###...##
|
||||
#..............#.#....#.#....#.
|
||||
....#..###.#.........##.#.#....
|
||||
..#.#.#..##....####..........#.
|
||||
...#..#.......#................
|
||||
...#....#..............#....#..
|
||||
.....#...#...#....#.#.#..#...#.
|
||||
......##.............###.##..##
|
||||
.#...#.#..#......#..#.##.......
|
||||
##.....#.....#.##...#....#.....
|
||||
..#..#.#.#.#.#..........#..###.
|
||||
##..........#........#....#.#..
|
||||
.....#...#........#.#..###....#
|
||||
.###.#........#.##......#.#...#
|
||||
#...##....#....#....##.#.#.....
|
||||
.....#.#............#..........
|
||||
..#.##....................#....
|
||||
.....#..#..#.#..#.##.......#...
|
||||
.....###......#......##......##
|
||||
#.....#.#.......##.......#...#.
|
||||
.#.#...#......#..###...#.....#.
|
||||
#.#..#...#..##.....#...#.#..#..
|
||||
.....#.#..........#..#.........
|
||||
.###..##..##.....#...#...#..##.
|
||||
#...#.#....#.......##..#.......
|
||||
###...#.#.#..#.......#......#..
|
||||
....##........#..........##....
|
||||
............#....#...........#.
|
||||
#..#.#....##..#.#..#......##...
|
||||
.###....##...#....##..........#
|
||||
.###........#........###.....#.
|
||||
...#...#.#......#...#....#.....
|
||||
.###.......#.........#.........
|
||||
....##.#......#...###......##.#
|
||||
.###...#..##.....##.......#....
|
||||
.#.#...#..#.##....#........#...
|
11
2020/day3/sample.txt
Normal file
11
2020/day3/sample.txt
Normal file
@ -0,0 +1,11 @@
|
||||
..##.......
|
||||
#...#...#..
|
||||
.#....#..#.
|
||||
..#.#...#.#
|
||||
.#...##..#.
|
||||
..#.##.....
|
||||
.#.#.#....#
|
||||
.#........#
|
||||
#.##...#...
|
||||
#...##....#
|
||||
.#..#...#.#
|
161
2020/day3/solution.s
Normal file
161
2020/day3/solution.s
Normal file
@ -0,0 +1,161 @@
|
||||
.global _start
|
||||
_start:
|
||||
mova stack_top,r0
|
||||
mov r0,r15
|
||||
|
||||
_input:
|
||||
mov.l start,r8
|
||||
mov.l size,r9
|
||||
|
||||
/* returns stride in r1 */
|
||||
mova _calculate_stride,r0
|
||||
jsr @r0
|
||||
mov r8,r1
|
||||
|
||||
mov r1,r10 /* r10: stride */
|
||||
|
||||
/* part 1 */
|
||||
mov #3,r13 /* right 3 */
|
||||
mov #1,r14 /* down 1 */
|
||||
|
||||
mova _solve,r0
|
||||
jsr @r0
|
||||
nop
|
||||
|
||||
ldc r7,gbr /* part1 answer */
|
||||
|
||||
/* part 2 */
|
||||
mova part2_data,r0
|
||||
mov r0,r4 /* r4: part2 data start */
|
||||
mov #10,r3
|
||||
add r4,r3 /* r3: part2 data end */
|
||||
|
||||
mov #1,r6 /* r6: tree multiplier */
|
||||
|
||||
part2_loop:
|
||||
mov.b @r4+,r13 /* right */
|
||||
mov.b @r4+,r14 /* down */
|
||||
|
||||
mova _solve,r0
|
||||
jsr @r0
|
||||
nop
|
||||
|
||||
dmulu.l r7,r6
|
||||
cmp/eq r4,r3
|
||||
bf/s part2_loop
|
||||
sts macl,r6
|
||||
|
||||
/* part2 answer : mach,macl */
|
||||
|
||||
trapa #0
|
||||
|
||||
/* right, down */
|
||||
.balign 4
|
||||
part2_data:
|
||||
.byte 1, 1
|
||||
.byte 3, 1
|
||||
.byte 5, 1
|
||||
.byte 7, 1
|
||||
.byte 1, 2
|
||||
|
||||
/* r7: number of trees (in/out) */
|
||||
.balign 4
|
||||
_solve:
|
||||
/* initial state */
|
||||
mov #0,r7 /* number of trees encountered */
|
||||
mov #0,r11 /* position X */
|
||||
mov #0,r12 /* position Y */
|
||||
solve_loop:
|
||||
/* return value in r1 */
|
||||
sts.l pr,@-r15
|
||||
mova _slope_step,r0
|
||||
jsr @r0
|
||||
nop
|
||||
lds.l @r15+,pr
|
||||
|
||||
cmp/pz r1 /* r1 ≥ 0 */
|
||||
bf solve_end /* this is the end */
|
||||
bra solve_loop
|
||||
add r1,r7 /* increment tree count */
|
||||
|
||||
solve_end:
|
||||
rts
|
||||
nop
|
||||
|
||||
.balign 4
|
||||
_slope_step:
|
||||
/* r11: position X */
|
||||
/* r12: position Y */
|
||||
/* r13: right N */
|
||||
/* r14: down N */
|
||||
/* r8 : start */
|
||||
/* r9 : size */
|
||||
/* r10: stride */
|
||||
/* return r1 : tree encountered (-1,0,1) */
|
||||
|
||||
add r13,r11 /* r11 + r13 → r11 (X) */
|
||||
add r14,r12 /* r12 + r14 → r12 (Y) */
|
||||
|
||||
/* Y-coordinate × stride → r5 */
|
||||
mulu.w r10,r12 /* offset */
|
||||
sts macl,r5
|
||||
|
||||
sts.l pr,@-r15
|
||||
|
||||
/* X-axis wrap-around */
|
||||
mov r11,r1
|
||||
mov r10,r0
|
||||
add #-1,r0 /* subtract 1 to remove newline */
|
||||
mov.l div32_16_ptr,r2
|
||||
jsr @r2 /* r1 ÷ r0 → r1 ; (clobbers r0,r1) */
|
||||
mov r0,r2 /* save width in r2 (not clobbered) */
|
||||
|
||||
lds.l @r15+,pr
|
||||
|
||||
/* recover the modulus with a multiplication + subtraction */
|
||||
mulu.w r2,r1
|
||||
sts macl,r1
|
||||
mov r11,r0
|
||||
sub r1,r0 /* r0 - r1 → r0
|
||||
|
||||
/* calculate offset (y_off + x_off → off) */
|
||||
add r5,r0
|
||||
/* compare r0 offset with r9 size */
|
||||
cmp/hs r9,r0 /* r0 ≥ r9 → T */
|
||||
bt end_of_slope
|
||||
|
||||
/* get tree */
|
||||
mov.b @(r0,r8),r0
|
||||
cmp/eq #0x23,r0 /* 0x23 ascii `#` */
|
||||
rts
|
||||
movt r1
|
||||
end_of_slope:
|
||||
rts
|
||||
mov #-1,r1 /* -1: end of slope */
|
||||
|
||||
.balign 4
|
||||
div32_16_ptr: .long _div32_16
|
||||
|
||||
.balign 4
|
||||
_calculate_stride:
|
||||
/* r8: const input start */
|
||||
/* r1: input start (initialized by caller) */
|
||||
/* return r1 : stride */
|
||||
loop:
|
||||
mov.b @r1+,r0
|
||||
cmp/eq #0xa,r0 /* ascii space */
|
||||
bf loop
|
||||
sub r8,r1 /* r1 - r8 → r1 */
|
||||
rts
|
||||
nop
|
||||
|
||||
.balign 4
|
||||
start: .long _binary_2020_day3_input_txt_start
|
||||
size: .long _binary_2020_day3_input_txt_size
|
||||
|
||||
.balign 4
|
||||
stack_bot:
|
||||
.rept 16
|
||||
.long 0
|
||||
.endr
|
||||
stack_top:
|
21
2020/deps.mk
Normal file
21
2020/deps.mk
Normal file
@ -0,0 +1,21 @@
|
||||
2020_DAY2_OBJ = \
|
||||
2020/day2/solution.o \
|
||||
2020/day2/sample.txt.o \
|
||||
2020/day2/input.txt.o \
|
||||
common/parse_base10.o
|
||||
|
||||
2020/day2/solution.elf: $(2020_DAY2_OBJ)
|
||||
$(DEFAULT_LINK)
|
||||
|
||||
2020_DAY3_OBJ = \
|
||||
2020/day3/solution.o \
|
||||
2020/day3/sample.txt.o \
|
||||
2020/day3/input.txt.o \
|
||||
common/div32_16.o
|
||||
|
||||
2020/day3/solution.elf: $(2020_DAY3_OBJ)
|
||||
$(DEFAULT_LINK)
|
||||
|
||||
ALL_ELF += \
|
||||
2020/day2/solution.elf \
|
||||
2020/day3/solution.elf
|
8
Makefile
8
Makefile
@ -28,6 +28,9 @@ CFLAGS += -ffreestanding -nostdlib
|
||||
DEPFLAGS = -MMD -MP
|
||||
LDFLAGS += --no-warn-execstack
|
||||
|
||||
ALL_ELF =
|
||||
all:
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CARCH) $(CC_ENDIAN) $(CFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -MF ${<}.d -c $< -o $@
|
||||
|
||||
@ -58,7 +61,7 @@ endef
|
||||
clean:
|
||||
find -P \
|
||||
-regextype posix-egrep \
|
||||
-regex '.*\.(o|bin|elf|d)$$' \
|
||||
-regex '.*\.(o|bin|elf|d|map)$$' \
|
||||
-exec rm {} \;
|
||||
|
||||
.SUFFIXES:
|
||||
@ -75,3 +78,6 @@ clean:
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
include 2019/deps.mk
|
||||
include 2020/deps.mk
|
||||
|
||||
all: $(subst .elf,.bin,$(ALL_ELF))
|
||||
|
18
common/div32_16.s
Normal file
18
common/div32_16.s
Normal file
@ -0,0 +1,18 @@
|
||||
.global _div32_16
|
||||
.align 4
|
||||
_div32_16:
|
||||
/* r1 (32 bits) ÷ r0 (16 bits) */
|
||||
shll16 r0
|
||||
cmp/hs r0,r1
|
||||
bt over_div
|
||||
div0u
|
||||
.rept 16
|
||||
div1 r0,r1
|
||||
.endr
|
||||
rotcl r1
|
||||
rts
|
||||
extu.w r1,r1
|
||||
over_div:
|
||||
bra over_div
|
||||
nop
|
||||
/* r1 = quotient */
|
22
common/parse_base10.s
Normal file
22
common/parse_base10.s
Normal file
@ -0,0 +1,22 @@
|
||||
.section .text.parse_base10
|
||||
|
||||
.global _parse_base10
|
||||
_parse_base10:
|
||||
/* r8 = pointer to text ; r1 = number */
|
||||
mov #0,r1 /* r1: accumulated number */
|
||||
parse_base10_loop:
|
||||
mov.b @r8+,r2
|
||||
add #-48,r2 /* ascii '0' */
|
||||
cmp/pz r2 /* Rn >= 0 (signed) (r2 >= 0 ) */
|
||||
bf/s parse_base10_rts
|
||||
mov #9,r4 /* const 9 */
|
||||
cmp/ge r2,r4 /* Rn >= Rm (signed) ( 9 >= r2) */
|
||||
bf/s parse_base10_rts
|
||||
mov #10,r4 /* const 10 */
|
||||
mulu.w r1,r4
|
||||
sts macl,r1
|
||||
bra parse_base10_loop
|
||||
add r2,r1
|
||||
parse_base10_rts:
|
||||
rts
|
||||
nop
|
Loading…
x
Reference in New Issue
Block a user