add 2019 day 1
This commit is contained in:
parent
bfbd6830a8
commit
3a933db011
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*.elf
|
||||
*.o
|
||||
*.bin
|
||||
*.d
|
100
2019/day1/input.txt
Normal file
100
2019/day1/input.txt
Normal file
@ -0,0 +1,100 @@
|
||||
98578
|
||||
105016
|
||||
93022
|
||||
144768
|
||||
80394
|
||||
112379
|
||||
121119
|
||||
94660
|
||||
126363
|
||||
112893
|
||||
102603
|
||||
93967
|
||||
77268
|
||||
103649
|
||||
70132
|
||||
142499
|
||||
143711
|
||||
140554
|
||||
104725
|
||||
84738
|
||||
70613
|
||||
108746
|
||||
111488
|
||||
89944
|
||||
67984
|
||||
59613
|
||||
80035
|
||||
69350
|
||||
134001
|
||||
62115
|
||||
104688
|
||||
143033
|
||||
109712
|
||||
96194
|
||||
90353
|
||||
96899
|
||||
131267
|
||||
143909
|
||||
96649
|
||||
138803
|
||||
140620
|
||||
73931
|
||||
118851
|
||||
58910
|
||||
92205
|
||||
132615
|
||||
83308
|
||||
73807
|
||||
146895
|
||||
142622
|
||||
56234
|
||||
126672
|
||||
79278
|
||||
111589
|
||||
57593
|
||||
80856
|
||||
76261
|
||||
89204
|
||||
110871
|
||||
74731
|
||||
68654
|
||||
103148
|
||||
89935
|
||||
58596
|
||||
89510
|
||||
101248
|
||||
86137
|
||||
56176
|
||||
78679
|
||||
128987
|
||||
73114
|
||||
143844
|
||||
69805
|
||||
54820
|
||||
99223
|
||||
119668
|
||||
79449
|
||||
98890
|
||||
64512
|
||||
104946
|
||||
126345
|
||||
128346
|
||||
112212
|
||||
135582
|
||||
108214
|
||||
111077
|
||||
75745
|
||||
125934
|
||||
52956
|
||||
102036
|
||||
108452
|
||||
129232
|
||||
97091
|
||||
106975
|
||||
92156
|
||||
145892
|
||||
66680
|
||||
88452
|
||||
75081
|
||||
102811
|
124
2019/day1/part1_part2.s
Normal file
124
2019/day1/part1_part2.s
Normal file
@ -0,0 +1,124 @@
|
||||
.global _start
|
||||
_start:
|
||||
/* part1 */
|
||||
mova _part_fuel,r0
|
||||
mov r0,r12
|
||||
mova _accumulate,r0
|
||||
jsr @r0
|
||||
nop
|
||||
mov r10,r11 /* r11: part1 answer */
|
||||
|
||||
/* part2 */
|
||||
mova _part2_fuel,r0
|
||||
mov r0,r12
|
||||
mova _accumulate,r0
|
||||
jsr @r0
|
||||
nop /* r10: part2 answer */
|
||||
|
||||
forever:
|
||||
bra forever
|
||||
nop
|
||||
|
||||
/* r12: fuel function */
|
||||
.align 4
|
||||
_accumulate:
|
||||
mov.l start,r8
|
||||
mov.l end,r9
|
||||
mov #0,r10 /* r10: sum */
|
||||
sts pr,r15 /* save PR */
|
||||
accumulator_loop:
|
||||
cmp/hs r9,r8 /* Rn ≥ Rm (unsigned) */
|
||||
bt accumulator_rts
|
||||
mova _parse_int,r0
|
||||
jsr @r0
|
||||
nop
|
||||
|
||||
jsr @r12
|
||||
nop
|
||||
bra accumulator_loop
|
||||
add r1,r10
|
||||
|
||||
accumulator_rts:
|
||||
lds r15,pr /* restore PR */
|
||||
rts
|
||||
nop
|
||||
|
||||
.align 4
|
||||
start: .long _binary_2019_day1_input_txt_start
|
||||
end: .long _binary_2019_day1_input_txt_end
|
||||
|
||||
.global _parse_int
|
||||
.align 4
|
||||
_parse_int:
|
||||
/* r0 = pointer to text ; r1 = number */
|
||||
mov #0,r1 /* r1: accumulated number */
|
||||
parse_int_loop:
|
||||
mov.b @r8+,r2
|
||||
add #-48,r2 /* ascii '0' */
|
||||
cmp/pz r2 /* Rn >= 0 (signed) (r2 >= 0 ) */
|
||||
bf/s parse_int_rts
|
||||
mov #9,r4 /* const 9 */
|
||||
cmp/ge r2,r4 /* Rn >= Rm (signed) ( 9 >= r2) */
|
||||
bf/s parse_int_rts
|
||||
mov #10,r4 /* const 10 */
|
||||
mulu.w r1,r4
|
||||
sts macl,r1
|
||||
bra parse_int_loop
|
||||
add r2,r1
|
||||
parse_int_rts:
|
||||
rts
|
||||
nop
|
||||
|
||||
.global _part2_fuel
|
||||
.align 4
|
||||
_part2_fuel:
|
||||
/* r1 = mass */
|
||||
sts pr,r13 /* save PR */
|
||||
mov #0,r5 /* r5: fuel sum */
|
||||
|
||||
part2_fuel_for_fuel:
|
||||
mova _part_fuel,r0
|
||||
jsr @r0
|
||||
nop
|
||||
|
||||
cmp/pl r1 /* signed Rn > 0 */
|
||||
bf part2_rts
|
||||
bra part2_fuel_for_fuel
|
||||
add r1,r5
|
||||
|
||||
part2_rts:
|
||||
lds r13,pr /* restore PR */
|
||||
rts
|
||||
mov r5,r1
|
||||
|
||||
.global _part_fuel
|
||||
.align 4
|
||||
_part_fuel:
|
||||
/* r1 = mass */
|
||||
sts pr,r14 /* save PR */
|
||||
mova _div32_16,r0
|
||||
jsr @r0
|
||||
mov #3,r0
|
||||
lds r14,pr /* restore PR */
|
||||
rts
|
||||
add #-2,r1
|
||||
|
||||
|
||||
.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 */
|
4
2019/day1/sample.txt
Normal file
4
2019/day1/sample.txt
Normal file
@ -0,0 +1,4 @@
|
||||
12
|
||||
14
|
||||
1969
|
||||
100756
|
2
2019/deps.mk
Normal file
2
2019/deps.mk
Normal file
@ -0,0 +1,2 @@
|
||||
2019/day1/part1.elf: 2019/day1/part1_part2.o 2019/day1/sample.txt.o 2019/day1/input.txt.o
|
||||
$(DEFAULT_LINK)
|
@ -6,8 +6,10 @@ _start:
|
||||
parse_lines:
|
||||
|
||||
_pointers:
|
||||
/* mova sample_input_start,r0 */
|
||||
mova input_start,r0
|
||||
mov r0,r14 /* r14: pointer to input start */
|
||||
/* mova sample_input_end,r0 */
|
||||
mov.l input_end,r0
|
||||
mov r0,r15 /* r15: pointer to input end */
|
||||
|
77
Makefile
Normal file
77
Makefile
Normal file
@ -0,0 +1,77 @@
|
||||
TARGET ?= sh4-unknown-linux-gnu-
|
||||
AS=$(TARGET)as
|
||||
LD=$(TARGET)ld
|
||||
CC=$(TARGET)gcc
|
||||
OBJCOPY=$(TARGET)objcopy
|
||||
ENDIAN ?= little
|
||||
ifeq ($(ENDIAN),little)
|
||||
AS_ENDIAN = --little
|
||||
LD_ENDIAN = -EL
|
||||
CC_ENDIAN = -ml
|
||||
OBJ_ENDIAN = -O elf32-sh-linux
|
||||
else
|
||||
AS_ENDIAN = --big
|
||||
LD_ENDIAN = -EB
|
||||
CC_ENDIAN = -mb
|
||||
OBJ_ENDIAN = -O elf32-sh
|
||||
endif
|
||||
|
||||
OPT = -Og
|
||||
|
||||
DEBUG = -g -gdwarf-4
|
||||
AARCH = --isa=sh4
|
||||
CARCH = -m4-single-only
|
||||
OBJARCH = -B sh4
|
||||
CFLAGS += -Wall -Werror -Wfatal-errors
|
||||
CFLAGS += -falign-functions=4 -ffunction-sections -fdata-sections -fshort-enums
|
||||
CFLAGS += -ffreestanding -nostdlib
|
||||
DEPFLAGS = -MMD -MP
|
||||
LDFLAGS += --no-warn-execstack
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CARCH) $(CC_ENDIAN) $(CFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -MF ${<}.d -c $< -o $@
|
||||
|
||||
%.o: %.s
|
||||
$(AS) $(AARCH) $(AS_ENDIAN) $(DEBUG) $< -o $@
|
||||
|
||||
define DEFAULT_LINK
|
||||
$(LD) $(LD_ENDIAN) $(LDFLAGS) \
|
||||
--section-start=.text=0x0 \
|
||||
--entry=_start $^ -o $@
|
||||
endef
|
||||
|
||||
define BUILD_BINARY_O
|
||||
$(OBJCOPY) \
|
||||
-I binary $(OBJARCH) $(OBJ_ENDIAN) \
|
||||
$< $@
|
||||
endef
|
||||
|
||||
%.txt.o: %.txt
|
||||
$(BUILD_BINARY_O)
|
||||
|
||||
%.elf: %.o
|
||||
$(DEFAULT_LINK)
|
||||
|
||||
%.bin: %.elf
|
||||
$(OBJCOPY) -O binary --remove-section=.stack $< $@
|
||||
|
||||
clean:
|
||||
find -P \
|
||||
-regextype posix-egrep \
|
||||
-regex '.*\.(o|bin|elf|d)$$' \
|
||||
-exec rm {} \;
|
||||
|
||||
.SUFFIXES:
|
||||
.INTERMEDIATE:
|
||||
.SECONDARY:
|
||||
.PHONY: all clean
|
||||
|
||||
%: RCS/%,v
|
||||
%: RCS/%
|
||||
%: %,v
|
||||
%: s.%
|
||||
%: SCCS/s.%
|
||||
|
||||
MAKEFLAGS += --no-builtin-rules
|
||||
|
||||
include 2019/deps.mk
|
@ -1,5 +1,6 @@
|
||||
target extended-remote localhost:1234
|
||||
tui enable
|
||||
tui layout src
|
||||
tui layout regs
|
||||
tui focus cmd
|
||||
tui reg all
|
||||
|
Loading…
x
Reference in New Issue
Block a user