print_byte関数
from マルチサイクル RISC-V CPU を作成したい
追加した。
code:diff
diff --git a/Makefile b/Makefile
index f793a5b..90077d4 100644
--- a/Makefile
+++ b/Makefile
@@ -64,7 +64,7 @@ firmware/firmware.hex:
# riscv64-unknown-elf-objcopy -O verilog --verilog-data-width 4 firmware/firmware.elf firmware/firmware.hex
# MinCaml のプログラムをビルド
-FIRMWARE_TARGET = test/abs_float
+FIRMWARE_TARGET = test/print_byte
firmware/firmware.hex: Makefile firmware/$(FIRMWARE_TARGET).ml firmware/libmincaml.S firmware/stub.S
firmware/bin/min-caml firmware/${FIRMWARE_TARGET}
riscv64-unknown-elf-gcc -nostdlib -march=rv32if -mabi=ilp32f -Wl,-Tfirmware/custom.ld firmware/stub.S firmware/${FIRMWARE_TARGET}.s firmware/libmincaml.S -o firmware/firmware.elf
diff --git a/firmware/libmincaml.S b/firmware/libmincaml.S
index 5ce1086..8d4800d 100644
--- a/firmware/libmincaml.S
+++ b/firmware/libmincaml.S
@@ -489,5 +489,14 @@ min_caml_read_int:
.text
.globl min_caml_print_byte
min_caml_print_byte:
- // TODO: あとで実装する
+ // ra をスタックへ退避
+ addi s10, s10, 4
+ sw ra, 0(s10)
+
+ // メイン処理
+ call putc
+
+ // ra レジスタの値を復元
+ lw ra, 0(s10)
+ addi s10, s10, -4
ret
diff --git a/firmware/test/print_byte.ml b/firmware/test/print_byte.ml
new file mode 100644
index 0000000..3c6f278
--- /dev/null
+++ b/firmware/test/print_byte.ml
@@ -0,0 +1,6 @@
+print_byte 65; (* 'A' *)
+print_newline ();
+print_byte 66; (* 'B' *)
+print_newline ();
+print_byte 67; (* 'C' *)
+print_newline ()