linux/arch/i386/boot/bootsect.S
<<
>>
Prefs
   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
  99
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.