1; -*- fundamental -*- (asm-mode sucks) 2; ----------------------------------------------------------------------- 3; 4; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved 5; Copyright 2009-2011 Intel Corporation; author: H. Peter Anvin 6; 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. 12; 13; ----------------------------------------------------------------------- 14 15; 16; diskfs.inc 17; 18; Common code for conventional disk-based filesystems 19; 20 21; 22; Some semi-configurable constants... change on your own risk. 23; 24NULLFILE equ 0 ; Null character == empty filename 25NULLOFFSET equ 0 ; Position in which to look 26retry_count equ 16 ; How patient are we with the disk? 27%assign HIGHMEM_SLOP 0 ; Avoid this much memory near the top 28LDLINUX_MAGIC equ 0x3eb202fe ; A random number to identify ourselves with 29 30; This indicates the general format of the last few bytes in the boot sector 31BS_MAGIC_VER equ 0x1b << 9 32 33MIN_SECTOR_SHIFT equ 9 34MIN_SECTOR_SIZE equ (1 << MIN_SECTOR_SHIFT) 35 36; --------------------------------------------------------------------------- 37; BEGIN CODE 38; --------------------------------------------------------------------------- 39 40; 41; Memory below this point is reserved for the BIOS and the MBR 42; 43 section .earlybss 44 global trackbuf:data hidden 45trackbufsize equ 8192 46trackbuf resb trackbufsize ; Track buffer goes here 47 ; ends at 2800h 48 49; 50; Common bootstrap code for disk-based derivatives 51; 52%include "diskstart.inc" 53 54; 55; Now, everything is "up and running"... patch kaboom for more 56; verbosity and using the full screen system 57; 58 ; E9 = JMP NEAR 59 mov di,kaboom.patch 60 mov al,0e9h 61 stosb 62 mov ax,kaboom2-2 63 sub ax,di 64 stosw 65 66; 67; If we get to this point ldlinux.c32 failed to run. There's nothing 68; left to do but inform that user that something went wrong. 69; 70enter_command: 71auto_boot: 72 jmp kaboom 73 74 section .bss16 75 alignb 4 76ThisKbdTo resd 1 ; Temporary holder for KbdTimeout 77ThisTotalTo resd 1 ; Temporary holder for TotalTimeout 78KernelExtPtr resw 1 ; During search, final null pointer 79FuncFlag resb 1 ; Escape sequences received from keyboard 80KernelType resb 1 ; Kernel type, from vkernel, if known 81 global KernelName 82KernelName resb FILENAME_MAX ; Mangled name for kernel 83 84 section .text16 85; 86; COM32 vestigial data structure 87; 88%include "com32.inc" 89 90; 91; Common local boot code 92; 93%include "localboot.inc" 94 95; 96; kaboom2: once everything is loaded, replace the part of kaboom 97; starting with "kaboom.patch" with this part 98 99kaboom2: 100 mov si,err_bootfailed 101 pm_call pm_writestr 102 cmp byte [kaboom.again+1],18h ; INT 18h version? 103 je .int18 104 pm_call pm_getchar 105 pm_call syslinux_force_text_mode 106 int 19h ; And try once more to boot... 107.norge: jmp short .norge ; If int 19h returned; this is the end 108.int18: 109 pm_call syslinux_force_text_mode 110 int 18h 111.noreg: jmp short .noreg ; Nynorsk 112 113; ----------------------------------------------------------------------------- 114; Common modules 115; ----------------------------------------------------------------------------- 116 117%include "common.inc" ; Universal modules 118 119; ----------------------------------------------------------------------------- 120; Begin data section 121; ----------------------------------------------------------------------------- 122 123 section .data16 124 global copyright_str 125copyright_str db ' Copyright (C) 1994-' 126 asciidec YEAR 127 db ' H. Peter Anvin et al', CR, LF, 0 128err_bootfailed db CR, LF, 'Boot failed: please change disks and press ' 129 db 'a key to continue.', CR, LF, 0 130 131; 132; Misc initialized (data) variables 133; 134%ifdef debug ; This code for debugging only 135debug_magic dw 0D00Dh ; Debug code sentinel 136%endif 137