|
|
@@ -0,0 +1,98 @@ |
|
|
|
/* |
|
|
|
* 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 |