aboutsummaryrefslogtreecommitdiff
path: root/bios
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-08-12 08:24:44 +0200
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-05 16:02:11 +0100
commitc173df46a0a12fe52fdf13323f967e9117462096 (patch)
tree386124798c6c7f54ff4c645746bae1ed3214a67a /bios
downloadfarga-c173df46a0a12fe52fdf13323f967e9117462096.tar.gz
farga-c173df46a0a12fe52fdf13323f967e9117462096.zip
Initial commit
Mainly with the code I took from @popovicu's blog. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'bios')
-rw-r--r--bios/Makefile25
-rw-r--r--bios/config.ld9
-rw-r--r--bios/hello.s23
3 files changed, 57 insertions, 0 deletions
diff --git a/bios/Makefile b/bios/Makefile
new file mode 100644
index 0000000..60e3cc4
--- /dev/null
+++ b/bios/Makefile
@@ -0,0 +1,25 @@
+NAME = hello
+
+CROSS_AS ?= riscv64-suse-linux-as
+CROSS_LD ?= riscv64-suse-linux-ld
+CROSS_DUMP ?= riscv64-suse-linux-objdump
+ASFLAGS = -march=rv64g -mabi=lp64
+
+EMU ?= qemu-system-riscv64
+
+##
+# Targets
+
+.PHONY: run
+run: clean build
+ $(CROSS_DUMP) -D $(NAME)
+ $(EMU) -machine virt -bios hello
+
+.PHONY: build
+build:
+ $(CROSS_AS) $(ASFLAGS) -o $(NAME).o -c $(NAME).s
+ $(CROSS_LD) -T config.ld $(NAME).o -o $(NAME)
+
+.PHONY: clean
+clean:
+ @rm -f $(NAME).o $(NAME)
diff --git a/bios/config.ld b/bios/config.ld
new file mode 100644
index 0000000..085caa3
--- /dev/null
+++ b/bios/config.ld
@@ -0,0 +1,9 @@
+MEMORY {
+ dram_space (rwx) : ORIGIN = 0x80000000, LENGTH = 128
+}
+
+SECTIONS {
+ .text : {
+ hello.o(.text.bios)
+ } > dram_space
+}
diff --git a/bios/hello.s b/bios/hello.s
new file mode 100644
index 0000000..f3aa20a
--- /dev/null
+++ b/bios/hello.s
@@ -0,0 +1,23 @@
+# From: https://github.com/qemu/qemu/blob/23fa74974d8c96bc95cbecc0d4e2d90f984939f6/hw/riscv/virt.c#L82.
+.set QEMU_UART0_ADDRESS, 0x10000000
+
+.global _start
+.section .text.bios
+
+_start: li a0, 0x68
+ li a1, QEMU_UART0_ADDRESS
+ sb a0, (a1) # 'h'
+
+ li a0, 0x65
+ sb a0, (a1) # 'e'
+
+ li a0, 0x6C
+ sb a0, (a1) # 'l'
+
+ li a0, 0x6C
+ sb a0, (a1) # 'l'
+
+ li a0, 0x6F
+ sb a0, (a1) # 'o'
+
+loop: j loop