summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assembly/fizzbuzz/Makefile24
-rw-r--r--assembly/fizzbuzz/fizzbuzz.S43
l---------assembly/fizzbuzz/rvcontroller.ld1
3 files changed, 68 insertions, 0 deletions
diff --git a/assembly/fizzbuzz/Makefile b/assembly/fizzbuzz/Makefile
new file mode 100644
index 0000000..56c96d6
--- /dev/null
+++ b/assembly/fizzbuzz/Makefile
@@ -0,0 +1,24 @@
+MARCH ?= rv32imacbzicntr_zicond_zicsr_zifencei_zihintpause_zilsd_zclsd_zabha_zacas_zbkb_zbkx_zcb_zcmp_zcmt
+
+.PHONY: all dump load clean
+
+all: fizzbuzz.hex
+
+fizzbuzz.o: fizzbuzz.S
+ riscv32-none-elf-as -I../rvcontroller-libraries -march=${MARCH} -o fizzbuzz.o fizzbuzz.S
+
+fizzbuzz.elf: fizzbuzz.o
+ riscv32-none-elf-ld -T rvcontroller.ld --no-warn-rwx-segments -o fizzbuzz.elf fizzbuzz.o
+
+dump: fizzbuzz.elf
+ riscv32-none-elf-objdump -d fizzbuzz.elf
+
+fizzbuzz.hex: fizzbuzz.elf
+ riscv32-none-elf-objcopy -O ihex fizzbuzz.elf fizzbuzz.hex
+
+load: fizzbuzz.hex
+ bash -c "wl-copy < fizzbuzz.hex"
+
+clean:
+ rm -f fizzbuzz.hex fizzbuzz.elf fizzbuzz.o
+
diff --git a/assembly/fizzbuzz/fizzbuzz.S b/assembly/fizzbuzz/fizzbuzz.S
new file mode 100644
index 0000000..9960776
--- /dev/null
+++ b/assembly/fizzbuzz/fizzbuzz.S
@@ -0,0 +1,43 @@
+li s0,0
+li s1,15
+li s2,5
+li s3,3
+li s4,100
+mainloop:
+li a0,'\n'
+li a7,11
+ecall
+bge s0,s4,end
+addi s0,s0,1
+remu t0,s0,s1
+bnez t0,1f
+la a0,fizz
+li a7,4
+ecall
+la a0,buzz
+li a7,4
+ecall
+j mainloop
+1: remu t0,s0,s2
+bnez t0,1f
+la a0,buzz
+li a7,4
+ecall
+j mainloop
+1: remu t0,s0,s3
+bnez t0,1f
+la a0,fizz
+li a7,4
+ecall
+j mainloop
+1: mv a0,s0
+li a7,1
+ecall
+j mainloop
+
+end:
+li a7,10
+ecall
+
+fizz: .asciz "Fizz"
+buzz: .asciz "Buzz"
diff --git a/assembly/fizzbuzz/rvcontroller.ld b/assembly/fizzbuzz/rvcontroller.ld
new file mode 120000
index 0000000..bc01402
--- /dev/null
+++ b/assembly/fizzbuzz/rvcontroller.ld
@@ -0,0 +1 @@
+../../rvcontroller.ld \ No newline at end of file