98 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * File      : start.S
 | |
|  * This file is part of RT-Thread RTOS
 | |
|  * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team
 | |
|  *
 | |
|  * The license and distribution terms for this file may be
 | |
|  * found in the file LICENSE in this distribution or at
 | |
|  * http://www.rt-thread.org/license/LICENSE
 | |
|  *
 | |
|  * 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	mygdtdesc
 | |
| 
 | |
| 	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
 | |
| mygdt:
 | |
| 	.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
 | |
| 
 | |
| mygdtdesc:
 | |
| 	.word	0x17
 | |
| 	.long	mygdt
 | |
| 
 | |
| /*@}*/
 |