]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
18 | SETUPSECTS = 4 /* default nr of setup-sectors */ | |
19 | BOOTSEG = 0x07C0 /* original address of boot-sector */ | |
20 | INITSEG = DEF_INITSEG /* we move boot here - out of the way */ | |
21 | SETUPSEG = DEF_SETUPSEG /* setup starts here */ | |
22 | SYSSEG = DEF_SYSSEG /* system loaded at 0x10000 (65536) */ | |
23 | SYSSIZE = DEF_SYSSIZE /* system size: # of 16-byte clicks */ | |
24 | /* to be loaded */ | |
25 | ROOT_DEV = 0 /* ROOT_DEV is now written by "build" */ | |
26 | SWAP_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 | ||
49 | start2: | |
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 | ||
60 | msg_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 | ||
69 | die: | |
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 | ||
80 | bugger_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 | |
91 | setup_sects: .byte SETUPSECTS | |
92 | root_flags: .word ROOT_RDONLY | |
93 | syssize: .word SYSSIZE | |
94 | swap_dev: .word SWAP_DEV | |
95 | ram_size: .word RAMDISK | |
96 | vid_mode: .word SVGA_MODE | |
97 | root_dev: .word ROOT_DEV | |
98 | boot_flag: .word 0xAA55 |