Add memtest support.
[syslinux-debian/hramrach.git] / core / diskfs.inc
blobd0f2804c4d8502f7a2ef55825cc0c07a1e1c5020
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
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.
13 ; -----------------------------------------------------------------------
16 ; diskfs.inc
18 ; Common code for conventional disk-based filesystems
22 ; Some semi-configurable constants... change on your own risk.
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
30 ; This indicates the general format of the last few bytes in the boot sector
31 BS_MAGIC_VER    equ 0x1b << 9
33 MIN_SECTOR_SHIFT        equ 9
34 MIN_SECTOR_SIZE         equ (1 << MIN_SECTOR_SHIFT)
36 ; ---------------------------------------------------------------------------
37 ;   BEGIN CODE
38 ; ---------------------------------------------------------------------------
41 ; Memory below this point is reserved for the BIOS and the MBR
43                 section .earlybss
44                 global trackbuf:data hidden
45 trackbufsize    equ 8192
46 trackbuf        resb trackbufsize       ; Track buffer goes here
47                 ; ends at 2800h
50 ; Common bootstrap code for disk-based derivatives
52 %include "diskstart.inc"
55 ; Now, everything is "up and running"... patch kaboom for more
56 ; verbosity and using the full screen system
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
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.
70 enter_command:
71 auto_boot:
72                 jmp kaboom
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
84                 section .text16
86 ; COMBOOT-loading code
88 %include "comboot.inc"
89 %include "com32.inc"
92 ; Boot sector loading code
96 ; Abort loading code
100 ; Hardware cleanup common code
103 %include "localboot.inc"
106 ; kaboom2: once everything is loaded, replace the part of kaboom
107 ;          starting with "kaboom.patch" with this part
109 kaboom2:
110                 mov si,err_bootfailed
111                 pm_call pm_writestr
112                 cmp byte [kaboom.again+1],18h   ; INT 18h version?
113                 je .int18
114                 pm_call pm_getchar
115                 pm_call syslinux_force_text_mode
116                 int 19h                 ; And try once more to boot...
117 .norge:         jmp short .norge        ; If int 19h returned; this is the end
118 .int18:
119                 pm_call syslinux_force_text_mode
120                 int 18h
121 .noreg:         jmp short .noreg        ; Nynorsk
123 ; -----------------------------------------------------------------------------
124 ;  Common modules
125 ; -----------------------------------------------------------------------------
127 %include "common.inc"           ; Universal modules
129 ; -----------------------------------------------------------------------------
130 ;  Begin data section
131 ; -----------------------------------------------------------------------------
133                 section .data16
134                 global copyright_str
135 copyright_str   db ' Copyright (C) 1994-'
136                 asciidec YEAR
137                 db ' H. Peter Anvin et al', CR, LF, 0
138 err_bootfailed  db CR, LF, 'Boot failed: please change disks and press '
139                 db 'a key to continue.', CR, LF, 0
142 ; Misc initialized (data) variables
144 %ifdef debug                            ; This code for debugging only
145 debug_magic     dw 0D00Dh               ; Debug code sentinel
146 %endif