/kernel/branches/kolibri-process/boot/bootcode.inc |
---|
159,7 → 159,7 |
; |
;========================================================================= |
include 'bootvesa.inc' ;Include source for boot vesa |
include 'bootvesa.inc' ;Include source for boot vesa |
if defined extended_primary_loader |
include 'parsers.inc' |
end if |
649,7 → 649,7 |
cmp byte [di+preboot_dma-preboot_device], 1 |
adc byte [di+preboot_dma-preboot_device], 0 |
cmp byte [di+preboot_launcher-preboot_device], 1 ; Start LAUNCHER by default |
adc byte [di+preboot_launcher-preboot_device], 0 |
adc byte [di+preboot_launcher-preboot_device], 0 |
; cmp byte [di+preboot_biosdisk-preboot_device], 1 |
; adc byte [di+preboot_biosdisk-preboot_device], 0 |
;; default value for VRR is OFF |
793,7 → 793,7 |
_ask_question bdev,'12',preboot_device ; range accepted for answer: 1-2 |
else |
_ask_question bdev,'14',preboot_device ; range accepted for answer: 1-4 |
end if |
end if |
_setcursor 14,0 |
.d: |
891,7 → 891,7 |
push word [es:bp+6] |
pop word [number_vm] |
mov word [preboot_graph], bp ;save choose |
jmp .d |
.change_b: ; b) preboot_biosdisk = use BIOS disks through V86 emulation? |
1101,7 → 1101,7 |
; Start the first app (right now it's LAUNCHER) after kernel is loaded? |
mov al, [preboot_launcher] |
mov [es:BOOT_LAUNCHER_START], al ;// 0x901D |
mov [es:BOOT_LAUNCHER_START], al ;// 0x901D |
; BOOT DEVICE |
1148,7 → 1148,7 |
; TODO: !!!! read only first sector and set variables !!!!! |
; ... |
; TODO: !!! then read flippy image track by track |
mov cx, 0x0001 ; startcyl,startsector |
.a1: |
push cx dx |
1240,7 → 1240,7 |
; and copy them to extended memory |
mov si, movedesc |
mov [si+8*2+3], bh ; from |
mov ax, word [BPB_BytsPerSec] |
shr ax, 1 ; words per sector |
mov cx, word [BPB_RsvdSecCnt] |
1248,7 → 1248,7 |
mul cx |
push ax ; save to stack count of words in boot+FAT |
xchg ax, cx |
push es |
push ds |
pop es |
1274,7 → 1274,7 |
; TODO: BPB_NumFATs !!!!! |
add bx, word [BPB_BytsPerSec] ; !!! TODO: may be need multiply by BPB_RsvdSecCnt !!! |
mov byte [si+8*2+3], bh ; bx - begin of FAT |
mov ax, word [BPB_BytsPerSec] |
shr ax, 1 ; words per sector |
mov cx, word [BPB_FATSz16] |
1289,12 → 1289,12 |
pop es |
test ah, ah |
jnz sayerr_floppy |
mov ax, cx |
shl ax, 1 |
and eax, 0ffffh ; ax - count of bytes in FAT |
add dword [si+8*3+2], eax |
; reading RootDir |
; TODO: BPB_NumFATs |
add bx, ax |
1319,7 → 1319,7 |
pop bx |
push bx |
add word [FirstDataSector], bx ; Begin of data region of floppy |
; read RootDir |
call conv_abs_to_THS |
pop ax |
1518,3 → 1518,29 |
gmok2: |
push ds |
pop es |
sidt [cs:old_ints_h] |
cli ; disable all irqs |
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 |
/kernel/branches/kolibri-process/core/heap.inc |
---|
558,7 → 558,7 |
restore block_size |
restore block_flags |
;;;;;;;;;;;;;; USER ;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;; USER HEAP ;;;;;;;;;;;;;;;;; |
HEAP_TOP equ 0x80000000 |
573,6 → 573,9 |
sub eax, PAGE_SIZE |
ret |
@@: |
lea ecx, [ebx+PROC.heap_lock] |
call mutex_init |
mov esi, [ebx+PROC.mem_used] |
add esi, 4095 |
and esi, not 4095 |
597,11 → 600,14 |
push esi |
push edi |
mov ebx, [current_process] |
lea ecx, [ebx+PROC.heap_lock] |
call mutex_lock |
mov ecx, [alloc_size] |
add ecx, (4095+PAGE_SIZE) |
and ecx, not 4095 |
mov ebx, [current_process] |
mov esi, dword [ebx+PROC.heap_base] ; heap_base |
mov edi, dword [ebx+PROC.heap_top] ; heap_top |
.scan: |
643,6 → 649,9 |
and ebx, not 0xFFF |
add [edx+PROC.mem_used], ebx |
lea ecx, [edx+PROC.heap_lock] |
call mutex_unlock |
lea eax, [esi+4096] |
pop edi |
658,6 → 667,10 |
add esi, eax |
jmp .scan |
.m_exit: |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_unlock |
xor eax, eax |
pop edi |
pop esi |
673,6 → 686,8 |
push edi |
mov ebx, [current_process] |
lea ecx, [ebx+PROC.heap_lock] |
call mutex_lock |
mov edx, [address] |
and edx, not 0xFFF |
697,6 → 712,10 |
mov esi, ecx |
jmp .scan |
.error: |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_unlock |
xor eax, eax |
pop edi |
pop esi |
754,6 → 773,9 |
and ebx, not 0xFFF |
add [edx+PROC.mem_used], ebx |
lea ecx, [edx+PROC.heap_lock] |
call mutex_unlock |
mov eax, [address] |
pop edi |
769,10 → 791,14 |
mov esi, [base] |
test esi, esi |
jz .exit |
jz .fail |
push ebx |
mov ebx, [current_process] |
lea ecx, [ebx+PROC.heap_lock] |
call mutex_lock |
xor ebx, ebx |
shr esi, 12 |
mov eax, [page_tabs+(esi-1)*4] |
809,6 → 835,7 |
push edi |
mov edx, [current_process] |
lea ecx, [edx+PROC.heap_lock] |
mov esi, dword [edx+PROC.heap_base] |
mov edi, dword [edx+PROC.heap_top] |
sub ebx, [edx+PROC.mem_used] |
816,17 → 843,21 |
mov [edx+PROC.mem_used], ebx |
call user_normalize |
pop edi |
pop ebx |
pop esi |
ret |
.exit: |
call mutex_unlock |
xor eax, eax |
inc eax |
pop ebx |
pop esi |
ret |
.cantfree: |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
jmp .exit |
.fail: |
xor eax, eax |
pop ebx |
inc eax |
pop esi |
ret |
endp |
955,6 → 986,13 |
ret |
@@: |
push ecx edx |
push eax |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_lock |
pop eax |
lea ecx, [eax - 0x1000] |
shr ecx, 12 |
mov edx, [page_tabs+ecx*4] |
962,6 → 1000,10 |
jnz @f |
; attempt to realloc invalid pointer |
.ret0: |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_unlock |
pop edx ecx |
xor eax, eax |
ret |
1051,8 → 1093,12 |
or ebx, FREE_BLOCK |
mov [page_tabs+ecx*4], ebx |
.ret: |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_unlock |
pop eax edx ecx |
ret |
.realloc_add: |
; get some additional memory |
mov eax, [current_process] |
1091,8 → 1137,13 |
mov edx, [current_process] |
shl ebx, 12 |
add [edx+PROC.mem_used], ebx |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_unlock |
pop eax edx ecx |
ret |
.cant_inplace: |
push esi edi |
mov eax, [current_process] |
1169,6 → 1220,10 |
inc esi |
dec ebx |
jnz @b |
mov ecx, [current_process] |
lea ecx, [ecx+PROC.heap_lock] |
call mutex_unlock |
pop eax edi esi edx ecx |
ret |
/kernel/branches/kolibri-process/kernel.asm |
---|
177,39 → 177,11 |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
cld |
; CR0 Flags - Protected mode and Paging |
mov ecx, CR0_PE |
; 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 |
mov ecx, CR0_PE ; CR0 Flags - Protected mode and Paging |
lgdt [cs:tmp_gdt] ; Load GDT |
mov eax, cr0 ; protected mode |
or eax, ecx |