loading ofw address
This commit is contained in:
parent
75d8667cb3
commit
3de2240706
5
Makefile
5
Makefile
|
@ -5,10 +5,9 @@ RES = 1600x900x32
|
||||||
|
|
||||||
SOURCES_C = $(wildcard entry/*.c)
|
SOURCES_C = $(wildcard entry/*.c)
|
||||||
SOURCES_S = $(wildcard entry/*.s)
|
SOURCES_S = $(wildcard entry/*.s)
|
||||||
|
|
||||||
OBJECTS = $(SOURCES_C:.c=.elf) $(SOURCES_S:.s=.elf)
|
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
|
DISK.APM: kernel.elf bootinfo.txt scripts/kpartx.sh
|
||||||
dd bs=512K count=2 if=/dev/zero of=DISK.APM
|
dd bs=512K count=2 if=/dev/zero of=DISK.APM
|
||||||
|
@ -28,7 +27,7 @@ bootinfo.txt: loader/load.fth loader/def.fth
|
||||||
echo "</boot-script></chrp-boot>" >> bootinfo.txt
|
echo "</boot-script></chrp-boot>" >> bootinfo.txt
|
||||||
|
|
||||||
kernel.elf: $(OBJECTS)
|
kernel.elf: $(OBJECTS)
|
||||||
$(PPC)-ld -Ttext=0x200000 -Tdata=0x300000 $^ -o $@
|
$(PPC)-ld -Ttext=0x200000 -Tdata=0x300100 $^ -o $@
|
||||||
|
|
||||||
%.elf: %.c
|
%.elf: %.c
|
||||||
$(PPC)-gcc -c $< -o $@
|
$(PPC)-gcc -c $< -o $@
|
||||||
|
|
24
entry/boot.c
24
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)
|
void main(void)
|
||||||
{
|
{
|
||||||
asm volatile("stw 5, %0" : "=m"(ofw));
|
|
||||||
if (ofw_test("open"))
|
if (ofw_test("open"))
|
||||||
{
|
{
|
||||||
asm("mr 27, 28");
|
asm("mr 27, 28");
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -1,4 +1,7 @@
|
||||||
.globl _start
|
.globl _start
|
||||||
.globl ofw
|
.extern ofw
|
||||||
_start:
|
_start:
|
||||||
|
lis 9, ofw@ha
|
||||||
|
ori 9, 9, ofw@l
|
||||||
|
stw 5, 0(9)
|
||||||
b main
|
b main
|
||||||
|
|
Loading…
Reference in New Issue