source: libcaca/trunk/kernel/bootsect.S @ 3514

Last change on this file since 3514 was 2054, checked in by Sam Hocevar, 12 years ago
  • Add Linux 2.6's bootsect.S to fix the sample kernel build.
File size: 2.1 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.