| /* | 
 |  *	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> | 
 |  | 
 | 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 | 
 | #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 setup | 
 |  | 
 | 	.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 |