mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
Added the mbootpack tool, which packages multiboot boot files and disguises them as a linux bzImage. Useful for booting Xen using pxelinux, or another linux-only bootloader. Signed-off-by: Tim Deegan <Tim.Deegan@cl.cam.ac.uk>
137 lines
3.3 KiB
ArmAsm
137 lines
3.3 KiB
ArmAsm
/*
|
|
* bootsect.S
|
|
*
|
|
* This is bootsect.S from the linux 2.6.9 sources,
|
|
* with minor changes for mbootpack.
|
|
*
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*
|
|
* $Id: bootsect.S,v 1.2 2005/03/23 10:39:11 tjd21 Exp $
|
|
*
|
|
*/
|
|
|
|
#include "mbootpack.h"
|
|
|
|
/*
|
|
* bootsect.S Copyright (C) 1991, 1992 Linus Torvalds
|
|
*
|
|
* modified by Drew Eckhardt
|
|
* modified by Bruce Evans (bde)
|
|
* modified by Chris Noe (May 1999) (as86 -> gas)
|
|
* gutted by H. Peter Anvin (Jan 2003)
|
|
*
|
|
* BIG FAT NOTE: We're in real mode using 64k segments. Therefore segment
|
|
* addresses must be multiplied by 16 to obtain their respective linear
|
|
* addresses. To avoid confusion, linear addresses are written using leading
|
|
* hex while segment addresses are written as segment:offset.
|
|
*
|
|
*/
|
|
|
|
/* #include <asm/boot.h> */
|
|
/* Definitions we should have got from there */
|
|
#define DEF_INITSEG 0x9000
|
|
#define DEF_SYSSEG 0x1000
|
|
#define DEF_SETUPSEG 0x9020
|
|
#define DEF_SYSSIZE 0x7F00
|
|
#define NORMAL_VGA 0xffff
|
|
#define EXTENDED_VGA 0xfffe
|
|
#define ASK_VGA 0xfffd
|
|
|
|
|
|
/* SETUPSECTS = 4 */ /* default nr of setup-sectors */
|
|
BOOTSEG = 0x07C0 /* original address of boot-sector */
|
|
INITSEG = DEF_INITSEG /* we move boot here - out of the way */
|
|
SETUPSEG = DEF_SETUPSEG /* setup starts here */
|
|
SYSSEG = DEF_SYSSEG /* system loaded at 0x10000 (65536) */
|
|
SYSSIZE = DEF_SYSSIZE /* system size: # of 16-byte clicks */
|
|
/* to be loaded */
|
|
ROOT_DEV = 0 /* ROOT_DEV is now written by "build" */
|
|
SWAP_DEV = 0 /* SWAP_DEV is now written by "build" */
|
|
|
|
#ifndef SVGA_MODE
|
|
/* #define SVGA_MODE ASK_VGA */
|
|
#define SVGA_MODE NORMAL_VGA
|
|
#endif
|
|
|
|
#ifndef RAMDISK
|
|
#define RAMDISK 0
|
|
#endif
|
|
|
|
#ifndef ROOT_RDONLY
|
|
#define ROOT_RDONLY 1
|
|
#endif
|
|
|
|
.code16
|
|
.text
|
|
|
|
.global _start
|
|
_start:
|
|
|
|
# Normalize the start address
|
|
jmpl $BOOTSEG, $start2
|
|
|
|
start2:
|
|
movw %cs, %ax
|
|
movw %ax, %ds
|
|
movw %ax, %es
|
|
movw %ax, %ss
|
|
movw $0x7c00, %sp
|
|
sti
|
|
cld
|
|
|
|
movw $bugger_off_msg, %si
|
|
|
|
msg_loop:
|
|
lodsb
|
|
andb %al, %al
|
|
jz die
|
|
movb $0xe, %ah
|
|
movw $7, %bx
|
|
int $0x10
|
|
jmp msg_loop
|
|
|
|
die:
|
|
# Allow the user to press a key, then reboot
|
|
xorw %ax, %ax
|
|
int $0x16
|
|
int $0x19
|
|
|
|
# int 0x19 should never return. In case it does anyway,
|
|
# invoke the BIOS reset code...
|
|
ljmp $0xf000,$0xfff0
|
|
|
|
|
|
bugger_off_msg:
|
|
.ascii "Direct booting from floppy is no longer supported.\r\n"
|
|
.ascii "Please use a boot loader program instead.\r\n"
|
|
.ascii "\n"
|
|
.ascii "Remove disk and press any key to reboot . . .\r\n"
|
|
.byte 0
|
|
|
|
|
|
# Kernel attributes; used by setupbegtext
|
|
|
|
.org 497
|
|
setup_sects: .byte SETUPSECTS
|
|
root_flags: .word ROOT_RDONLY
|
|
syssize: .word SYSSIZE
|
|
swap_dev: .word SWAP_DEV
|
|
ram_size: .word RAMDISK
|
|
vid_mode: .word SVGA_MODE
|
|
root_dev: .word ROOT_DEV
|
|
boot_flag: .word 0xAA55
|