Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 850 → Rev 851

/kernel/branches/kolibri_pe/kernel.asm
74,14 → 74,14
tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
 
 
os_stack equ (os_data_l-gdts) ; GDTs
os_code equ (os_code_l-gdts)
graph_data equ (3+graph_data_l-gdts)
tss0 equ (tss0_l-gdts)
app_code equ (3+app_code_l-gdts)
app_data equ (3+app_data_l-gdts)
pci_code_sel equ (pci_code_32-gdts)
pci_data_sel equ (pci_data_32-gdts)
os_stack equ (os_data_l-_gdts) ; GDTs
os_code equ (os_code_l-_gdts)
graph_data equ (3+graph_data_l-_gdts)
tss0 equ (tss0_l-_gdts)
app_code equ (3+app_code_l-_gdts)
app_data equ (3+app_data_l-_gdts)
pci_code_sel equ (pci_code_32-_gdts)
pci_data_sel equ (pci_data_32-_gdts)
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
107,178 → 107,29
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
section '.flat' code readable align 16
 
public __start
public __os_stack
public _boot_mbi
public _sys_pdbr
public _gdts
public _high_code
 
extrn __edata
public __setvars
 
use32
org 0x001001E0
extrn _enter_bootscreen
extrn _leave_bootscreen
 
align 4
extrn _bx_from_load
 
mboot:
dd 0x1BADB002
dd 0x00010003
dd -(0x1BADB002 + 0x00010003)
dd mboot
dd 0x100000
dd __edata; ;__edata - OS_BASE
dd LAST_PAGE
dd __start
section '.flat' code readable align 16
 
align 16
__start:
cld
use32
 
mov esp, __os_stack-OS_BASE
push 0
popf
org 0xE0102000
 
cmp eax, 0x2BADB002
mov ecx, sz_invboot
jne .fault
 
bt dword [ebx], 3
mov ecx, sz_nomods
jnc .fault
 
bt dword [ebx], 6
mov ecx, sz_nommap
jnc .fault
 
mov [_boot_mbi-OS_BASE], ebx
 
xor eax, eax
cpuid
cmp eax, 0
mov ecx, sz_nopse
jbe .fault
 
mov eax, 1
cpuid
bt edx, 3
mov ecx, sz_nopse
jnc .fault
 
; ENABLE PAGING
 
mov ecx, 32
mov edi, _sys_pdbr+(OS_BASE shr 20)-OS_BASE
mov eax, PG_LARGE+PG_SW
@@:
stosd
add eax, 4*1024*1024
loop @B
 
mov dword [_sys_pdbr-OS_BASE], PG_LARGE+PG_SW
mov dword [_sys_pdbr-OS_BASE+4], PG_LARGE+PG_SW+4*1024*1024
mov dword [_sys_pdbr-OS_BASE+(page_tabs shr 20)], _sys_pdbr+PG_SW-OS_BASE
 
mov ebx, cr4
or ebx, CR4_PSE
and ebx, not CR4_PAE
mov cr4, ebx
 
mov eax, _sys_pdbr-OS_BASE
mov ebx, cr0
or ebx,CR0_PG+CR0_WP
 
mov cr3, eax
mov cr0, ebx
 
mov ebx, [_boot_mbi]
 
mov edx, [ebx+20]
mov esi, [ebx+24]
mov ecx, LAST_PAGE
test edx, edx
jz .no_mods
.scan_mod:
mov ecx, [esi+4]
add esi, 16
dec edx
jnz .scan_mod
 
.no_mods:
add ecx, 4095
and ecx, not 4095
 
lgdt [gdts]
jmp pword os_code:high_code
 
 
.fault:
; push ecx
; call _lcls
; call __bprintf
_hlt:
hlt
jmp _hlt
 
sz_invboot db 'Invalid multiboot loader magic value',0x0A
db 'Halted',0
 
sz_nomods db 'No modules loaded',0x0A
db 'Halted',0
 
sz_nommap db 'No memory table', 0x0A
db 'Halted',0
 
sz_nopse db 'Page size extensions not supported',0x0A
db 'Halted',0
 
org $-0x100000
 
align 4
 
_enter_bootscreen:
 
use16
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 "boot/bootstr.inc" ; language-independent boot messages
include "boot/preboot.inc"
 
if lang eq en
include "boot/booteng.inc" ; english 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/bootge.inc" ; german system boot messages
end if
 
include "data16.inc"
 
include "boot/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, 0x80000001
mov cr0, eax
 
jmp pword os_code:__setvars
 
org $+0x100000
 
align 4
_leave_bootscreen:
 
use32
 
 
341,8 → 192,6
__DEBUG_LEVEL__ fix 1
 
 
org OS_BASE+$
 
MEM_WB equ 6 ;write-back memory
MEM_WC equ 1 ;write combined memory
MEM_UC equ 0 ;uncached memory
453,7 → 302,7
endp
 
align 4
high_code:
_high_code:
mov ax,os_stack
mov dx,app_data
mov ss,ax
464,10 → 313,9
mov fs, dx
mov gs, dx
 
push ecx
push ebx
; push ecx
; push ebx
 
; mov dword [sys_pgdir-OS_BASE+(page_tabs shr 20)], sys_pgdir+PG_SW-OS_BASE
 
; bt [cpu_caps], CAPS_PGE
; jnc @F
478,10 → 326,6
; or ebx, CR4_PGE
; mov cr4, ebx
@@:
; xor eax, eax
; mov dword [sys_pgdir], eax
; mov dword [sys_pgdir+4], eax
 
; mov eax, cr3
; mov cr3, eax ; flush TLB
 
528,13 → 372,14
call _init_mm
mov [pg_data.pg_mutex], 0
 
mov esi, 0x100000
mov ecx, (_leave_bootscreen-0x100000)/4
mov edi, 0x10000
mov esi, _enter_bootscreen
mov ecx, _leave_bootscreen
shr ecx, 2
mov edi, BOOT_BASE
cld
rep movsd
 
jmp far 0x60:_enter_bootscreen;
jmp far 0x60:0x00000;
 
align 4
__setvars:
589,7 → 434,7
mov [dword apm_data_16 + 4], dl
 
mov dword[apm_entry], ebx
mov word [apm_entry + 4], apm_code_32 - gdts
mov word [apm_entry + 4], apm_code_32 - _gdts
 
mov eax, [BOOT_VAR + 0x9044] ; version & flags
mov [apm_vf], eax
804,6 → 649,8
include 'detect/disks.inc'
;!!!!!!!!!!!!!!!!!!!!!!!!!!
 
xchg bx, bx
 
call Parser_params
 
; READ RAMDISK IMAGE FROM HD