Home | History | Annotate | Download | only in core
      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 ;
     24 NULLFILE	equ 0			; Null character == empty filename
     25 NULLOFFSET	equ 0			; Position in which to look
     26 retry_count	equ 16			; How patient are we with the disk?
     27 %assign HIGHMEM_SLOP 0			; Avoid this much memory near the top
     28 LDLINUX_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
     31 BS_MAGIC_VER	equ 0x1b << 9
     32 
     33 MIN_SECTOR_SHIFT	equ 9
     34 MIN_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
     45 trackbufsize	equ 8192
     46 trackbuf	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 ;
     70 enter_command:
     71 auto_boot:
     72 		jmp kaboom
     73 
     74 		section .bss16
     75 		alignb 4
     76 ThisKbdTo	resd 1			; Temporary holder for KbdTimeout
     77 ThisTotalTo	resd 1			; Temporary holder for TotalTimeout
     78 KernelExtPtr	resw 1			; During search, final null pointer
     79 FuncFlag	resb 1			; Escape sequences received from keyboard
     80 KernelType	resb 1			; Kernel type, from vkernel, if known
     81 		global KernelName
     82 KernelName	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 
     99 kaboom2:
    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
    125 copyright_str   db ' Copyright (C) 1994-'
    126 		asciidec YEAR
    127 		db ' H. Peter Anvin et al', CR, LF, 0
    128 err_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
    135 debug_magic	dw 0D00Dh		; Debug code sentinel
    136 %endif
    137