(2006-08-06) rescue-bootcd
This commit is contained in:
76
extra/syslinux-3.09/cpuinit.inc
Normal file
76
extra/syslinux-3.09/cpuinit.inc
Normal file
@@ -0,0 +1,76 @@
|
||||
;; $Id: cpuinit.inc,v 1.5 2004/12/27 07:04:08 hpa Exp $
|
||||
;; -----------------------------------------------------------------------
|
||||
;;
|
||||
;; Copyright 1994-2002 H. Peter Anvin - All Rights Reserved
|
||||
;;
|
||||
;; 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., 53 Temple Place Ste 330,
|
||||
;; Boston MA 02111-1307, USA; either version 2 of the License, or
|
||||
;; (at your option) any later version; incorporated herein by reference.
|
||||
;;
|
||||
;; -----------------------------------------------------------------------
|
||||
|
||||
;;
|
||||
;; cpuinit.inc
|
||||
;;
|
||||
;; CPU-dependent initialization and related checks.
|
||||
;;
|
||||
|
||||
check_escapes:
|
||||
mov ah,02h ; Check keyboard flags
|
||||
int 16h
|
||||
mov [KbdFlags],al ; Save for boot prompt check
|
||||
test al,04h ; Ctrl->skip 386 check
|
||||
jnz skip_checks
|
||||
|
||||
;
|
||||
; Now check that there is sufficient low (DOS) memory
|
||||
;
|
||||
; NOTE: Linux doesn't use all of real_mode_seg, but we use the same
|
||||
; segment for COMBOOT images, which can use all 64K
|
||||
;
|
||||
dosram_k equ (real_mode_seg+0x1000) >> 6 ; Minimum DOS memory (K)
|
||||
int 12h
|
||||
cmp ax,dosram_k
|
||||
jae enough_ram
|
||||
mov si,err_noram
|
||||
call writestr
|
||||
jmp kaboom
|
||||
enough_ram:
|
||||
skip_checks:
|
||||
|
||||
;
|
||||
; Initialize the bcopy32 code in low memory
|
||||
;
|
||||
mov si,section..bcopy32.start
|
||||
mov di,__bcopy_start
|
||||
mov cx,__bcopy_size >> 2
|
||||
rep movsd
|
||||
|
||||
;
|
||||
; Check if we're 386 (as opposed to 486+); if so we need to blank out
|
||||
; the WBINVD instruction
|
||||
;
|
||||
; We check for 486 by setting EFLAGS.AC
|
||||
;
|
||||
%if DO_WBINVD
|
||||
pushfd ; Save the good flags
|
||||
pushfd
|
||||
pop eax
|
||||
mov ebx,eax
|
||||
xor eax,(1 << 18) ; AC bit
|
||||
push eax
|
||||
popfd
|
||||
pushfd
|
||||
pop eax
|
||||
popfd ; Restore the original flags
|
||||
xor eax,ebx
|
||||
jnz is_486
|
||||
;
|
||||
; 386 - Looks like we better blot out the WBINVD instruction
|
||||
;
|
||||
mov byte [try_wbinvd],0c3h ; Near RET
|
||||
is_486:
|
||||
%endif ; DO_WBINVD
|
||||
|
||||
Reference in New Issue
Block a user