PageRenderTime 15ms CodeModel.GetById 2ms app.highlight 8ms RepoModel.GetById 2ms app.codeStats 0ms

/arch/i386/boot/bootsect.S

https://bitbucket.org/evzijst/gittest
Assembly | 98 lines | 98 code | 0 blank | 0 comment | 0 complexity | 5f65bbd50a634b1dbe8319c72f2c3a73 MD5 | raw file
 1/*
 2 *	bootsect.S		Copyright (C) 1991, 1992 Linus Torvalds
 3 *
 4 *	modified by Drew Eckhardt
 5 *	modified by Bruce Evans (bde)
 6 *	modified by Chris Noe (May 1999) (as86 -> gas)
 7 *	gutted by H. Peter Anvin (Jan 2003)
 8 *
 9 * BIG FAT NOTE: We're in real mode using 64k segments.  Therefore segment
10 * addresses must be multiplied by 16 to obtain their respective linear
11 * addresses. To avoid confusion, linear addresses are written using leading
12 * hex while segment addresses are written as segment:offset.
13 *
14 */
15
16#include <asm/boot.h>
17
18SETUPSECTS	= 4			/* default nr of setup-sectors */
19BOOTSEG		= 0x07C0		/* original address of boot-sector */
20INITSEG		= DEF_INITSEG		/* we move boot here - out of the way */
21SETUPSEG	= DEF_SETUPSEG		/* setup starts here */
22SYSSEG		= DEF_SYSSEG		/* system loaded at 0x10000 (65536) */
23SYSSIZE		= DEF_SYSSIZE		/* system size: # of 16-byte clicks */
24					/* to be loaded */
25ROOT_DEV	= 0 			/* ROOT_DEV is now written by "build" */
26SWAP_DEV	= 0			/* SWAP_DEV is now written by "build" */
27
28#ifndef SVGA_MODE
29#define SVGA_MODE ASK_VGA
30#endif
31
32#ifndef RAMDISK
33#define RAMDISK 0
34#endif
35
36#ifndef ROOT_RDONLY
37#define ROOT_RDONLY 1
38#endif
39
40.code16
41.text
42
43.global _start
44_start:
45
46	# Normalize the start address
47	jmpl	$BOOTSEG, $start2
48
49start2:
50	movw	%cs, %ax
51	movw	%ax, %ds
52	movw	%ax, %es
53	movw	%ax, %ss
54	movw	$0x7c00, %sp
55	sti
56	cld
57
58	movw	$bugger_off_msg, %si
59
60msg_loop:
61	lodsb
62	andb	%al, %al
63	jz	die
64	movb	$0xe, %ah
65	movw	$7, %bx
66	int	$0x10
67	jmp	msg_loop
68
69die:
70	# Allow the user to press a key, then reboot
71	xorw	%ax, %ax
72	int	$0x16
73	int	$0x19
74
75	# int 0x19 should never return.  In case it does anyway,
76	# invoke the BIOS reset code...
77	ljmp	$0xf000,$0xfff0
78
79
80bugger_off_msg:
81	.ascii	"Direct booting from floppy is no longer supported.\r\n"
82	.ascii	"Please use a boot loader program instead.\r\n"
83	.ascii	"\n"
84	.ascii	"Remove disk and press any key to reboot . . .\r\n"
85	.byte	0
86	
87
88	# Kernel attributes; used by setup
89
90	.org 497
91setup_sects:	.byte SETUPSECTS
92root_flags:	.word ROOT_RDONLY
93syssize:	.word SYSSIZE
94swap_dev:	.word SWAP_DEV
95ram_size:	.word RAMDISK
96vid_mode:	.word SVGA_MODE
97root_dev:	.word ROOT_DEV
98boot_flag:	.word 0xAA55