📄 head-de2.s
字号:
#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 2b1: 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_DEBUGputc: moveb %d7, 0xfffff9071: movew 0xfffff906, %d7 andw #0x2000, %d7 beq 1b rts#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -