You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.9 KiB
136 lines
3.9 KiB
; -*- 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
|
|
|