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