137 lines
3.9 KiB
Plaintext
137 lines
3.9 KiB
Plaintext
; -*- 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
|