From c173df46a0a12fe52fdf13323f967e9117462096 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Mon, 12 Aug 2024 08:24:44 +0200 Subject: Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mainly with the code I took from @popovicu's blog. Signed-off-by: Miquel Sabaté Solà --- bios/Makefile | 25 +++++++++++++++++++++++++ bios/config.ld | 9 +++++++++ bios/hello.s | 23 +++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 bios/Makefile create mode 100644 bios/config.ld create mode 100644 bios/hello.s (limited to 'bios') 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 -- cgit v1.2.3