From 1f563bfd290b56ebf1865fbe950c276dfb8018e5 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Mon, 22 Apr 2002 19:12:37 +0000 Subject: First version git-svn-id: svn://svn.rockbox.org/rockbox/trunk@175 a1c6a512-1295-4272-9138-f99709370657 --- firmware/test/kernel/Makefile | 42 ++++++++++++++++++++++ firmware/test/kernel/app.lds | 23 ++++++++++++ firmware/test/kernel/crt0.S | 49 ++++++++++++++++++++++++++ firmware/test/kernel/main.c | 82 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 196 insertions(+) create mode 100644 firmware/test/kernel/Makefile create mode 100644 firmware/test/kernel/app.lds create mode 100644 firmware/test/kernel/crt0.S create mode 100644 firmware/test/kernel/main.c (limited to 'firmware/test/kernel') diff --git a/firmware/test/kernel/Makefile b/firmware/test/kernel/Makefile new file mode 100644 index 0000000000..fdeb9b159b --- /dev/null +++ b/firmware/test/kernel/Makefile @@ -0,0 +1,42 @@ +CC = sh-elf-gcc +LD = sh-elf-ld +AR = sh-elf-ar +AS = sh-elf-as +OC = sh-elf-objcopy + +INCLUDES=-I../../ + +CFLAGS = -O -Wall -m1 -save-temps -nostdlib -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns -fno-builtin $(INCLUDES) +AFLAGS += -small -relax + +OBJS= crt0.o main.o ../../thread.o ../../debug.o + +%.o: %.S + $(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) -c $< + + +all : archos.mod + +archos.elf : $(OBJS) app.lds + $(CC) -nostartfiles -o archos.elf $(OBJS) -lgcc -Tapp.lds -Wl,-Map,archos.map + +archos.bin : archos.elf + $(OC) -O binary archos.elf archos.bin + +archos.asm: archos.bin + sh2d -sh1 archos.bin > archos.asm + +archos.mod : archos.bin + scramble archos.bin archos.mod + +archos.mod.gz : archos.mod + gzip -f archos.mod + +dist: + tar czvf dist.tar.gz Makefile main.c start.s app.lds + +clean: + -rm -f *.x *.i *.o *.elf *.bin *.map *.mod *.bak *~ + +install: + mount /mnt/archos; cp archos.mod /mnt/archos; umount /mnt/archos diff --git a/firmware/test/kernel/app.lds b/firmware/test/kernel/app.lds new file mode 100644 index 0000000000..4b7e5f4c6f --- /dev/null +++ b/firmware/test/kernel/app.lds @@ -0,0 +1,23 @@ +ENTRY(start) +OUTPUT_FORMAT(elf32-sh) +SECTIONS +{ + .text 0x09018000 : + { + *(.rodata) + *(.text) + } + + .data : + { + *(.data) + } + + .bss : + { + *(.bss) + _end = . + 0x8000; + _stack = . + 0x9000; + _edata = .; + } +} diff --git a/firmware/test/kernel/crt0.S b/firmware/test/kernel/crt0.S new file mode 100644 index 0000000000..5f0ef2d64e --- /dev/null +++ b/firmware/test/kernel/crt0.S @@ -0,0 +1,49 @@ + .section .text + .global start +start: + mov.l stack_k,r15 + + ! zero out bss + mov.l edata_k,r0 + mov.l end_k,r1 + mov #0,r2 +start_l: + mov.l r2,@r0 + add #4,r0 + cmp/ge r0,r1 + bt start_l + nop + +#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY) + mov.l set_fpscr_k, r1 + jsr @r1 + mov #0,r4 + lds r3,fpscr +#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) */ + + ! call the mainline + mov.l main_k,r0 + jsr @r0 + nop +.hoo: + bra .hoo + + .align 2 +#if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) +set_fpscr_k: + .long ___set_fpscr +#endif /* defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(SH4_SINGLE_ONLY) */ +stack_k: + .long _stack +edata_k: + .long _edata +end_k: + .long _end +main_k: + .long _main + +#ifdef __ELF__ + .section .stack,"aw" +#else + .section .stack +#endif diff --git a/firmware/test/kernel/main.c b/firmware/test/kernel/main.c new file mode 100644 index 0000000000..7e0bd3e3f8 --- /dev/null +++ b/firmware/test/kernel/main.c @@ -0,0 +1,82 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "thread.h" +#include "sh7034.h" +#include "debug.h" + +unsigned int s1[256]; +unsigned int s2[256]; + +void t1(void); +void t2(void); + +int main(void) +{ + char buf[40]; + char str[32]; + int i=0; + + /* Clear it all! */ + SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER); + + /* This enables the serial Rx interrupt, to be able to exit into the + debugger when you hit CTRL-C */ + SCR1 |= 0x40; + SCR1 &= ~0x80; + asm ("ldc\t%0,sr" : : "r"(0<<4)); + + debugf("OK. Let's go\n"); + + create_thread(t1, s1, 1024); + create_thread(t2, s2, 1024); + + while(1) + { + debugf("t0\n"); + switch_thread(); + } +} + +void t1(void) +{ + while(1) + { + debugf("t1\n"); + switch_thread(); + } +} + +void t2(void) +{ + while(1) + { + debugf("t2\n"); + switch_thread(); + } +} + +extern const void stack(void); + +const void* vectors[] __attribute__ ((section (".vectors"))) = +{ + main, /* Power-on reset */ + stack, /* Power-on reset (stack pointer) */ + main, /* Manual reset */ + stack /* Manual reset (stack pointer) */ +}; -- cgit v1.2.3