1 ; -*- fundamental -*- (asm-mode sucks)
2 ; -----------------------------------------------------------------------
4 ; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
5 ; Copyright 2009-2011 Intel Corporation; author: H. Peter Anvin
7 ; This program is free software; you can redistribute it and/or modify
8 ; it under the terms of the GNU General Public License as published by
9 ; the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
10 ; Boston MA 02110-1301, USA; either version 2 of the License, or
11 ; (at your option) any later version; incorporated herein by reference.
13 ; -----------------------------------------------------------------------
18 ; Common code for conventional disk-based filesystems
22 ; Some semi-configurable constants... change on your own risk.
24 NULLFILE equ 0 ; Null character == empty filename
25 NULLOFFSET equ 0 ; Position in which to look
26 retry_count equ 16 ; How patient are we with the disk?
27 %assign HIGHMEM_SLOP 0 ; Avoid this much memory near the top
28 LDLINUX_MAGIC equ 0x3eb202fe ; A random number to identify ourselves with
30 ; This indicates the general format of the last few bytes in the boot sector
31 BS_MAGIC_VER equ 0x1b << 9
34 SECTOR_SIZE equ (1 << SECTOR_SHIFT)
37 ; The following structure is used for "virtual kernels"; i.e. LILO-style
38 ; option labels. The options we permit here are `kernel' and `append
39 ; Since there is no room in the bottom 64K for all of these, we
40 ; stick them in high memory and copy them down before we need them.
43 vk_vname: resb FILENAME_MAX ; Virtual name **MUST BE FIRST!**
44 vk_rname: resb FILENAME_MAX ; Real name
46 vk_type: resb 1 ; Type of file
48 vk_append: resb max_cmd_len+1 ; Command line
50 vk_end: equ $ ; Should be <= vk_size
55 ; ---------------------------------------------------------------------------
57 ; ---------------------------------------------------------------------------
60 ; Memory below this point is reserved for the BIOS and the MBR
65 trackbuf resb trackbufsize ; Track buffer goes here
69 ; Common bootstrap code for disk-based derivatives
71 %include "diskstart.inc"
75 ; Now, everything is "up and running"... patch kaboom for more
76 ; verbosity and using the full screen system
87 ; Now we're all set to start with our *real* business. First load the
88 ; configuration file (if any) and parse it.
90 ; In previous versions I avoided using 32-bit registers because of a
91 ; rumour some BIOSes clobbered the upper half of 32-bit registers at
92 ; random. I figure, though, that if there are any of those still left
93 ; they probably won't be trying to install Linux on them...
95 ; The code is still ripe with 16-bitisms, though. Not worth the hassle
96 ; to take'm out. In fact, we may want to put them back if we're going
97 ; to boot ELKS at some point.
101 ; Load configuration file
103 pm_call pm_load_config
107 ; Now we have the config file open. Parse the config file and
108 ; run the user interface.
114 ; kaboom2: once everything is loaded, replace the part of kaboom
115 ; starting with "kaboom.patch" with this part
118 mov si,err_bootfailed
120 cmp byte [kaboom.again+1],18h ; INT 18h version?
124 int 19h ; And try once more to boot...
125 .norge: jmp short .norge ; If int 19h returned; this is the end
129 .noreg: jmp short .noreg ; Nynorsk
131 ; -----------------------------------------------------------------------------
133 ; -----------------------------------------------------------------------------
135 %include "common.inc" ; Universal modules
136 %include "plaincon.inc" ; writechr
137 %include "writestr.inc" ; String output
138 %include "writehex.inc" ; Hexadecimal output
139 %include "localboot.inc" ; Disk-based local boot
141 ; -----------------------------------------------------------------------------
143 ; -----------------------------------------------------------------------------
146 copyright_str db ' Copyright (C) 1994-'
148 db ' H. Peter Anvin et al', CR, LF, 0
149 err_bootfailed db CR, LF, 'Boot failed: please change disks and press '
150 db 'a key to continue.', CR, LF, 0
153 ; Config file keyword table
155 %include "keywords.inc"
158 ; Extensions to search for (in *forward* order).
161 exten_table: db '.cbt' ; COMBOOT (specific)
163 db '.bss' ; Boot sector (add superblock)
165 db '.bs', 0 ; Boot sector
166 db '.com' ; COMBOOT (same as DOS)
169 dd 0, 0 ; Need 8 null bytes here
172 ; Misc initialized (data) variables
174 %ifdef debug ; This code for debugging only
175 debug_magic dw 0D00Dh ; Debug code sentinel