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

154 lines
2.8 KiB
NASM
Raw Normal View History

format MS COFF
include '../macros.inc'
$Revision$
__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 _poweroff
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"
cli
mov eax, cr0
or eax, CR0_PG+CR0_WP+CR0_PE
mov cr0, eax
jmp pword 0x08:__setvars
;align 4
;_leave_16bit:
;
; cli
; mov eax, cr0
; or eax, CR0_PG+CR0_WP+CR0_PE
; mov cr0, eax
; hlt
align 4
rmode_idt:
dw 0x400
dd 0
dw 0
align 4
_poweroff:
mov eax, cr0
and eax, not 0x80000001
mov cr0, eax
jmp far 0x1000:@F
@@:
mov eax, 0x3000
mov ss, ax
mov esp, 0xEC00
mov ebx, 0x1000
mov ds, bx
mov es, bx
lidt [rmode_idt]
APM_PowerOff:
mov ax, 5304h
xor bx, bx
int 15h
;!!!!!!!!!!!!!!!!!!!!!!!!
mov ax,0x5300
xor bx,bx
int 0x15
push ax
mov ax,0x5301
xor bx,bx
int 0x15
mov ax,0x5308
mov bx,1
mov cx,bx
int 0x15
mov ax,0x530E
xor bx,bx
pop cx
int 0x15
mov ax,0x530D
mov bx,1
mov cx,bx
int 0x15
mov ax,0x530F
mov bx,1
mov cx,bx
int 0x15
mov ax,0x5307
mov bx,1
mov cx,3
int 0x15
;!!!!!!!!!!!!!!!!!!!!!!!!
jmp $
align 4
_16bit_end: