forked from KolibriOS/kolibrios
splitting kernel into sections
git-svn-id: svn://kolibrios.org@851 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
bdd8453ba4
commit
4637e1f6a3
BIN
kernel/branches/kolibri_pe/boot/boot
Normal file
BIN
kernel/branches/kolibri_pe/boot/boot
Normal file
Binary file not shown.
69
kernel/branches/kolibri_pe/boot/boot.asm
Normal file
69
kernel/branches/kolibri_pe/boot/boot.asm
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
|
||||||
|
format MS COFF
|
||||||
|
|
||||||
|
|
||||||
|
include '../macros.inc'
|
||||||
|
|
||||||
|
$Revision: 849 $
|
||||||
|
|
||||||
|
__REV__ = __REV
|
||||||
|
|
||||||
|
include "../proc32.inc"
|
||||||
|
include "../kglobals.inc"
|
||||||
|
include "../lang.inc"
|
||||||
|
|
||||||
|
public _enter_bootscreen
|
||||||
|
public _leave_bootscreen
|
||||||
|
|
||||||
|
public _bx_from_load
|
||||||
|
|
||||||
|
extrn __setvars
|
||||||
|
|
||||||
|
section '.boot' code readable align 16
|
||||||
|
|
||||||
|
|
||||||
|
_enter_bootscreen:
|
||||||
|
|
||||||
|
org 0
|
||||||
|
|
||||||
|
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 "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, 0x80000001
|
||||||
|
mov cr0, eax
|
||||||
|
|
||||||
|
jmp pword 0x08:__setvars
|
||||||
|
|
||||||
|
align 4
|
||||||
|
_leave_bootscreen:
|
@ -32,9 +32,9 @@ putchar:
|
|||||||
print:
|
print:
|
||||||
; in: si->string
|
; in: si->string
|
||||||
mov al, 186
|
mov al, 186
|
||||||
call putchar
|
call word putchar
|
||||||
mov al, ' '
|
mov al, ' '
|
||||||
call putchar
|
call word putchar
|
||||||
|
|
||||||
printplain:
|
printplain:
|
||||||
; in: si->string
|
; in: si->string
|
||||||
|
135
kernel/branches/kolibri_pe/boot/init.asm
Normal file
135
kernel/branches/kolibri_pe/boot/init.asm
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
|
||||||
|
format MS COFF
|
||||||
|
|
||||||
|
include '../macros.inc'
|
||||||
|
|
||||||
|
$Revision: 849 $
|
||||||
|
|
||||||
|
include "../const.inc"
|
||||||
|
|
||||||
|
public __start
|
||||||
|
|
||||||
|
extrn _high_code
|
||||||
|
extrn __os_stack
|
||||||
|
extrn _boot_mbi
|
||||||
|
extrn _sys_pdbr
|
||||||
|
|
||||||
|
extrn _gdts
|
||||||
|
extrn __edata
|
||||||
|
|
||||||
|
section '.init' code readable align 16
|
||||||
|
|
||||||
|
use32
|
||||||
|
|
||||||
|
align 4
|
||||||
|
|
||||||
|
mboot:
|
||||||
|
dd 0x1BADB002
|
||||||
|
dd 0x00010003
|
||||||
|
dd -(0x1BADB002 + 0x00010003)
|
||||||
|
dd mboot
|
||||||
|
dd 0x100000
|
||||||
|
dd __edata; - OS_BASE
|
||||||
|
dd LAST_PAGE
|
||||||
|
dd __start
|
||||||
|
|
||||||
|
align 16
|
||||||
|
__start:
|
||||||
|
cld
|
||||||
|
|
||||||
|
mov esp, __os_stack +(0x100000000-OS_BASE)
|
||||||
|
push 0
|
||||||
|
popf
|
||||||
|
|
||||||
|
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+(0x100000000-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)+(0x100000000-OS_BASE)
|
||||||
|
mov eax, PG_LARGE+PG_SW
|
||||||
|
@@:
|
||||||
|
stosd
|
||||||
|
add eax, 4*1024*1024
|
||||||
|
loop @B
|
||||||
|
|
||||||
|
mov dword [_sys_pdbr+(0x100000000-OS_BASE)], PG_LARGE+PG_SW
|
||||||
|
mov dword [_sys_pdbr+(0x100000000-OS_BASE)+4], PG_LARGE+PG_SW+4*1024*1024
|
||||||
|
mov dword [_sys_pdbr+(0x100000000-OS_BASE)+(page_tabs shr 20)], _sys_pdbr+PG_SW+(0x100000000-OS_BASE)
|
||||||
|
|
||||||
|
mov ebx, cr4
|
||||||
|
or ebx, CR4_PSE
|
||||||
|
and ebx, not CR4_PAE
|
||||||
|
mov cr4, ebx
|
||||||
|
|
||||||
|
mov eax, _sys_pdbr+(0x100000000-OS_BASE)
|
||||||
|
mov ebx, cr0
|
||||||
|
or ebx,CR0_PG+CR0_WP
|
||||||
|
|
||||||
|
mov cr3, eax
|
||||||
|
mov cr0, ebx
|
||||||
|
|
||||||
|
mov ebx, [_boot_mbi+(0x100000000-OS_BASE)]
|
||||||
|
|
||||||
|
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+(0x100000000-OS_BASE)]
|
||||||
|
jmp pword 0x08:_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
|
@ -198,6 +198,7 @@ OS_TEMP equ 0xDFC00000
|
|||||||
kernel_tabs equ (page_tabs+ (OS_BASE shr 10)) ;0xFDE00000
|
kernel_tabs equ (page_tabs+ (OS_BASE shr 10)) ;0xFDE00000
|
||||||
master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000
|
master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000
|
||||||
|
|
||||||
|
BOOT_BASE equ 0x00010000
|
||||||
LOAD_BASE equ 0x00100000
|
LOAD_BASE equ 0x00100000
|
||||||
OS_BASE equ 0xE0000000
|
OS_BASE equ 0xE0000000
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ 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]
|
_bx_from_load: dw 'r1' ; структура для хранения параметров- откуда гашрузились, берется ниже из bx ; {SPraid}[13.03.2007]
|
||||||
; a,b,c,d - גטםקוסעונ<EFBFBD>, r - נאל הטסך
|
; a,b,c,d - גטםקוסעונ<EFBFBD>, r - נאל הטסך
|
||||||
; # הטסךא... סטלגמכ, א םו באיע. '1', א םו 1
|
; # הטסךא... סטלגמכ, א םו באיע. '1', א םו 1
|
||||||
|
|
||||||
|
@ -171,10 +171,10 @@ end if
|
|||||||
IncludeIGlobals
|
IncludeIGlobals
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
gdts:
|
_gdts:
|
||||||
|
|
||||||
dw gdte-$-1
|
dw 0x67; gdte-$-1
|
||||||
dd gdts
|
dd _gdts
|
||||||
dw 0
|
dw 0
|
||||||
|
|
||||||
; Attention! Do not change the order of the first four selectors. They are used in Fast System Call
|
; Attention! Do not change the order of the first four selectors. They are used in Fast System Call
|
||||||
|
@ -40,7 +40,7 @@ proc Parser_params
|
|||||||
locals
|
locals
|
||||||
buff db 4 dup(?) ; for test cd
|
buff db 4 dup(?) ; for test cd
|
||||||
endl
|
endl
|
||||||
mov eax,[bx_from_load+OS_BASE+LOAD_BASE]
|
mov eax,[_bx_from_load+OS_BASE+BOOT_BASE]
|
||||||
mov ecx,sysdir_path
|
mov ecx,sysdir_path
|
||||||
mov [ecx-64],dword 'sys'
|
mov [ecx-64],dword 'sys'
|
||||||
cmp al,'r' ; if ram disk
|
cmp al,'r' ; if ram disk
|
||||||
|
@ -74,14 +74,14 @@ max_processes equ 255
|
|||||||
tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
|
tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
|
||||||
|
|
||||||
|
|
||||||
os_stack equ (os_data_l-gdts) ; GDTs
|
os_stack equ (os_data_l-_gdts) ; GDTs
|
||||||
os_code equ (os_code_l-gdts)
|
os_code equ (os_code_l-_gdts)
|
||||||
graph_data equ (3+graph_data_l-gdts)
|
graph_data equ (3+graph_data_l-_gdts)
|
||||||
tss0 equ (tss0_l-gdts)
|
tss0 equ (tss0_l-_gdts)
|
||||||
app_code equ (3+app_code_l-gdts)
|
app_code equ (3+app_code_l-_gdts)
|
||||||
app_data equ (3+app_data_l-gdts)
|
app_data equ (3+app_data_l-_gdts)
|
||||||
pci_code_sel equ (pci_code_32-gdts)
|
pci_code_sel equ (pci_code_32-_gdts)
|
||||||
pci_data_sel equ (pci_data_32-gdts)
|
pci_data_sel equ (pci_data_32-_gdts)
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@ -107,178 +107,29 @@ pci_data_sel equ (pci_data_32-gdts)
|
|||||||
;;
|
;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
public __os_stack
|
||||||
|
public _boot_mbi
|
||||||
|
public _sys_pdbr
|
||||||
|
public _gdts
|
||||||
|
public _high_code
|
||||||
|
|
||||||
|
public __setvars
|
||||||
|
|
||||||
|
extrn _enter_bootscreen
|
||||||
|
extrn _leave_bootscreen
|
||||||
|
|
||||||
|
extrn _bx_from_load
|
||||||
|
|
||||||
section '.flat' code readable align 16
|
section '.flat' code readable align 16
|
||||||
|
|
||||||
public __start
|
|
||||||
|
|
||||||
extrn __edata
|
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0x001001E0
|
|
||||||
|
org 0xE0102000
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
mboot:
|
|
||||||
dd 0x1BADB002
|
|
||||||
dd 0x00010003
|
|
||||||
dd -(0x1BADB002 + 0x00010003)
|
|
||||||
dd mboot
|
|
||||||
dd 0x100000
|
|
||||||
dd __edata; ;__edata - OS_BASE
|
|
||||||
dd LAST_PAGE
|
|
||||||
dd __start
|
|
||||||
|
|
||||||
align 16
|
|
||||||
__start:
|
|
||||||
cld
|
|
||||||
|
|
||||||
mov esp, __os_stack-OS_BASE
|
|
||||||
push 0
|
|
||||||
popf
|
|
||||||
|
|
||||||
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
|
use32
|
||||||
|
|
||||||
|
|
||||||
@ -341,8 +192,6 @@ __DEBUG__ fix 1
|
|||||||
__DEBUG_LEVEL__ fix 1
|
__DEBUG_LEVEL__ fix 1
|
||||||
|
|
||||||
|
|
||||||
org OS_BASE+$
|
|
||||||
|
|
||||||
MEM_WB equ 6 ;write-back memory
|
MEM_WB equ 6 ;write-back memory
|
||||||
MEM_WC equ 1 ;write combined memory
|
MEM_WC equ 1 ;write combined memory
|
||||||
MEM_UC equ 0 ;uncached memory
|
MEM_UC equ 0 ;uncached memory
|
||||||
@ -453,7 +302,7 @@ proc test_cpu
|
|||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
high_code:
|
_high_code:
|
||||||
mov ax,os_stack
|
mov ax,os_stack
|
||||||
mov dx,app_data
|
mov dx,app_data
|
||||||
mov ss,ax
|
mov ss,ax
|
||||||
@ -464,10 +313,9 @@ high_code:
|
|||||||
mov fs, dx
|
mov fs, dx
|
||||||
mov gs, dx
|
mov gs, dx
|
||||||
|
|
||||||
push ecx
|
; push ecx
|
||||||
push ebx
|
; push ebx
|
||||||
|
|
||||||
; mov dword [sys_pgdir-OS_BASE+(page_tabs shr 20)], sys_pgdir+PG_SW-OS_BASE
|
|
||||||
|
|
||||||
; bt [cpu_caps], CAPS_PGE
|
; bt [cpu_caps], CAPS_PGE
|
||||||
; jnc @F
|
; jnc @F
|
||||||
@ -478,10 +326,6 @@ high_code:
|
|||||||
; or ebx, CR4_PGE
|
; or ebx, CR4_PGE
|
||||||
; mov cr4, ebx
|
; mov cr4, ebx
|
||||||
@@:
|
@@:
|
||||||
; xor eax, eax
|
|
||||||
; mov dword [sys_pgdir], eax
|
|
||||||
; mov dword [sys_pgdir+4], eax
|
|
||||||
|
|
||||||
; mov eax, cr3
|
; mov eax, cr3
|
||||||
; mov cr3, eax ; flush TLB
|
; mov cr3, eax ; flush TLB
|
||||||
|
|
||||||
@ -528,13 +372,14 @@ high_code:
|
|||||||
call _init_mm
|
call _init_mm
|
||||||
mov [pg_data.pg_mutex], 0
|
mov [pg_data.pg_mutex], 0
|
||||||
|
|
||||||
mov esi, 0x100000
|
mov esi, _enter_bootscreen
|
||||||
mov ecx, (_leave_bootscreen-0x100000)/4
|
mov ecx, _leave_bootscreen
|
||||||
mov edi, 0x10000
|
shr ecx, 2
|
||||||
|
mov edi, BOOT_BASE
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
|
|
||||||
jmp far 0x60:_enter_bootscreen;
|
jmp far 0x60:0x00000;
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
__setvars:
|
__setvars:
|
||||||
@ -589,7 +434,7 @@ __setvars:
|
|||||||
mov [dword apm_data_16 + 4], dl
|
mov [dword apm_data_16 + 4], dl
|
||||||
|
|
||||||
mov dword[apm_entry], ebx
|
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 eax, [BOOT_VAR + 0x9044] ; version & flags
|
||||||
mov [apm_vf], eax
|
mov [apm_vf], eax
|
||||||
@ -804,6 +649,8 @@ __setvars:
|
|||||||
include 'detect/disks.inc'
|
include 'detect/disks.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
xchg bx, bx
|
||||||
|
|
||||||
call Parser_params
|
call Parser_params
|
||||||
|
|
||||||
; READ RAMDISK IMAGE FROM HD
|
; READ RAMDISK IMAGE FROM HD
|
||||||
|
@ -9,7 +9,14 @@ SECTIONS
|
|||||||
. = SIZEOF_HEADERS;
|
. = SIZEOF_HEADERS;
|
||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
|
|
||||||
.flat . + __image_base__ :
|
.boot . + __image_base__ :
|
||||||
|
{
|
||||||
|
*(.boot)
|
||||||
|
*(.init)
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
||||||
|
|
||||||
|
.flat :
|
||||||
{
|
{
|
||||||
*(.flat)
|
*(.flat)
|
||||||
}
|
}
|
||||||
|
@ -1,48 +1,37 @@
|
|||||||
FASM=fasm
|
|
||||||
FLAGS=-m 65536
|
CC = gcc
|
||||||
languages=en|ru|ge|et
|
FASM = fasm.exe
|
||||||
drivers_src=sound sis infinity ensoniq ps2mouse uart ati2d vmode
|
|
||||||
skins_src=default
|
INCLUDE = include
|
||||||
|
|
||||||
.PHONY: all kernel drivers skins clean
|
CFLAGS = -c -O2 -I $(INCLUDE) -fomit-frame-pointer -fno-builtin-printf -masm=intel
|
||||||
|
LDFLAGS = -shared -s -Map kernel.map --image-base 0x100000 --file-alignment 32
|
||||||
all: kernel drivers skins
|
|
||||||
|
|
||||||
kernel: check_lang
|
KERNEL_SRC:= \
|
||||||
@echo "*** building kernel with language '$(lang)' ..."
|
kernel.asm \
|
||||||
@mkdir -p bin
|
boot/boot.asm \
|
||||||
@echo "lang fix $(lang)" > lang.inc
|
boot/init.asm
|
||||||
@echo "--- building 'bin/kernel.mnt' ..."
|
|
||||||
@$(FASM) $(FLAGS) kernel.asm bin/kernel.mnt
|
|
||||||
@rm -f lang.inc
|
KERNEL_OBJS = $(patsubst %.s, bin/%.obj, $(patsubst %.asm, bin/%.obj,\
|
||||||
|
$(patsubst %.c, bin/%.obj, $(KERNEL_SRC))))
|
||||||
drivers:
|
|
||||||
@echo "*** building drivers ..."
|
|
||||||
@mkdir -p bin/drivers
|
all: kernel.gz
|
||||||
@cd drivers; for f in $(drivers_src); do \
|
|
||||||
echo "--- building 'bin/drivers/$${f}.obj' ..."; \
|
kernel.gz :kernel.mnt
|
||||||
$(FASM) $(FLAGS) $${f}.asm ../bin/drivers/$${f}.obj; \
|
7z a -tgzip kernel.gz kernel.mnt
|
||||||
done
|
|
||||||
@mv bin/drivers/vmode.obj bin/drivers/vmode.mdr
|
kernel.mnt: $(KERNEL_OBJS) Makefile ld.x
|
||||||
|
ld $(LDFLAGS) -T ld.x -o $@ $(KERNEL_OBJS)
|
||||||
skins:
|
|
||||||
@echo "*** building skins ..."
|
bin/%.obj: %.asm
|
||||||
@mkdir -p bin/skins
|
$(FASM) $< $@
|
||||||
@cd skin; for f in $(skins_src); do \
|
|
||||||
echo "--- building 'bin/skins/$${f}.skn' ..."; \
|
bin/%.obj : core/%.c
|
||||||
$(FASM) $(FLAGS) $${f}.asm ../bin/skins/$${f}.skn; \
|
$(CC) $(CFLAGS) -o $@ -c $<
|
||||||
done
|
|
||||||
|
all: $(SUBDIRS)
|
||||||
check_lang:
|
|
||||||
@case "$(lang)" in \
|
.PHONY: all
|
||||||
$(languages)) \
|
|
||||||
;; \
|
|
||||||
*) \
|
|
||||||
echo "*** error: language is incorrect or not specified"; \
|
|
||||||
exit 1; \
|
|
||||||
;; \
|
|
||||||
esac
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf bin
|
|
||||||
rm -f lang.inc
|
|
||||||
|
Loading…
Reference in New Issue
Block a user