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
33 MIN_SECTOR_SHIFT equ 9
34 MIN_SECTOR_SIZE equ (1 << MIN_SECTOR_SHIFT)
36 ; ---------------------------------------------------------------------------
38 ; ---------------------------------------------------------------------------
41 ; Memory below this point is reserved for the BIOS and the MBR
46 trackbuf resb trackbufsize ; Track buffer goes here
50 ; Common bootstrap code for disk-based derivatives
52 %include "diskstart.inc"
56 ; Now, everything is "up and running"... patch kaboom for more
57 ; verbosity and using the full screen system
68 ; Now we're all set to start with our *real* business. First load the
69 ; configuration file (if any) and parse it.
71 ; In previous versions I avoided using 32-bit registers because of a
72 ; rumour some BIOSes clobbered the upper half of 32-bit registers at
73 ; random. I figure, though, that if there are any of those still left
74 ; they probably won't be trying to install Linux on them...
76 ; The code is still ripe with 16-bitisms, though. Not worth the hassle
77 ; to take'm out. In fact, we may want to put them back if we're going
78 ; to boot ELKS at some point.
82 ; Load configuration file
84 pm_call pm_load_config
88 ; Now we have the config file open. Parse the config file and
89 ; run the user interface.
95 ; kaboom2: once everything is loaded, replace the part of kaboom
96 ; starting with "kaboom.patch" with this part
101 cmp byte [kaboom.again+1],18h ; INT 18h version?
105 int 19h ; And try once more to boot...
106 .norge: jmp short .norge ; If int 19h returned; this is the end
110 .noreg: jmp short .noreg ; Nynorsk
112 ; -----------------------------------------------------------------------------
114 ; -----------------------------------------------------------------------------
116 %include "common.inc" ; Universal modules
117 %include "plaincon.inc" ; writechr
118 %include "writestr.inc" ; String output
119 %include "writehex.inc" ; Hexadecimal output
120 %include "localboot.inc" ; Disk-based local boot
122 ; -----------------------------------------------------------------------------
124 ; -----------------------------------------------------------------------------
127 copyright_str db ' Copyright (C) 1994-'
129 db ' H. Peter Anvin et al', CR, LF, 0
130 err_bootfailed db CR, LF, 'Boot failed: please change disks and press '
131 db 'a key to continue.', CR, LF, 0
134 ; Config file keyword table
136 %include "keywords.inc"
139 ; Extensions to search for (in *forward* order).
142 exten_table: db '.cbt' ; COMBOOT (specific)
144 db '.bss' ; Boot sector (add superblock)
146 db '.bs', 0 ; Boot sector
147 db '.com' ; COMBOOT (same as DOS)
150 dd 0, 0 ; Need 8 null bytes here
153 ; Misc initialized (data) variables
155 %ifdef debug ; This code for debugging only
156 debug_magic dw 0D00Dh ; Debug code sentinel