| /* | |
| * 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 |