/kernel/trunk/Makefile |
---|
4,16 → 4,25 |
.PHONY: all kernel bootloader clean |
all: kernel bootloader |
all: kernel bootloader bootbios |
kernel: check_lang |
kernel: check_lang bootbios |
@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 |
@$(FASM) $(FLAGS) -dUEFI=1 kernel.asm bin/kernel.bin |
@rm -f lang.inc |
bootbios: check_lang |
@echo "*** building bootbios.bin with language '$(lang)' ..." |
@mkdir -p bin |
@echo "lang fix $(lang)" > lang.inc |
@echo "--- building 'bootbios.bin' ..." |
@$(FASM) $(FLAGS) bootbios.asm bootbios.bin |
@rm -f lang.inc |
bootloader: check_lang |
@echo "*** building bootloader with language '$(lang)' ..." |
@mkdir -p bin |
/kernel/trunk/Tupfile.lua |
---|
1,3 → 1,5 |
if tup.getconfig("NO_FASM") ~= "" then return end |
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"}) |
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, "fasm -m 65536 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt") |
tup.rule({"bootbios.asm", extra_inputs = {"lang.inc"}}, "fasm %f %o ", "bootbios.bin") |
tup.rule({"kernel.asm", extra_inputs = {"bootbios.bin", "lang.inc"}}, "fasm -m 65536 %f %o " .. tup.getconfig("KERPACK_CMD"), "kernel.mnt") |
tup.rule({"kernel.asm", extra_inputs = {"lang.inc"}}, "fasm -m 65536 %f %o -dUEFI=1", "kernel.bin") |
/kernel/trunk/boot/bootcode.inc |
---|
274,6 → 274,8 |
pop ds |
else |
cld |
push 0 |
pop es |
; \begin{diamond}[02.12.2005] |
; if bootloader sets ax = 'KL', then ds:si points to loader block |
cmp ax, 'KL' |
280,16 → 282,18 |
jnz @f |
mov word [cs:cfgmanager.loader_block], si |
mov word [cs:cfgmanager.loader_block+2], ds |
mov word [es:BOOT_KERNEL_RESTART], kernel_restart_bootblock |
@@: |
; \end{diamond}[02.12.2005] |
; if bootloader sets cx = 'HA' and dx = 'RD', then bx contains identifier of source hard disk |
; (see comment to bx_from_load) |
; if bootloader sets cx = 'HA' and dx = 'RD', then bx contains identifier of source disk |
; (see comment to BOOT_BX_FROM_LOAD and loader_doc.txt) |
mov word [es:BOOT_BX_FROM_LOAD], 'r1' ; default value: /rd/1 |
cmp cx, 'HA' |
jnz no_hd_load |
cmp dx, 'RD' |
jnz no_hd_load |
mov word [cs:bx_from_load], bx ; {SPraid}[13.03.2007] |
mov [es:BOOT_BX_FROM_LOAD], bx |
no_hd_load: |
; set up stack |
966,7 → 970,7 |
mov al, [preboot_device] |
dec al |
mov [boot_dev], al |
mov [es:BOOT_DEV], al |
; GET MEMORY MAP |
include '../detect/biosmem.inc' |
973,7 → 977,7 |
; READ DISKETTE TO MEMORY |
cmp [boot_dev], 0 |
cmp byte [es:BOOT_DEV], 0 |
jne no_sys_on_floppy |
mov si, diskload |
call print |
1300,7 → 1304,7 |
out dx, al |
if defined extended_primary_loader |
cmp [boot_dev], 1 |
cmp [es:BOOT_DEV], 1 |
jne no_sys_from_primary |
; load kolibri.img using callback from primary loader |
and word [movedesc + 24 + 2], 0 |
/kernel/trunk/boot/bootstr.inc |
---|
31,18 → 31,9 |
} |
d80x25_top: |
line_full_top |
if __REV__ > 0 |
cur_line_pos = 75 |
store byte ' ' at d80x25_top+cur_line_pos+1 |
rev_var = __REV__ |
while rev_var > 0 |
store byte rev_var mod 10 + '0' at d80x25_top+cur_line_pos |
cur_line_pos = cur_line_pos - 1 |
rev_var = rev_var / 10 |
end while |
store byte ' ' at d80x25_top+cur_line_pos |
store dword ' SVN' at d80x25_top+cur_line_pos-4 |
end if |
cur_line_pos = 72 |
; this signature will be replaced with revision number (in kernel.asm) |
store dword '****' at d80x25_top + cur_line_pos |
space_msg: |
line_space |
/kernel/trunk/boot/preboot.inc |
---|
29,7 → 29,6 |
preboot_device db 0 ; boot device |
; (1-floppy 2-harddisk 3-kernel restart 4-format ram disk) |
;!!!! 0 - autodetect !!!! |
preboot_blogesc = 0 ; start immediately after bootlog |
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no) |
if defined extended_primary_loader |
preboot_timeout dw 5*18 ; timeout in 1/18th of second for config settings screen |
/kernel/trunk/boot/rdload.inc |
---|
11,7 → 11,7 |
read_ramdisk: |
; READ RAMDISK IMAGE FROM HD (only for IDE0, IDE1, IDE2, IDE3) |
cmp [boot_dev+OS_BASE+0x10000], 1 |
cmp byte [BOOT_DEV+OS_BASE+0x10000], 1 |
jne no_sys_on_hd.1 |
xor ebp, ebp |
112,7 → 112,7 |
DEBUGF 1, "K : RD not found\n" |
.1: |
; test_to_format_ram_disk (need if not using ram disk) |
cmp [boot_dev+OS_BASE+0x10000], 3 |
cmp byte [BOOT_DEV+OS_BASE+0x10000], 3 |
jne not_format_ram_disk |
; format_ram_disk |
mov edi, RAMDISK |
/kernel/trunk/boot/shutdown.inc |
---|
348,7 → 348,9 |
; bootloader interface |
push 0x1000 |
pop ds |
mov si, kernel_restart_bootblock |
push 0 |
pop es |
mov si, [es:BOOT_KERNEL_RESTART] |
mov ax, 'KL' |
jmp 0x1000:0000 |
/kernel/trunk/bootbios.asm |
---|
0,0 → 1,122 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; 16 BIT ENTRY FROM BOOTSECTOR ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
include 'macros.inc' |
include 'struct.inc' |
include 'encoding.inc' |
include 'const.inc' |
os_code = code_l - tmp_gdt |
use16 |
org 0x0 |
jmp start_of_code |
if lang eq sp |
include "kernelsp.inc" ; spanish kernel messages |
else if lang eq et |
version db 'Kolibri OS versioon 0.7.7.0+ ',13,10,13,10,0 |
else |
version db 'Kolibri OS version 0.7.7.0+ ',13,10,13,10,0 |
end if |
include "boot/bootstr.inc" ; language-independent boot messages |
include "boot/preboot.inc" |
if lang eq ge |
include "boot/bootge.inc" ; german system boot messages |
else if lang eq sp |
include "boot/bootsp.inc" ; spanish 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/booten.inc" ; english system boot messages |
end if |
include "boot/bootcode.inc" ; 16 bit system boot code |
include "bus/pci/pci16.inc" |
include "detect/biosdisk.inc" |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; SWITCH TO 32 BIT PROTECTED MODE ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; CR0 Flags - Protected mode and Paging |
mov ecx, CR0_PE+CR0_AM |
; Enabling 32 bit protected mode |
sidt [cs:old_ints_h] |
cli ; disable all irqs |
cld |
mov al, 255 ; mask all irqs |
out 0xa1, al |
out 0x21, al |
l.5: |
in al, 0x64 ; Enable A20 |
test al, 2 |
jnz l.5 |
mov al, 0xD1 |
out 0x64, al |
l.6: |
in al, 0x64 |
test al, 2 |
jnz l.6 |
mov al, 0xDF |
out 0x60, al |
l.7: |
in al, 0x64 |
test al, 2 |
jnz l.7 |
mov al, 0xFF |
out 0x64, al |
lgdt [cs:tmp_gdt] ; Load GDT |
mov eax, cr0 ; protected mode |
or eax, ecx |
and eax, 10011111b *65536*256 + 0xffffff ; caching enabled |
mov cr0, eax |
jmp pword os_code:B32 ; jmp to enable 32 bit mode |
align 8 |
tmp_gdt: |
dw 23 |
dd tmp_gdt+0x10000 |
dw 0 |
code_l: |
dw 0xffff |
dw 0x0000 |
db 0x00 |
dw 11011111b *256 +10011010b |
db 0x00 |
dw 0xffff |
dw 0x0000 |
db 0x00 |
dw 11011111b *256 +10010010b |
db 0x00 |
include "data16.inc" |
if ~ lang eq sp |
diff16 "end of bootcode",0,$+0x10000 |
end if |
use32 |
org $+0x10000 |
align 4 |
B32: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/kernel/trunk/build.bat |
---|
49,7 → 49,9 |
if not exist bin mkdir bin |
echo lang fix %lang% > lang.inc |
fasm -m 65536 bootbios.asm bootbios.bin |
fasm -m 65536 kernel.asm bin\kernel.mnt |
fasm -m 65536 kernel.asm bin\kernel.bin -dUEFI=1 |
if not %errorlevel%==0 goto :Error_FasmFailed |
erase lang.inc |
goto :eof |
/kernel/trunk/build.sh |
---|
6,6 → 6,8 |
KOLIBRI_IMG=$HOME/nightly/kolibri.img |
replace=0; # Replace kernel in the image file? |
echo 'lang fix en' > lang.inc |
fasm -m 65536 bootbios.asm bootbios.bin |
fasm -m 65536 kernel.asm kernel.mnt |
$KERPACK kernel.mnt kernel.mnt |
/kernel/trunk/const.inc |
---|
357,6 → 357,12 |
BOOT_APM_CODE_32 equ 0x9050 |
BOOT_APM_CODE_16 equ 0x9052 |
BOOT_APM_DATA_16 equ 0x9054 |
BOOT_DEV equ 0x9056 ; byte |
BOOT_KERNEL_RESTART equ 0x9058 ; word |
BOOT_BX_FROM_LOAD equ 0x905A ; word |
; low byte: a,b,c,d -- hdX, r -- rdX |
; high byte: symbol 'X' as in the line above, e.g. '1', not 1 |
; see loader_doc.txt for details |
BOOT_BIOS_HD_CNT equ 0x907F ; byte number of BIOS hard disks |
BOOT_BIOS_HD equ 0x9080 ; Nbytes BIOS hard disks |
/kernel/trunk/data16.inc |
---|
12,10 → 12,6 |
preboot_lfb db 0 |
preboot_bootlog db 0 |
boot_drive db 0 |
bx_from_load: |
dw 'r1' ; структура для хранения параметров- откуда гашрузились, берется ниже из bx ; {SPraid}[13.03.2007] |
; a,b,c,d - винчестеры, r - рам диск |
; # диска... символ, а не байт. '1', а не 1 |
align 4 |
old_ints_h: |
/kernel/trunk/fs/parse_fn.inc |
---|
28,7 → 28,7 |
locals |
buff rb 4 ; for test cd |
endl |
mov eax, [OS_BASE+0x10000+bx_from_load] |
mov ax, [OS_BASE+BOOT_BX_FROM_LOAD] |
mov ecx, sysdir_path |
mov [ecx-64], dword 'sys' |
mov [ecx-2], byte 3 |
/kernel/trunk/kernel.asm |
---|
131,116 → 131,40 |
;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; 16 BIT ENTRY FROM BOOTSECTOR ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
use16 |
org 0x0 |
jmp start_of_code |
if lang eq sp |
include "kernelsp.inc" ; spanish kernel messages |
else if lang eq et |
version db 'Kolibri OS versioon 0.7.7.0+ ',13,10,13,10,0 |
; In bios boot mode the kernel code below is appended to bootbios.bin file. |
; That is a loading and initialization code that also draws the blue screen |
; menu with svn revision number near top right corner of the screen. This fasm |
; preprocessor code searches for '****' signature inside bootbios.bin and |
; places revision number there. |
if ~ defined UEFI |
bootbios: |
file 'bootbios.bin' |
if __REV__ > 0 |
cur_pos = 0 |
cnt = 0 |
repeat $ - bootbios |
load a byte from % |
if a = '*' |
cnt = cnt + 1 |
else |
version db 'Kolibri OS version 0.7.7.0+ ',13,10,13,10,0 |
cnt = 0 |
end if |
include "boot/bootstr.inc" ; language-independent boot messages |
include "boot/preboot.inc" |
if lang eq ge |
include "boot/bootge.inc" ; german system boot messages |
else if lang eq sp |
include "boot/bootsp.inc" ; spanish 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/booten.inc" ; english system boot messages |
if cnt = 4 |
cur_pos = % - 1 |
break |
end if |
include "boot/bootcode.inc" ; 16 bit system boot code |
include "bus/pci/pci16.inc" |
include "detect/biosdisk.inc" |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; SWITCH TO 32 BIT PROTECTED MODE ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; CR0 Flags - Protected mode and Paging |
mov ecx, CR0_PE+CR0_AM |
; Enabling 32 bit protected mode |
sidt [cs:old_ints_h] |
cli ; disable all irqs |
cld |
mov al, 255 ; mask all irqs |
out 0xa1, al |
out 0x21, al |
l.5: |
in al, 0x64 ; Enable A20 |
test al, 2 |
jnz l.5 |
mov al, 0xD1 |
out 0x64, al |
l.6: |
in al, 0x64 |
test al, 2 |
jnz l.6 |
mov al, 0xDF |
out 0x60, al |
l.7: |
in al, 0x64 |
test al, 2 |
jnz l.7 |
mov al, 0xFF |
out 0x64, al |
lgdt [cs:tmp_gdt] ; Load GDT |
mov eax, cr0 ; protected mode |
or eax, ecx |
and eax, 10011111b *65536*256 + 0xffffff ; caching enabled |
mov cr0, eax |
jmp pword os_code:B32 ; jmp to enable 32 bit mode |
align 8 |
tmp_gdt: |
dw 23 |
dd tmp_gdt+0x10000 |
dw 0 |
dw 0xffff |
dw 0x0000 |
db 0x00 |
dw 11011111b *256 +10011010b |
db 0x00 |
dw 0xffff |
dw 0x0000 |
db 0x00 |
dw 11011111b *256 +10010010b |
db 0x00 |
include "data16.inc" |
if ~ lang eq sp |
diff16 "end of bootcode",0,$+0x10000 |
end repeat |
store byte ' ' at cur_pos + 1 |
rev_var = __REV__ |
while rev_var > 0 |
store byte rev_var mod 10 + '0' at cur_pos |
cur_pos = cur_pos - 1 |
rev_var = rev_var / 10 |
end while |
store byte ' ' at cur_pos |
store dword ' SVN' at cur_pos - 4 |
end if |
end if |
use32 |
org $+0x10000 |
770,7 → 694,7 |
call PIT_init |
; Register ramdisk file system |
cmp [boot_dev+OS_BASE+0x10000], 1 |
cmp byte [BOOT_DEV+OS_BASE+0x10000], 1 |
je @f |
call register_ramdisk |
861,7 → 785,7 |
include 'detect/init_ata.inc' |
;----------------------------------------------------------------------------- |
if 0 |
mov ax, [OS_BASE+0x10000+bx_from_load] |
mov ax, [OS_BASE+BOOT_BX_FROM_LOAD] |
cmp ax, 'r1'; if using not ram disk, then load librares and parameters {SPraid.simba} |
je no_lib_load |
1101,6 → 1025,7 |
first_app_found: |
; START MULTITASKING |
preboot_blogesc = 0 ; start immediately after bootlog |
; A 'All set - press ESC to start' messages if need |
if preboot_blogesc |