1*8044SWilliam.Kucharski@Sun.COM/* boot.S - bootstrap the kernel */ 2*8044SWilliam.Kucharski@Sun.COM/* Copyright (C) 1999, 2001 Free Software Foundation, Inc. 3*8044SWilliam.Kucharski@Sun.COM 4*8044SWilliam.Kucharski@Sun.COM This program is free software; you can redistribute it and/or modify 5*8044SWilliam.Kucharski@Sun.COM it under the terms of the GNU General Public License as published by 6*8044SWilliam.Kucharski@Sun.COM the Free Software Foundation; either version 2 of the License, or 7*8044SWilliam.Kucharski@Sun.COM (at your option) any later version. 8*8044SWilliam.Kucharski@Sun.COM 9*8044SWilliam.Kucharski@Sun.COM This program is distributed in the hope that it will be useful, 10*8044SWilliam.Kucharski@Sun.COM but WITHOUT ANY WARRANTY; without even the implied warranty of 11*8044SWilliam.Kucharski@Sun.COM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*8044SWilliam.Kucharski@Sun.COM GNU General Public License for more details. 13*8044SWilliam.Kucharski@Sun.COM 14*8044SWilliam.Kucharski@Sun.COM You should have received a copy of the GNU General Public License 15*8044SWilliam.Kucharski@Sun.COM along with this program; if not, write to the Free Software 16*8044SWilliam.Kucharski@Sun.COM Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 17*8044SWilliam.Kucharski@Sun.COM 18*8044SWilliam.Kucharski@Sun.COM#define ASM 1 19*8044SWilliam.Kucharski@Sun.COM#include <multiboot.h> 20*8044SWilliam.Kucharski@Sun.COM 21*8044SWilliam.Kucharski@Sun.COM .text 22*8044SWilliam.Kucharski@Sun.COM 23*8044SWilliam.Kucharski@Sun.COM .globl start, _start 24*8044SWilliam.Kucharski@Sun.COMstart: 25*8044SWilliam.Kucharski@Sun.COM_start: 26*8044SWilliam.Kucharski@Sun.COM jmp multiboot_entry 27*8044SWilliam.Kucharski@Sun.COM 28*8044SWilliam.Kucharski@Sun.COM /* Align 32 bits boundary. */ 29*8044SWilliam.Kucharski@Sun.COM .align 4 30*8044SWilliam.Kucharski@Sun.COM 31*8044SWilliam.Kucharski@Sun.COM /* Multiboot header. */ 32*8044SWilliam.Kucharski@Sun.COMmultiboot_header: 33*8044SWilliam.Kucharski@Sun.COM /* magic */ 34*8044SWilliam.Kucharski@Sun.COM .long MULTIBOOT_HEADER_MAGIC 35*8044SWilliam.Kucharski@Sun.COM /* flags */ 36*8044SWilliam.Kucharski@Sun.COM .long MULTIBOOT_HEADER_FLAGS 37*8044SWilliam.Kucharski@Sun.COM /* checksum */ 38*8044SWilliam.Kucharski@Sun.COM .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) 39*8044SWilliam.Kucharski@Sun.COM#ifndef __ELF__ 40*8044SWilliam.Kucharski@Sun.COM /* header_addr */ 41*8044SWilliam.Kucharski@Sun.COM .long multiboot_header 42*8044SWilliam.Kucharski@Sun.COM /* load_addr */ 43*8044SWilliam.Kucharski@Sun.COM .long _start 44*8044SWilliam.Kucharski@Sun.COM /* load_end_addr */ 45*8044SWilliam.Kucharski@Sun.COM .long _edata 46*8044SWilliam.Kucharski@Sun.COM /* bss_end_addr */ 47*8044SWilliam.Kucharski@Sun.COM .long _end 48*8044SWilliam.Kucharski@Sun.COM /* entry_addr */ 49*8044SWilliam.Kucharski@Sun.COM .long multiboot_entry 50*8044SWilliam.Kucharski@Sun.COM#endif /* ! __ELF__ */ 51*8044SWilliam.Kucharski@Sun.COM 52*8044SWilliam.Kucharski@Sun.COMmultiboot_entry: 53*8044SWilliam.Kucharski@Sun.COM /* Initialize the stack pointer. */ 54*8044SWilliam.Kucharski@Sun.COM movl $(stack + STACK_SIZE), %esp 55*8044SWilliam.Kucharski@Sun.COM 56*8044SWilliam.Kucharski@Sun.COM /* Reset EFLAGS. */ 57*8044SWilliam.Kucharski@Sun.COM pushl $0 58*8044SWilliam.Kucharski@Sun.COM popf 59*8044SWilliam.Kucharski@Sun.COM 60*8044SWilliam.Kucharski@Sun.COM /* Push the pointer to the Multiboot information structure. */ 61*8044SWilliam.Kucharski@Sun.COM pushl %ebx 62*8044SWilliam.Kucharski@Sun.COM /* Push the magic value. */ 63*8044SWilliam.Kucharski@Sun.COM pushl %eax 64*8044SWilliam.Kucharski@Sun.COM 65*8044SWilliam.Kucharski@Sun.COM /* Now enter the C main function... */ 66*8044SWilliam.Kucharski@Sun.COM call EXT_C(cmain) 67*8044SWilliam.Kucharski@Sun.COM 68*8044SWilliam.Kucharski@Sun.COM /* Halt. */ 69*8044SWilliam.Kucharski@Sun.COM pushl $halt_message 70*8044SWilliam.Kucharski@Sun.COM call EXT_C(printf) 71*8044SWilliam.Kucharski@Sun.COM 72*8044SWilliam.Kucharski@Sun.COMloop: hlt 73*8044SWilliam.Kucharski@Sun.COM jmp loop 74*8044SWilliam.Kucharski@Sun.COM 75*8044SWilliam.Kucharski@Sun.COMhalt_message: 76*8044SWilliam.Kucharski@Sun.COM .asciz "Halted." 77*8044SWilliam.Kucharski@Sun.COM 78*8044SWilliam.Kucharski@Sun.COM /* Our stack area. */ 79*8044SWilliam.Kucharski@Sun.COM .comm stack, STACK_SIZE 80*8044SWilliam.Kucharski@Sun.COM