; -*- 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