blob: 93016649ef8838812f3fe517a1d9e08b37f2c2f5 [file] [log] [blame]
; -*- fundamental -*- (asm-mode sucks)
; -----------------------------------------------------------------------
;
; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved
; Copyright 2009-2011 Intel Corporation; author: H. Peter Anvin
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
; Boston MA 02110-1301, USA; either version 2 of the License, or
; (at your option) any later version; incorporated herein by reference.
;
; -----------------------------------------------------------------------
;
; diskfs.inc
;
; Common code for conventional disk-based filesystems
;
;
; Some semi-configurable constants... change on your own risk.
;
NULLFILE equ 0 ; Null character == empty filename
NULLOFFSET equ 0 ; Position in which to look
retry_count equ 16 ; How patient are we with the disk?
%assign HIGHMEM_SLOP 0 ; Avoid this much memory near the top
LDLINUX_MAGIC equ 0x3eb202fe ; A random number to identify ourselves with
; This indicates the general format of the last few bytes in the boot sector
BS_MAGIC_VER equ 0x1b << 9
MIN_SECTOR_SHIFT equ 9
MIN_SECTOR_SIZE equ (1 << MIN_SECTOR_SHIFT)
; ---------------------------------------------------------------------------
; BEGIN CODE
; ---------------------------------------------------------------------------
;
; Memory below this point is reserved for the BIOS and the MBR
;
section .earlybss
global trackbuf:data hidden
trackbufsize equ 8192
trackbuf resb trackbufsize ; Track buffer goes here
; ends at 2800h
;
; Common bootstrap code for disk-based derivatives
;
%include "diskstart.inc"
;
; Now, everything is "up and running"... patch kaboom for more
; verbosity and using the full screen system
;
; E9 = JMP NEAR
mov di,kaboom.patch
mov al,0e9h
stosb
mov ax,kaboom2-2
sub ax,di
stosw
;
; If we get to this point ldlinux.c32 failed to run. There's nothing
; left to do but inform that user that something went wrong.
;
enter_command:
auto_boot:
jmp kaboom
section .bss16
alignb 4
ThisKbdTo resd 1 ; Temporary holder for KbdTimeout
ThisTotalTo resd 1 ; Temporary holder for TotalTimeout
KernelExtPtr resw 1 ; During search, final null pointer
FuncFlag resb 1 ; Escape sequences received from keyboard
KernelType resb 1 ; Kernel type, from vkernel, if known
global KernelName
KernelName resb FILENAME_MAX ; Mangled name for kernel
section .text16
;
; COM32 vestigial data structure
;
%include "com32.inc"
;
; Common local boot code
;
%include "localboot.inc"
;
; kaboom2: once everything is loaded, replace the part of kaboom
; starting with "kaboom.patch" with this part
kaboom2:
mov si,err_bootfailed
pm_call pm_writestr
cmp byte [kaboom.again+1],18h ; INT 18h version?
je .int18
pm_call pm_getchar
pm_call syslinux_force_text_mode
int 19h ; And try once more to boot...
.norge: jmp short .norge ; If int 19h returned; this is the end
.int18:
pm_call syslinux_force_text_mode
int 18h
.noreg: jmp short .noreg ; Nynorsk
; -----------------------------------------------------------------------------
; Common modules
; -----------------------------------------------------------------------------
%include "common.inc" ; Universal modules
; -----------------------------------------------------------------------------
; Begin data section
; -----------------------------------------------------------------------------
section .data16
global copyright_str
copyright_str db ' Copyright (C) 1994-'
asciidec YEAR
db ' H. Peter Anvin et al', CR, LF, 0
err_bootfailed db CR, LF, 'Boot failed: please change disks and press '
db 'a key to continue.', CR, LF, 0
;
; Misc initialized (data) variables
;
%ifdef debug ; This code for debugging only
debug_magic dw 0D00Dh ; Debug code sentinel
%endif