/* * Copyright (c) 2006-2022, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2006-09-15 QiuYi The first version. * 2012-02-15 aozima update. */ /* the magic number for the multiboot header. */ #define MULTIBOOT_HEADER_MAGIC 0x1BADB002 /* the flags for the multiboot header. */ #define MULTIBOOT_HEADER_FLAGS 0x00000003 #define CONFIG_STACKSIZE 8192 /** * @addtogroup I386 */ /*@{*/ .section .init, "ax" /* the system entry */ .globl _start _start: jmp multiboot_entry /* Align 32 bits boundary. */ .align 4 /* multiboot header. */ multiboot_header: /* magic */ .long MULTIBOOT_HEADER_MAGIC /* flags */ .long MULTIBOOT_HEADER_FLAGS /* checksum */ .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) multiboot_entry: movl $(_end + 0x1000),%esp /* reset eflags. */ pushl $0 popf /* rebuild globe describe table */ lgdt __gdtdesc movl $0x10,%eax movw %ax,%ds movw %ax,%es movw %ax,%ss ljmp $0x08, $relocated relocated: /* push the pointer to the multiboot information structure. */ pushl %ebx /* push the magic value. */ pushl %eax call rtthread_startup /* never get here */ spin: hlt jmp spin .data .p2align 2 __gdt: .word 0,0,0,0 .word 0x07FF /* 8Mb - limit=2047 */ .word 0x0000 .word 0x9A00 /* code read/exec */ .word 0x00C0 .word 0x07FF /* 8Mb - limit=2047 */ .word 0x0000 .word 0x9200 /* data read/write */ .word 0x00C0 __gdtdesc: .word 0x17 .long __gdt /*@}*/