From 3de2240706c075caf83d175b943eeb5e15f2f08e Mon Sep 17 00:00:00 2001 From: aramya <22577625+thamugadi@users.noreply.github.com> Date: Sat, 1 Jul 2023 11:27:07 +0100 Subject: [PATCH] loading ofw address --- Makefile | 5 ++--- entry/boot.c | 24 ------------------------ entry/ofw.c | 24 ++++++++++++++++++++++++ entry/start.s | 5 ++++- 4 files changed, 30 insertions(+), 28 deletions(-) create mode 100644 entry/ofw.c diff --git a/Makefile b/Makefile index 3e1ec49..71b8dc7 100644 --- a/Makefile +++ b/Makefile @@ -5,10 +5,9 @@ RES = 1600x900x32 SOURCES_C = $(wildcard entry/*.c) SOURCES_S = $(wildcard entry/*.s) - OBJECTS = $(SOURCES_C:.c=.elf) $(SOURCES_S:.s=.elf) -.PHONY: all clean run debug beige +.PHONY: clean run debug beige DISK.APM: kernel.elf bootinfo.txt scripts/kpartx.sh dd bs=512K count=2 if=/dev/zero of=DISK.APM @@ -28,7 +27,7 @@ bootinfo.txt: loader/load.fth loader/def.fth echo "" >> bootinfo.txt kernel.elf: $(OBJECTS) - $(PPC)-ld -Ttext=0x200000 -Tdata=0x300000 $^ -o $@ + $(PPC)-ld -Ttext=0x200000 -Tdata=0x300100 $^ -o $@ %.elf: %.c $(PPC)-gcc -c $< -o $@ diff --git a/entry/boot.c b/entry/boot.c index 31d71d8..d3d6d6e 100644 --- a/entry/boot.c +++ b/entry/boot.c @@ -6,32 +6,8 @@ void __eabi(void) { } -int ofw_test(const char* name) -{ - struct - { - char* service; - int n_args; - int n_rets; - char* arg; - int ret; - } ofw_arg; - - char _service[5] = "test"; - ofw_arg.service = _service; - - ofw_arg.n_args = 1; - ofw_arg.n_rets = 1; - ofw_arg.arg = name; - - ofw(&ofw_arg); - - return ofw_arg.ret; -} - void main(void) { - asm volatile("stw 5, %0" : "=m"(ofw)); if (ofw_test("open")) { asm("mr 27, 28"); diff --git a/entry/ofw.c b/entry/ofw.c new file mode 100644 index 0000000..aa135fc --- /dev/null +++ b/entry/ofw.c @@ -0,0 +1,24 @@ +extern void (*ofw)(); + +int ofw_test(char* name) +{ + struct + { + char* service; + int n_args; + int n_rets; + char* arg; + int ret; + } ofw_arg; + + char _service[5] = "test"; + ofw_arg.service = _service; + + ofw_arg.n_args = 1; + ofw_arg.n_rets = 1; + ofw_arg.arg = name; + + ofw(&ofw_arg); + + return ofw_arg.ret; +} diff --git a/entry/start.s b/entry/start.s index 86c22ad..9d9f302 100644 --- a/entry/start.s +++ b/entry/start.s @@ -1,4 +1,7 @@ .globl _start -.globl ofw +.extern ofw _start: +lis 9, ofw@ha +ori 9, 9, ofw@l +stw 5, 0(9) b main