syslinux/core/init.inc
<<
>>
Prefs
   1; -*- fundamental -*-
   2; -----------------------------------------------------------------------
   3;
   4;   Copyright 2004-2008 H. Peter Anvin - All Rights Reserved
   5;   Copyright 2009 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., 53 Temple Place Ste 330,
  10;   Boston MA 02111-1307, USA; either version 2 of the License, or
  11;   (at your option) any later version; incorporated herein by reference.
  12;
  13; -----------------------------------------------------------------------
  14
  15;
  16; init.inc
  17;
  18; Common initialization code (inline)
  19;
  20
  21                section .text16
  22common_init:
  23                ; Initialize PM invocation framework
  24                call pm_init
  25
  26                ; Decompress PM code to its target location
  27                pm_call pm_decompress
  28                cmp eax,__pm_code_len
  29                jne kaboom
  30
  31;
  32; Initialize timer
  33;
  34                call timer_init
  35
  36;
  37; Initialize configuration information
  38;
  39                call reset_config
  40
  41;
  42; Set up the COMBOOT APIs
  43;
  44                call comboot_setup_api
  45
  46;
  47; Now set up screen parameters
  48;
  49                call adjust_screen
  50
  51;
  52; CPU-dependent initialization and related checks.
  53;
  54check_escapes:
  55                mov ah,02h                      ; Check keyboard flags
  56                int 16h
  57                mov [KbdFlags],al               ; Save for boot prompt check
  58                test al,04h                     ; Ctrl->skip 386 check
  59                jnz skip_checks
  60
  61;
  62; Now check that there is sufficient low (DOS) memory
  63;
  64; NOTE: Linux doesn't use all of real_mode_seg, but we use the same
  65; segment for COMBOOT images, which can use all 64K
  66;
  67                int 12h
  68                mov edx,__lowmem_heap + min_lowmem_heap + 1023
  69                shr edx,10
  70                cmp ax,dx
  71                jae enough_ram
  72                mov ax,dx
  73                mov si,err_noram
  74                mov cl,10
  75                div cl
  76                add [si+err_noram.size-err_noram+2],ah
  77                cbw
  78                div cl
  79                add [si+err_noram.size-err_noram],ax
  80                call writestr_early
  81                jmp kaboom
  82enough_ram:
  83skip_checks:
  84
  85                section .data16
  86err_noram       db 'It appears your computer has less than '
  87.size           db '000'
  88                db 'K of low ("DOS")'
  89                db CR, LF
  90                db 'RAM.  Syslinux needs at least this amount to boot.  If you get'
  91                db CR, LF
  92                db 'this message in error, hold down the Ctrl key while'
  93                db CR, LF
  94                db 'booting, and I will take your word for it.', CR, LF, 0
  95
  96                section .text16
  97;
  98; The code to decompress the PM code and initialize other segments.
  99;
 100                extern _lzo1x_decompress_asm_fast
 101
 102                section .textnr
 103                bits 32
 104pm_decompress:
 105                push 0                          ; Space for decompressed size
 106                push esp                        ; Pointer to previous word
 107                push __pm_code_start            ; Target address
 108                push dword [lzo_data_size]      ; Compressed size
 109                push dword __pm_code_lma
 110                call _lzo1x_decompress_asm_fast
 111                add esp,16
 112                pop RM_EAX                      ; Decompressed size
 113
 114                ; Zero bss sections (but not .earlybss, since it may
 115                ; contain already-live data.)
 116                xor eax,eax
 117                mov edi,__bss_start
 118                mov ecx,__bss_dwords
 119                rep stosd
 120                mov edi,__bss16_start
 121                mov ecx,__bss16_dwords
 122                rep stosd
 123                mov edi,__high_clear_start      ; .uibss, .auxseg, .lowmem
 124                mov ecx,__high_clear_dwords
 125                rep stosd
 126
 127                ret
 128
 129                section .data16
 130lzo_data_size   dd 0                            ; filled in by compressor
 131
 132                section .text16
 133                bits 16
 134
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.