forked from KolibriOS/kolibrios
Split bootbios.asm and kernel.asm.
* Move bios-related part of kernel.asm before B32 label to bootbios.asm file; * Move bx_from_load, boot_dev and kernel_restart_bootblock variables to BOOT_* 0x9000 block; * Update Tupfile.lua, Makefile, build.bat, build.sh accordingly; * Now bios and uefi loaders can jump to very first byte of the kernel. git-svn-id: svn://kolibrios.org@7129 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
7dad6439fe
commit
f208e0e454
@ -4,14 +4,23 @@ languages=en|ru|ge|et|sp
|
|||||||
|
|
||||||
.PHONY: all kernel bootloader clean
|
.PHONY: all kernel bootloader clean
|
||||||
|
|
||||||
all: kernel bootloader
|
all: kernel bootloader bootbios
|
||||||
|
|
||||||
kernel: check_lang
|
kernel: check_lang bootbios
|
||||||
@echo "*** building kernel with language '$(lang)' ..."
|
@echo "*** building kernel with language '$(lang)' ..."
|
||||||
@mkdir -p bin
|
@mkdir -p bin
|
||||||
@echo "lang fix $(lang)" > lang.inc
|
@echo "lang fix $(lang)" > lang.inc
|
||||||
@echo "--- building 'bin/kernel.mnt' ..."
|
@echo "--- building 'bin/kernel.mnt' ..."
|
||||||
@$(FASM) $(FLAGS) kernel.asm bin/kernel.mnt
|
@$(FASM) $(FLAGS) kernel.asm bin/kernel.mnt
|
||||||
|
@$(FASM) $(FLAGS) -dUEFI=1 kernel.asm bin/kernel.bin
|
||||||
|
@rm -f lang.inc
|
||||||
|
|
||||||
|
bootbios: check_lang
|
||||||
|
@echo "*** building bootbios.bin with language '$(lang)' ..."
|
||||||
|
@mkdir -p bin
|
||||||
|
@echo "lang fix $(lang)" > lang.inc
|
||||||
|
@echo "--- building 'bootbios.bin' ..."
|
||||||
|
@$(FASM) $(FLAGS) bootbios.asm bootbios.bin
|
||||||
@rm -f lang.inc
|
@rm -f lang.inc
|
||||||
|
|
||||||
bootloader: check_lang
|
bootloader: check_lang
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||||
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, "fasm -m 65536 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt")
|
tup.rule({"bootbios.asm", extra_inputs = {"lang.inc"}}, "fasm %f %o ", "bootbios.bin")
|
||||||
|
tup.rule({"kernel.asm", extra_inputs = {"bootbios.bin", "lang.inc"}}, "fasm -m 65536 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt")
|
||||||
|
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, "fasm -m 65536 %f %o -dUEFI=1", "kernel.bin")
|
||||||
|
@ -274,22 +274,26 @@ if defined extended_primary_loader
|
|||||||
pop ds
|
pop ds
|
||||||
else
|
else
|
||||||
cld
|
cld
|
||||||
|
push 0
|
||||||
|
pop es
|
||||||
; \begin{diamond}[02.12.2005]
|
; \begin{diamond}[02.12.2005]
|
||||||
; if bootloader sets ax = 'KL', then ds:si points to loader block
|
; if bootloader sets ax = 'KL', then ds:si points to loader block
|
||||||
cmp ax, 'KL'
|
cmp ax, 'KL'
|
||||||
jnz @f
|
jnz @f
|
||||||
mov word [cs:cfgmanager.loader_block], si
|
mov word [cs:cfgmanager.loader_block], si
|
||||||
mov word [cs:cfgmanager.loader_block+2], ds
|
mov word [cs:cfgmanager.loader_block+2], ds
|
||||||
|
mov word [es:BOOT_KERNEL_RESTART], kernel_restart_bootblock
|
||||||
@@:
|
@@:
|
||||||
; \end{diamond}[02.12.2005]
|
; \end{diamond}[02.12.2005]
|
||||||
|
|
||||||
; if bootloader sets cx = 'HA' and dx = 'RD', then bx contains identifier of source hard disk
|
; if bootloader sets cx = 'HA' and dx = 'RD', then bx contains identifier of source disk
|
||||||
; (see comment to bx_from_load)
|
; (see comment to BOOT_BX_FROM_LOAD and loader_doc.txt)
|
||||||
|
mov word [es:BOOT_BX_FROM_LOAD], 'r1' ; default value: /rd/1
|
||||||
cmp cx, 'HA'
|
cmp cx, 'HA'
|
||||||
jnz no_hd_load
|
jnz no_hd_load
|
||||||
cmp dx, 'RD'
|
cmp dx, 'RD'
|
||||||
jnz no_hd_load
|
jnz no_hd_load
|
||||||
mov word [cs:bx_from_load], bx ; {SPraid}[13.03.2007]
|
mov [es:BOOT_BX_FROM_LOAD], bx
|
||||||
no_hd_load:
|
no_hd_load:
|
||||||
|
|
||||||
; set up stack
|
; set up stack
|
||||||
@ -966,14 +970,14 @@ end if
|
|||||||
|
|
||||||
mov al, [preboot_device]
|
mov al, [preboot_device]
|
||||||
dec al
|
dec al
|
||||||
mov [boot_dev], al
|
mov [es:BOOT_DEV], al
|
||||||
|
|
||||||
; GET MEMORY MAP
|
; GET MEMORY MAP
|
||||||
include '../detect/biosmem.inc'
|
include '../detect/biosmem.inc'
|
||||||
|
|
||||||
; READ DISKETTE TO MEMORY
|
; READ DISKETTE TO MEMORY
|
||||||
|
|
||||||
cmp [boot_dev], 0
|
cmp byte [es:BOOT_DEV], 0
|
||||||
jne no_sys_on_floppy
|
jne no_sys_on_floppy
|
||||||
mov si, diskload
|
mov si, diskload
|
||||||
call print
|
call print
|
||||||
@ -1300,7 +1304,7 @@ no_sys_on_floppy:
|
|||||||
out dx, al
|
out dx, al
|
||||||
|
|
||||||
if defined extended_primary_loader
|
if defined extended_primary_loader
|
||||||
cmp [boot_dev], 1
|
cmp [es:BOOT_DEV], 1
|
||||||
jne no_sys_from_primary
|
jne no_sys_from_primary
|
||||||
; load kolibri.img using callback from primary loader
|
; load kolibri.img using callback from primary loader
|
||||||
and word [movedesc + 24 + 2], 0
|
and word [movedesc + 24 + 2], 0
|
||||||
|
@ -31,18 +31,9 @@ macro line_space {
|
|||||||
}
|
}
|
||||||
d80x25_top:
|
d80x25_top:
|
||||||
line_full_top
|
line_full_top
|
||||||
if __REV__ > 0
|
cur_line_pos = 72
|
||||||
cur_line_pos = 75
|
; this signature will be replaced with revision number (in kernel.asm)
|
||||||
store byte ' ' at d80x25_top+cur_line_pos+1
|
store dword '****' at d80x25_top + cur_line_pos
|
||||||
rev_var = __REV__
|
|
||||||
while rev_var > 0
|
|
||||||
store byte rev_var mod 10 + '0' at d80x25_top+cur_line_pos
|
|
||||||
cur_line_pos = cur_line_pos - 1
|
|
||||||
rev_var = rev_var / 10
|
|
||||||
end while
|
|
||||||
store byte ' ' at d80x25_top+cur_line_pos
|
|
||||||
store dword ' SVN' at d80x25_top+cur_line_pos-4
|
|
||||||
end if
|
|
||||||
|
|
||||||
space_msg:
|
space_msg:
|
||||||
line_space
|
line_space
|
||||||
|
@ -29,7 +29,6 @@ preboot_dma db 0 ; use DMA for access to HDD (1-always, 2-only for read
|
|||||||
preboot_device db 0 ; boot device
|
preboot_device db 0 ; boot device
|
||||||
; (1-floppy 2-harddisk 3-kernel restart 4-format ram disk)
|
; (1-floppy 2-harddisk 3-kernel restart 4-format ram disk)
|
||||||
;!!!! 0 - autodetect !!!!
|
;!!!! 0 - autodetect !!!!
|
||||||
preboot_blogesc = 0 ; start immediately after bootlog
|
|
||||||
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
|
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
|
||||||
if defined extended_primary_loader
|
if defined extended_primary_loader
|
||||||
preboot_timeout dw 5*18 ; timeout in 1/18th of second for config settings screen
|
preboot_timeout dw 5*18 ; timeout in 1/18th of second for config settings screen
|
||||||
|
@ -11,7 +11,7 @@ $Revision$
|
|||||||
read_ramdisk:
|
read_ramdisk:
|
||||||
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3)
|
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3)
|
||||||
|
|
||||||
cmp [boot_dev+OS_BASE+0x10000], 1
|
cmp byte [BOOT_DEV+OS_BASE+0x10000], 1
|
||||||
jne no_sys_on_hd.1
|
jne no_sys_on_hd.1
|
||||||
|
|
||||||
xor ebp, ebp
|
xor ebp, ebp
|
||||||
@ -112,7 +112,7 @@ no_sys_on_hd:
|
|||||||
DEBUGF 1, "K : RD not found\n"
|
DEBUGF 1, "K : RD not found\n"
|
||||||
.1:
|
.1:
|
||||||
; test_to_format_ram_disk (need if not using ram disk)
|
; test_to_format_ram_disk (need if not using ram disk)
|
||||||
cmp [boot_dev+OS_BASE+0x10000], 3
|
cmp byte [BOOT_DEV+OS_BASE+0x10000], 3
|
||||||
jne not_format_ram_disk
|
jne not_format_ram_disk
|
||||||
; format_ram_disk
|
; format_ram_disk
|
||||||
mov edi, RAMDISK
|
mov edi, RAMDISK
|
||||||
|
@ -348,7 +348,9 @@ align 4
|
|||||||
; bootloader interface
|
; bootloader interface
|
||||||
push 0x1000
|
push 0x1000
|
||||||
pop ds
|
pop ds
|
||||||
mov si, kernel_restart_bootblock
|
push 0
|
||||||
|
pop es
|
||||||
|
mov si, [es:BOOT_KERNEL_RESTART]
|
||||||
mov ax, 'KL'
|
mov ax, 'KL'
|
||||||
jmp 0x1000:0000
|
jmp 0x1000:0000
|
||||||
|
|
||||||
|
122
kernel/trunk/bootbios.asm
Normal file
122
kernel/trunk/bootbios.asm
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; 16 BIT ENTRY FROM BOOTSECTOR ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
include 'macros.inc'
|
||||||
|
include 'struct.inc'
|
||||||
|
include 'encoding.inc'
|
||||||
|
include 'const.inc'
|
||||||
|
|
||||||
|
os_code = code_l - tmp_gdt
|
||||||
|
|
||||||
|
use16
|
||||||
|
org 0x0
|
||||||
|
jmp start_of_code
|
||||||
|
|
||||||
|
if lang eq sp
|
||||||
|
include "kernelsp.inc" ; spanish kernel messages
|
||||||
|
else if lang eq et
|
||||||
|
version db 'Kolibri OS versioon 0.7.7.0+ ',13,10,13,10,0
|
||||||
|
else
|
||||||
|
version db 'Kolibri OS version 0.7.7.0+ ',13,10,13,10,0
|
||||||
|
end if
|
||||||
|
|
||||||
|
include "boot/bootstr.inc" ; language-independent boot messages
|
||||||
|
include "boot/preboot.inc"
|
||||||
|
|
||||||
|
if lang eq ge
|
||||||
|
include "boot/bootge.inc" ; german system boot messages
|
||||||
|
else if lang eq sp
|
||||||
|
include "boot/bootsp.inc" ; spanish system boot messages
|
||||||
|
else if lang eq ru
|
||||||
|
include "boot/bootru.inc" ; russian system boot messages
|
||||||
|
include "boot/ru.inc" ; Russian font
|
||||||
|
else if lang eq et
|
||||||
|
include "boot/bootet.inc" ; estonian system boot messages
|
||||||
|
include "boot/et.inc" ; Estonian font
|
||||||
|
else
|
||||||
|
include "boot/booten.inc" ; english system boot messages
|
||||||
|
end if
|
||||||
|
|
||||||
|
include "boot/bootcode.inc" ; 16 bit system boot code
|
||||||
|
include "bus/pci/pci16.inc"
|
||||||
|
include "detect/biosdisk.inc"
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; SWITCH TO 32 BIT PROTECTED MODE ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
; CR0 Flags - Protected mode and Paging
|
||||||
|
|
||||||
|
mov ecx, CR0_PE+CR0_AM
|
||||||
|
|
||||||
|
; Enabling 32 bit protected mode
|
||||||
|
|
||||||
|
sidt [cs:old_ints_h]
|
||||||
|
|
||||||
|
cli ; disable all irqs
|
||||||
|
cld
|
||||||
|
mov al, 255 ; mask all irqs
|
||||||
|
out 0xa1, al
|
||||||
|
out 0x21, al
|
||||||
|
l.5:
|
||||||
|
in al, 0x64 ; Enable A20
|
||||||
|
test al, 2
|
||||||
|
jnz l.5
|
||||||
|
mov al, 0xD1
|
||||||
|
out 0x64, al
|
||||||
|
l.6:
|
||||||
|
in al, 0x64
|
||||||
|
test al, 2
|
||||||
|
jnz l.6
|
||||||
|
mov al, 0xDF
|
||||||
|
out 0x60, al
|
||||||
|
l.7:
|
||||||
|
in al, 0x64
|
||||||
|
test al, 2
|
||||||
|
jnz l.7
|
||||||
|
mov al, 0xFF
|
||||||
|
out 0x64, al
|
||||||
|
|
||||||
|
lgdt [cs:tmp_gdt] ; Load GDT
|
||||||
|
mov eax, cr0 ; protected mode
|
||||||
|
or eax, ecx
|
||||||
|
and eax, 10011111b *65536*256 + 0xffffff ; caching enabled
|
||||||
|
mov cr0, eax
|
||||||
|
jmp pword os_code:B32 ; jmp to enable 32 bit mode
|
||||||
|
|
||||||
|
align 8
|
||||||
|
tmp_gdt:
|
||||||
|
|
||||||
|
dw 23
|
||||||
|
dd tmp_gdt+0x10000
|
||||||
|
dw 0
|
||||||
|
code_l:
|
||||||
|
dw 0xffff
|
||||||
|
dw 0x0000
|
||||||
|
db 0x00
|
||||||
|
dw 11011111b *256 +10011010b
|
||||||
|
db 0x00
|
||||||
|
|
||||||
|
dw 0xffff
|
||||||
|
dw 0x0000
|
||||||
|
db 0x00
|
||||||
|
dw 11011111b *256 +10010010b
|
||||||
|
db 0x00
|
||||||
|
|
||||||
|
include "data16.inc"
|
||||||
|
|
||||||
|
if ~ lang eq sp
|
||||||
|
diff16 "end of bootcode",0,$+0x10000
|
||||||
|
end if
|
||||||
|
|
||||||
|
use32
|
||||||
|
org $+0x10000
|
||||||
|
|
||||||
|
align 4
|
||||||
|
B32:
|
@ -49,7 +49,9 @@ goto :eof
|
|||||||
|
|
||||||
if not exist bin mkdir bin
|
if not exist bin mkdir bin
|
||||||
echo lang fix %lang% > lang.inc
|
echo lang fix %lang% > lang.inc
|
||||||
|
fasm -m 65536 bootbios.asm bootbios.bin
|
||||||
fasm -m 65536 kernel.asm bin\kernel.mnt
|
fasm -m 65536 kernel.asm bin\kernel.mnt
|
||||||
|
fasm -m 65536 kernel.asm bin\kernel.bin -dUEFI=1
|
||||||
if not %errorlevel%==0 goto :Error_FasmFailed
|
if not %errorlevel%==0 goto :Error_FasmFailed
|
||||||
erase lang.inc
|
erase lang.inc
|
||||||
goto :eof
|
goto :eof
|
||||||
|
@ -6,6 +6,8 @@ KERPACK=$HOME/kolibrios/programs/other/kpack/kerpack_linux/kerpack
|
|||||||
KOLIBRI_IMG=$HOME/nightly/kolibri.img
|
KOLIBRI_IMG=$HOME/nightly/kolibri.img
|
||||||
|
|
||||||
replace=0; # Replace kernel in the image file?
|
replace=0; # Replace kernel in the image file?
|
||||||
|
echo 'lang fix en' > lang.inc
|
||||||
|
fasm -m 65536 bootbios.asm bootbios.bin
|
||||||
fasm -m 65536 kernel.asm kernel.mnt
|
fasm -m 65536 kernel.asm kernel.mnt
|
||||||
$KERPACK kernel.mnt kernel.mnt
|
$KERPACK kernel.mnt kernel.mnt
|
||||||
|
|
||||||
|
@ -357,6 +357,12 @@ BOOT_APM_FLAGS equ 0x9046
|
|||||||
BOOT_APM_CODE_32 equ 0x9050
|
BOOT_APM_CODE_32 equ 0x9050
|
||||||
BOOT_APM_CODE_16 equ 0x9052
|
BOOT_APM_CODE_16 equ 0x9052
|
||||||
BOOT_APM_DATA_16 equ 0x9054
|
BOOT_APM_DATA_16 equ 0x9054
|
||||||
|
BOOT_DEV equ 0x9056 ; byte
|
||||||
|
BOOT_KERNEL_RESTART equ 0x9058 ; word
|
||||||
|
BOOT_BX_FROM_LOAD equ 0x905A ; word
|
||||||
|
; low byte: a,b,c,d -- hdX, r -- rdX
|
||||||
|
; high byte: symbol 'X' as in the line above, e.g. '1', not 1
|
||||||
|
; see loader_doc.txt for details
|
||||||
|
|
||||||
BOOT_BIOS_HD_CNT equ 0x907F ; byte number of BIOS hard disks
|
BOOT_BIOS_HD_CNT equ 0x907F ; byte number of BIOS hard disks
|
||||||
BOOT_BIOS_HD equ 0x9080 ; Nbytes BIOS hard disks
|
BOOT_BIOS_HD equ 0x9080 ; Nbytes BIOS hard disks
|
||||||
|
@ -12,10 +12,6 @@ flm db 0
|
|||||||
preboot_lfb db 0
|
preboot_lfb db 0
|
||||||
preboot_bootlog db 0
|
preboot_bootlog db 0
|
||||||
boot_drive db 0
|
boot_drive db 0
|
||||||
bx_from_load:
|
|
||||||
dw 'r1' ; структура для хранения параметров- откуда гашрузились, берется ниже из bx ; {SPraid}[13.03.2007]
|
|
||||||
; a,b,c,d - винчестеры, r - рам диск
|
|
||||||
; # диска... символ, а не байт. '1', а не 1
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
old_ints_h:
|
old_ints_h:
|
||||||
|
@ -28,7 +28,7 @@ proc Parser_params
|
|||||||
locals
|
locals
|
||||||
buff rb 4 ; for test cd
|
buff rb 4 ; for test cd
|
||||||
endl
|
endl
|
||||||
mov eax, [OS_BASE+0x10000+bx_from_load]
|
mov ax, [OS_BASE+BOOT_BX_FROM_LOAD]
|
||||||
mov ecx, sysdir_path
|
mov ecx, sysdir_path
|
||||||
mov [ecx-64], dword 'sys'
|
mov [ecx-64], dword 'sys'
|
||||||
mov [ecx-2], byte 3
|
mov [ecx-2], byte 3
|
||||||
|
@ -131,115 +131,39 @@ pci_data_sel equ (pci_data_32-gdts)
|
|||||||
;;
|
;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
; In bios boot mode the kernel code below is appended to bootbios.bin file.
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
; That is a loading and initialization code that also draws the blue screen
|
||||||
;; ;;
|
; menu with svn revision number near top right corner of the screen. This fasm
|
||||||
;; 16 BIT ENTRY FROM BOOTSECTOR ;;
|
; preprocessor code searches for '****' signature inside bootbios.bin and
|
||||||
;; ;;
|
; places revision number there.
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
if ~ defined UEFI
|
||||||
|
bootbios:
|
||||||
use16
|
file 'bootbios.bin'
|
||||||
org 0x0
|
if __REV__ > 0
|
||||||
jmp start_of_code
|
cur_pos = 0
|
||||||
|
cnt = 0
|
||||||
if lang eq sp
|
repeat $ - bootbios
|
||||||
include "kernelsp.inc" ; spanish kernel messages
|
load a byte from %
|
||||||
else if lang eq et
|
if a = '*'
|
||||||
version db 'Kolibri OS versioon 0.7.7.0+ ',13,10,13,10,0
|
cnt = cnt + 1
|
||||||
else
|
else
|
||||||
version db 'Kolibri OS version 0.7.7.0+ ',13,10,13,10,0
|
cnt = 0
|
||||||
end if
|
end if
|
||||||
|
if cnt = 4
|
||||||
include "boot/bootstr.inc" ; language-independent boot messages
|
cur_pos = % - 1
|
||||||
include "boot/preboot.inc"
|
break
|
||||||
|
end if
|
||||||
if lang eq ge
|
end repeat
|
||||||
include "boot/bootge.inc" ; german system boot messages
|
store byte ' ' at cur_pos + 1
|
||||||
else if lang eq sp
|
rev_var = __REV__
|
||||||
include "boot/bootsp.inc" ; spanish system boot messages
|
while rev_var > 0
|
||||||
else if lang eq ru
|
store byte rev_var mod 10 + '0' at cur_pos
|
||||||
include "boot/bootru.inc" ; russian system boot messages
|
cur_pos = cur_pos - 1
|
||||||
include "boot/ru.inc" ; Russian font
|
rev_var = rev_var / 10
|
||||||
else if lang eq et
|
end while
|
||||||
include "boot/bootet.inc" ; estonian system boot messages
|
store byte ' ' at cur_pos
|
||||||
include "boot/et.inc" ; Estonian font
|
store dword ' SVN' at cur_pos - 4
|
||||||
else
|
end if
|
||||||
include "boot/booten.inc" ; english system boot messages
|
|
||||||
end if
|
|
||||||
|
|
||||||
include "boot/bootcode.inc" ; 16 bit system boot code
|
|
||||||
include "bus/pci/pci16.inc"
|
|
||||||
include "detect/biosdisk.inc"
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; SWITCH TO 32 BIT PROTECTED MODE ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
|
|
||||||
; CR0 Flags - Protected mode and Paging
|
|
||||||
|
|
||||||
mov ecx, CR0_PE+CR0_AM
|
|
||||||
|
|
||||||
; Enabling 32 bit protected mode
|
|
||||||
|
|
||||||
sidt [cs:old_ints_h]
|
|
||||||
|
|
||||||
cli ; disable all irqs
|
|
||||||
cld
|
|
||||||
mov al, 255 ; mask all irqs
|
|
||||||
out 0xa1, al
|
|
||||||
out 0x21, al
|
|
||||||
l.5:
|
|
||||||
in al, 0x64 ; Enable A20
|
|
||||||
test al, 2
|
|
||||||
jnz l.5
|
|
||||||
mov al, 0xD1
|
|
||||||
out 0x64, al
|
|
||||||
l.6:
|
|
||||||
in al, 0x64
|
|
||||||
test al, 2
|
|
||||||
jnz l.6
|
|
||||||
mov al, 0xDF
|
|
||||||
out 0x60, al
|
|
||||||
l.7:
|
|
||||||
in al, 0x64
|
|
||||||
test al, 2
|
|
||||||
jnz l.7
|
|
||||||
mov al, 0xFF
|
|
||||||
out 0x64, al
|
|
||||||
|
|
||||||
lgdt [cs:tmp_gdt] ; Load GDT
|
|
||||||
mov eax, cr0 ; protected mode
|
|
||||||
or eax, ecx
|
|
||||||
and eax, 10011111b *65536*256 + 0xffffff ; caching enabled
|
|
||||||
mov cr0, eax
|
|
||||||
jmp pword os_code:B32 ; jmp to enable 32 bit mode
|
|
||||||
|
|
||||||
align 8
|
|
||||||
tmp_gdt:
|
|
||||||
|
|
||||||
dw 23
|
|
||||||
dd tmp_gdt+0x10000
|
|
||||||
dw 0
|
|
||||||
|
|
||||||
dw 0xffff
|
|
||||||
dw 0x0000
|
|
||||||
db 0x00
|
|
||||||
dw 11011111b *256 +10011010b
|
|
||||||
db 0x00
|
|
||||||
|
|
||||||
dw 0xffff
|
|
||||||
dw 0x0000
|
|
||||||
db 0x00
|
|
||||||
dw 11011111b *256 +10010010b
|
|
||||||
db 0x00
|
|
||||||
|
|
||||||
include "data16.inc"
|
|
||||||
|
|
||||||
if ~ lang eq sp
|
|
||||||
diff16 "end of bootcode",0,$+0x10000
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
use32
|
use32
|
||||||
@ -770,7 +694,7 @@ endg
|
|||||||
call PIT_init
|
call PIT_init
|
||||||
|
|
||||||
; Register ramdisk file system
|
; Register ramdisk file system
|
||||||
cmp [boot_dev+OS_BASE+0x10000], 1
|
cmp byte [BOOT_DEV+OS_BASE+0x10000], 1
|
||||||
je @f
|
je @f
|
||||||
|
|
||||||
call register_ramdisk
|
call register_ramdisk
|
||||||
@ -861,7 +785,7 @@ include 'detect/dev_fd.inc'
|
|||||||
include 'detect/init_ata.inc'
|
include 'detect/init_ata.inc'
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
if 0
|
if 0
|
||||||
mov ax, [OS_BASE+0x10000+bx_from_load]
|
mov ax, [OS_BASE+BOOT_BX_FROM_LOAD]
|
||||||
cmp ax, 'r1'; if using not ram disk, then load librares and parameters {SPraid.simba}
|
cmp ax, 'r1'; if using not ram disk, then load librares and parameters {SPraid.simba}
|
||||||
je no_lib_load
|
je no_lib_load
|
||||||
|
|
||||||
@ -1101,6 +1025,7 @@ endg
|
|||||||
first_app_found:
|
first_app_found:
|
||||||
|
|
||||||
; START MULTITASKING
|
; START MULTITASKING
|
||||||
|
preboot_blogesc = 0 ; start immediately after bootlog
|
||||||
|
|
||||||
; A 'All set - press ESC to start' messages if need
|
; A 'All set - press ESC to start' messages if need
|
||||||
if preboot_blogesc
|
if preboot_blogesc
|
||||||
|
Loading…
Reference in New Issue
Block a user