|
@@ -0,0 +1,135 @@
|
|
|
+#include <linux/config.h>
|
|
|
+
|
|
|
+#if defined(CONFIG_RAM32MB)
|
|
|
+#define MEM_END 0x02000000 /* Memory size 32Mb */
|
|
|
+#elif defined(CONFIG_RAM16MB)
|
|
|
+#define MEM_END 0x01000000 /* Memory size 16Mb */
|
|
|
+#else
|
|
|
+#define MEM_END 0x00800000 /* Memory size 8Mb */
|
|
|
+#endif
|
|
|
+
|
|
|
+#undef CRT_DEBUG
|
|
|
+
|
|
|
+.macro PUTC CHAR
|
|
|
+#ifdef CRT_DEBUG
|
|
|
+ moveq #\CHAR, %d7
|
|
|
+ jsr putc
|
|
|
+#endif
|
|
|
+.endm
|
|
|
+
|
|
|
+ .global _start
|
|
|
+ .global _rambase
|
|
|
+ .global _ramvec
|
|
|
+ .global _ramstart
|
|
|
+ .global _ramend
|
|
|
+
|
|
|
+ .data
|
|
|
+
|
|
|
+/*
|
|
|
+ * Set up the usable of RAM stuff
|
|
|
+ */
|
|
|
+_rambase:
|
|
|
+ .long 0
|
|
|
+_ramvec:
|
|
|
+ .long 0
|
|
|
+_ramstart:
|
|
|
+ .long 0
|
|
|
+_ramend:
|
|
|
+ .long 0
|
|
|
+
|
|
|
+ .text
|
|
|
+
|
|
|
+_start:
|
|
|
+
|
|
|
+/*
|
|
|
+ * Setup initial stack
|
|
|
+ */
|
|
|
+ /* disable all interrupts */
|
|
|
+ movew #0x2700, %sr
|
|
|
+ movel #-1, 0xfffff304
|
|
|
+ movel #MEM_END-4, %sp
|
|
|
+
|
|
|
+ PUTC '\r'
|
|
|
+ PUTC '\n'
|
|
|
+ PUTC 'A'
|
|
|
+ PUTC 'B'
|
|
|
+
|
|
|
+/*
|
|
|
+ * Determine end of RAM
|
|
|
+ */
|
|
|
+
|
|
|
+ movel #MEM_END, %a0
|
|
|
+ movel %a0, _ramend
|
|
|
+
|
|
|
+ PUTC 'C'
|
|
|
+
|
|
|
+/*
|
|
|
+ * Move ROM filesystem above bss :-)
|
|
|
+ */
|
|
|
+
|
|
|
+ moveal #_sbss, %a0 /* romfs at the start of bss */
|
|
|
+ moveal #_ebss, %a1 /* Set up destination */
|
|
|
+ movel %a0, %a2 /* Copy of bss start */
|
|
|
+
|
|
|
+ movel 8(%a0), %d1 /* Get size of ROMFS */
|
|
|
+ addql #8, %d1 /* Allow for rounding */
|
|
|
+ andl #0xfffffffc, %d1 /* Whole words */
|
|
|
+
|
|
|
+ addl %d1, %a0 /* Copy from end */
|
|
|
+ addl %d1, %a1 /* Copy from end */
|
|
|
+ movel %a1, _ramstart /* Set start of ram */
|
|
|
+
|
|
|
+1:
|
|
|
+ movel -(%a0), %d0 /* Copy dword */
|
|
|
+ movel %d0, -(%a1)
|
|
|
+ cmpl %a0, %a2 /* Check if at end */
|
|
|
+ bne 1b
|
|
|
+
|
|
|
+ PUTC 'D'
|
|
|
+
|
|
|
+/*
|
|
|
+ * Initialize BSS segment to 0
|
|
|
+ */
|
|
|
+
|
|
|
+ lea _sbss, %a0
|
|
|
+ lea _ebss, %a1
|
|
|
+
|
|
|
+ /* Copy 0 to %a0 until %a0 == %a1 */
|
|
|
+2: cmpal %a0, %a1
|
|
|
+ beq 1f
|
|
|
+ clrl (%a0)+
|
|
|
+ bra 2b
|
|
|
+1:
|
|
|
+
|
|
|
+ PUTC 'E'
|
|
|
+
|
|
|
+/*
|
|
|
+ * Load the current task pointer and stack
|
|
|
+ */
|
|
|
+
|
|
|
+ lea init_thread_union, %a0
|
|
|
+ lea 0x2000(%a0), %sp
|
|
|
+
|
|
|
+ PUTC 'F'
|
|
|
+ PUTC '\r'
|
|
|
+ PUTC '\n'
|
|
|
+
|
|
|
+/*
|
|
|
+ * Go
|
|
|
+ */
|
|
|
+
|
|
|
+ jmp start_kernel
|
|
|
+
|
|
|
+/*
|
|
|
+ * Local functions
|
|
|
+ */
|
|
|
+
|
|
|
+#ifdef CRT_DEBUG
|
|
|
+putc:
|
|
|
+ moveb %d7, 0xfffff907
|
|
|
+1:
|
|
|
+ movew 0xfffff906, %d7
|
|
|
+ andw #0x2000, %d7
|
|
|
+ beq 1b
|
|
|
+ rts
|
|
|
+#endif
|