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