diff options
| author | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-08-12 08:24:44 +0200 |
|---|---|---|
| committer | Miquel Sabaté Solà <mikisabate@gmail.com> | 2024-12-05 16:02:11 +0100 |
| commit | c173df46a0a12fe52fdf13323f967e9117462096 (patch) | |
| tree | 386124798c6c7f54ff4c645746bae1ed3214a67a /bios | |
| download | farga-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/Makefile | 25 | ||||
| -rw-r--r-- | bios/config.ld | 9 | ||||
| -rw-r--r-- | bios/hello.s | 23 |
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 |
