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
 | ||
|  | 
 | ||
|  | /*@}*/ |