/kernel/branches/kolibri_pe/boot/boot |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/kernel/branches/kolibri_pe/boot/boot.asm |
---|
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: |
/kernel/branches/kolibri_pe/boot/bootcode.inc |
---|
32,9 → 32,9 |
print: |
; in: si->string |
mov al, 186 |
call putchar |
call word putchar |
mov al, ' ' |
call putchar |
call word putchar |
printplain: |
; in: si->string |
/kernel/branches/kolibri_pe/boot/init.asm |
---|
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 |
/kernel/branches/kolibri_pe/const.inc |
---|
198,6 → 198,7 |
kernel_tabs equ (page_tabs+ (OS_BASE shr 10)) ;0xFDE00000 |
master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000 |
BOOT_BASE equ 0x00010000 |
LOAD_BASE equ 0x00100000 |
OS_BASE equ 0xE0000000 |
/kernel/branches/kolibri_pe/data16.inc |
---|
12,7 → 12,7 |
preboot_lfb db 0 |
preboot_bootlog 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 - âèí÷åñòåðû, r - ðàì äèñê |
; # äèñêà... ñèìâîë, à íå áàéò. '1', à íå 1 |
/kernel/branches/kolibri_pe/data32.inc |
---|
171,10 → 171,10 |
IncludeIGlobals |
align 16 |
gdts: |
_gdts: |
dw gdte-$-1 |
dd gdts |
dw 0x67; gdte-$-1 |
dd _gdts |
dw 0 |
; Attention! Do not change the order of the first four selectors. They are used in Fast System Call |
/kernel/branches/kolibri_pe/fs/parse_fn.inc |
---|
40,7 → 40,7 |
locals |
buff db 4 dup(?) ; for test cd |
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-64],dword 'sys' |
cmp al,'r' ; if ram disk |
/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 |
/kernel/branches/kolibri_pe/ld.x |
---|
9,8 → 9,15 |
. = SIZEOF_HEADERS; |
. = ALIGN(32); |
.flat . + __image_base__ : |
.boot . + __image_base__ : |
{ |
*(.boot) |
*(.init) |
. = ALIGN(4096); |
} |
.flat : |
{ |
*(.flat) |
} |
__edata = .; |
/kernel/branches/kolibri_pe/makefile |
---|
1,48 → 1,37 |
FASM=fasm |
FLAGS=-m 65536 |
languages=en|ru|ge|et |
drivers_src=sound sis infinity ensoniq ps2mouse uart ati2d vmode |
skins_src=default |
.PHONY: all kernel drivers skins clean |
CC = gcc |
FASM = fasm.exe |
all: kernel drivers skins |
INCLUDE = include |
kernel: check_lang |
@echo "*** building kernel with language '$(lang)' ..." |
@mkdir -p bin |
@echo "lang fix $(lang)" > lang.inc |
@echo "--- building 'bin/kernel.mnt' ..." |
@$(FASM) $(FLAGS) kernel.asm bin/kernel.mnt |
@rm -f lang.inc |
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 |
drivers: |
@echo "*** building drivers ..." |
@mkdir -p bin/drivers |
@cd drivers; for f in $(drivers_src); do \ |
echo "--- building 'bin/drivers/$${f}.obj' ..."; \ |
$(FASM) $(FLAGS) $${f}.asm ../bin/drivers/$${f}.obj; \ |
done |
@mv bin/drivers/vmode.obj bin/drivers/vmode.mdr |
skins: |
@echo "*** building skins ..." |
@mkdir -p bin/skins |
@cd skin; for f in $(skins_src); do \ |
echo "--- building 'bin/skins/$${f}.skn' ..."; \ |
$(FASM) $(FLAGS) $${f}.asm ../bin/skins/$${f}.skn; \ |
done |
KERNEL_SRC:= \ |
kernel.asm \ |
boot/boot.asm \ |
boot/init.asm |
check_lang: |
@case "$(lang)" in \ |
$(languages)) \ |
;; \ |
*) \ |
echo "*** error: language is incorrect or not specified"; \ |
exit 1; \ |
;; \ |
esac |
clean: |
rm -rf bin |
rm -f lang.inc |
KERNEL_OBJS = $(patsubst %.s, bin/%.obj, $(patsubst %.asm, bin/%.obj,\ |
$(patsubst %.c, bin/%.obj, $(KERNEL_SRC)))) |
all: kernel.gz |
kernel.gz :kernel.mnt |
7z a -tgzip kernel.gz kernel.mnt |
kernel.mnt: $(KERNEL_OBJS) Makefile ld.x |
ld $(LDFLAGS) -T ld.x -o $@ $(KERNEL_OBJS) |
bin/%.obj: %.asm |
$(FASM) $< $@ |
bin/%.obj : core/%.c |
$(CC) $(CFLAGS) -o $@ -c $< |
all: $(SUBDIRS) |
.PHONY: all |