home *** CD-ROM | disk | FTP | other *** search
- /*
- * linux/boot/head.S
- *
- * Copyright (C) 1991, 1992, 1993 Linus Torvalds
- */
-
- /*
- * head.S contains the 32-bit startup code.
- *
- * NOTE!!! Startup happens at absolute address 0x00001000, which is also where
- * the page directory will exist. The startup code will be overwritten by
- * the page directory.
- *
- * Page 0 is deliberately kept safe, since System Management Mode code in
- * laptops may need to access the BIOS data stored there. This is also
- * useful for future device drivers that either access the BIOS via VM86
- * mode.
- */
- .text
-
- #include <linux/segment.h>
-
- startup_32:
- cld
- cli
- movl $(KERNEL_DS),%eax
- mov %ax,%ds
- mov %ax,%es
- mov %ax,%fs
- mov %ax,%gs
- lss _stack_start,%esp
- xorl %eax,%eax
- 1: incl %eax # check that A20 really IS enabled
- movl %eax,0x000000 # loop forever if it isn't
- cmpl %eax,0x100000
- je 1b
- /*
- * Initialize eflags. Some BIOS's leave bits like NT set. This would
- * confuse the debugger if this code is traced.
- * XXX - best to initialize before switching to protected mode.
- */
- pushl $0
- popfl
- /*
- * Clear BSS
- */
- xorl %eax,%eax
- movl $__edata,%edi
- movl $__end,%ecx
- subl %edi,%ecx
- cld
- rep
- stosb
- /*
- * Do the decompression, and jump to the new kernel..
- */
- call _decompress_kernel
- ljmp $(KERNEL_CS), $0x100000
-