kolibrios-fun/kernel/branches/kolibri_pe/boot/boot.asm

106 lines
2.0 KiB
NASM
Raw Normal View History

format MS COFF
include '../macros.inc'
$Revision: 849 $
__REV__ = __REV
include "../proc32.inc"
include "../kglobals.inc"
include "../lang.inc"
CR0_PE equ 0x00000001 ;protected mode
CR0_WP equ 0x00010000 ;write protect
CR0_PG equ 0x80000000 ;paging
public _16bit_start
public _16bit_end
public _enter_bootscreen
public _bx_from_load
extrn __setvars
section '.boot' code readable align 16
_16bit_start:
org 0
use16
_enter_bootscreen:
mov eax, cr0
and eax, not 0x80000001
mov cr0, eax
jmp far 0x1000:start_of_code
version db 'Kolibri OS version 0.7.1.0 ',13,10,13,10,0
include "bootstr.inc" ; language-independent boot messages
include "preboot.inc"
if lang eq en
include "booteng.inc" ; english system boot messages
else if lang eq ru
include "bootru.inc" ; russian system boot messages
include "ru.inc" ; Russian font
else if lang eq et
include "bootet.inc" ; estonian system boot messages
include "et.inc" ; Estonian font
else
include "bootge.inc" ; german system boot messages
end if
include "../data16.inc"
include "bootcode.inc" ; 16 bit system boot code
include "../bus/pci/pci16.inc"
include "../detect/biosdisk.inc"
;include "boot/shutdown.inc" ; shutdown or restart
cli
mov eax, cr0
or eax, CR0_PG+CR0_WP+CR0_PE
mov cr0, eax
jmp pword 0x08:__setvars
align 4
_enter_16bit:
mov eax, cr0
and eax, not 0x80000001
mov cr0, eax
jmp far 0x1000:@F
align 4
_leave_16bit:
cli
mov eax, cr0
or eax, CR0_PG+CR0_WP+CR0_PE
mov cr0, eax
hlt
align 4
@@:
mov eax, 0x3000
mov ss, ax
mov esp, 0xEC00
mov ebx, 0x1000
mov ds, bx
mov es, bx
cli
hlt
align 4
_16bit_end: