Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 837 → Rev 834

/kernel/trunk/boot/bootcode.inc
1135,31 → 1135,6
out dx, al
 
 
; GET SMAP
 
xor ebx, ebx
mov es, bx
 
mov edi, 0x9104
mov ecx, 20
mov edx, 0x534D4150
@@:
mov [es:0x9100], ebx
mov eax, 0xe820
int 0x15
 
jc .nosmap
cmp eax, 0x534D4150
jne .nosmap
 
test ebx, ebx
jz .nosmap
 
add edi, ecx
jmp @B
 
.nosmap:
 
; SET GRAPHICS
 
xor ax, ax
/kernel/trunk/boot/preboot.inc
23,13 → 23,13
number_vm dw 0 ;
;pixel_save dw 0 ; per to pixel
preboot_gprobe db 0 ; probe vesa3 videomodes (1-no, 2-yes)
preboot_vrrm db 2 ; use VRR_M (1-yes, 2- no)
preboot_vrrm db 0 ; use VRR_M (1-yes, 2- no)
preboot_dma db 0 ; use DMA for access to HDD (1-always, 2-only for read, 3-never)
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 2 ; use V86 to access disks through BIOS (1-yes, 2-no)
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
 
if $>0x200
ERROR: prebooting parameters must fit in first sector!!!
/kernel/trunk/core/heap.inc
209,39 → 209,6
.err:
xor edi, edi
ret
; param
; eax= required size
;
; retval
; edi= memory block descriptor
; ebx= descriptor index
align 4
get_large_block:
mov edx, -1
mov ecx, eax
shr ecx, 22
dec ecx
cmp ecx, 31
jle .get_index
mov ecx, 31
.get_index:
shl edx, cl
and edx, [large_block_mask]
.find:
bsf edi, edx
mov ebx, edi
mov edi, [large_block_list+edi*4]
.check_size:
cmp eax, [edi+block_size]
ja .next
ret
.next:
mov edi, [edi+list_fd]
test edi, edi
jnz .check_size
.fail:
xor edi, edi
ret
 
align 4
alloc_mem_block:
672,138 → 639,6
ret
endp
 
 
align 4
proc alloc_large stdcall, size:dword
local block_ind:DWORD
 
push ebx
push esi
push edi
 
mov eax, [size]
add eax, 0x3FFFFF
and eax, not 0x3FFFFF
mov [size], eax
 
; mov ebx, heap_mutex
; call wait_mutex ;ebx
 
; cmp eax, [heap_free]
; ja .error
 
call get_large_block ; eax
test edi, edi
jz .error
 
cmp [edi+block_flags], FREE_BLOCK
jne .error
 
mov [block_ind], ebx ;index of allocated block
 
mov eax, [edi+block_size]
cmp eax, [size]
je .m_eq_size
 
call alloc_mem_block
and eax, eax
jz .error
 
mov esi, eax ;esi - splitted block
 
mov [esi+block_next], edi
mov eax, [edi+block_prev]
mov [esi+block_prev], eax
mov [edi+block_prev], esi
mov [esi+list_fd], 0
mov [esi+list_bk], 0
test eax, eax
jz @f
mov [eax+block_next], esi
@@:
mov ebx, [edi+block_base]
mov [esi+block_base], ebx
mov edx, [size]
mov [esi+block_size], edx
add [edi+block_base], edx
sub [edi+block_size], edx
 
mov eax, [edi+block_size]
shr eax, 22
dec eax
cmp eax, 31
jna @f
mov eax, 31
@@:
cmp eax, [block_ind]
je .m_eq_ind
 
remove_from_list edi
 
mov ecx, [block_ind]
mov [large_block_list+ecx*4], edx
 
test edx, edx
jnz @f
btr [large_block_mask], ecx
@@:
mov edx, [large_block_list+eax*4]
mov [edi+list_fd], edx
test edx, edx
jz @f
mov [edx+list_bk], edi
@@:
mov [large_block_list+eax*4], edi
bts [large_block_mask], eax
.m_eq_ind:
mov ecx, mem_used.fd-MEM_LIST_OFFSET
mov edx, [ecx+list_fd]
mov [esi+list_fd], edx
mov [esi+list_bk], ecx
mov [ecx+list_fd], esi
mov [edx+list_bk], esi
 
mov [esi+block_flags], USED_BLOCK
mov eax, [esi+block_base]
mov ebx, [size]
sub [heap_free], ebx
and [heap_mutex], 0
pop edi
pop esi
pop ebx
ret
.m_eq_size:
remove_from_list edi
mov [large_block_list+ebx*4], edx
and edx, edx
jnz @f
btr [large_block_mask], ebx
@@:
mov ecx, mem_used.fd-MEM_LIST_OFFSET
mov edx, [ecx+list_fd]
mov [edi+list_fd], edx
mov [edi+list_bk], ecx
mov [ecx+list_fd], edi
mov [edx+list_bk], edi
 
mov [edi+block_flags], USED_BLOCK
mov eax, [edi+block_base]
mov ebx, [size]
sub [heap_free], ebx
and [heap_mutex], 0
pop edi
pop esi
pop ebx
ret
.error:
xor eax, eax
mov [heap_mutex], eax
pop edi
pop esi
pop ebx
ret
endp
 
restore block_next
restore block_prev
restore block_list
/kernel/trunk/core/memory.inc
241,9 → 241,7
@@:
xor eax, eax
xchg eax, [esi]
push eax
invlpg [edi]
pop eax
 
test eax, 1
jz .next
419,9 → 417,7
mov dword [app_page_tabs+edi*4], 2
mov ebx, edi
shl ebx, 12
push eax
invlpg [ebx]
pop eax
call free_page
 
.next: add edi, 1
563,8 → 559,13
 
inc [pg_data.pages_faults]
 
; xchg bx,bx
; jmp .exit
; push eax
; push edx
; mov edx, 0x400 ;bochs
; mov al,0xff ;bochs
; out dx, al ;bochs
; pop edx
; pop eax
 
mov ebx, [.err_addr]
mov eax, [.err_code]
/kernel/trunk/core/peload.inc
172,8 → 172,8
mov esi, DWORD PTR [__exports+28]
mov eax, DWORD PTR [esp+56]
mov DWORD PTR [esp+20], edi
add edi, OS_BASE
add esi, OS_BASE
sub edi, -2147483648
sub esi, -2147483648
mov DWORD PTR [esp+44], esi
mov ecx, DWORD PTR [eax-4]
mov DWORD PTR [esp+48], edi
200,7 → 200,7
movzx eax, WORD PTR [edi]
mov edx, DWORD PTR [esp+56]
mov eax, DWORD PTR [edx+eax*4]
add eax, OS_BASE
sub eax, -2147483648
push eax
push esi
call strncmp
213,8 → 213,8
push ecx
push 32
mov ecx, DWORD PTR [esp+28]
mov eax, DWORD PTR [ecx+OS_BASE+ebx*4]
add eax, OS_BASE
mov eax, DWORD PTR [ecx-2147483648+ebx*4]
sub eax, -2147483648
push eax
push esi
call strncmp
225,7 → 225,7
mov edx, DWORD PTR [esp+52]
mov ecx, DWORD PTR [esp+28]
mov eax, DWORD PTR [esi+ebx*4]
add eax, OS_BASE
sub eax, -2147483648
mov DWORD PTR [ecx+edx*4], eax
jmp L36
L34:
252,7 → 252,7
mov edi, DWORD PTR [esp+52]
mov edx, DWORD PTR [esp+28]
mov eax, DWORD PTR [esi+eax*4]
add eax, OS_BASE
sub eax, -2147483648
mov DWORD PTR [edx+edi*4], eax
L37:
inc DWORD PTR [esp+52]
/kernel/trunk/core/taskman.inc
396,7 → 396,7
cld
rep stosd
 
mov ecx, 1024-(OS_BASE shr 20)/4
mov ecx, (OS_BASE shr 20)/4
mov esi, sys_pgdir+(OS_BASE shr 20)
rep movsd
 
/kernel/trunk/kernel.asm
243,9 → 243,8
 
call init_BIOS32
; MEMORY MODEL
 
call mem_test
call init_mem
 
call init_page_map
 
; ENABLE PAGING
715,8 → 714,6
mov [SLOT_BASE+APPDATA.cursor],eax
mov [SLOT_BASE+APPDATA.cursor+256],eax
 
stdcall load_pe_driver, szAtiHW
 
; READ TSC / SECOND
 
mov esi,boot_tsc
807,12 → 804,9
 
no_load_vrr_m:
 
 
mov ebp, firstapp
call fs_execute_from_sysdir
 
 
 
cmp eax,2 ; continue if a process has been loaded
je first_app_found
 
/kernel/trunk/init.inc
39,32 → 39,7
 
align 4
proc init_mem
 
mov ecx, [0x2F0000 + 0x9100]
test ecx, ecx
jz .nosmap
 
xor eax, eax
mov esi, 0x2F0000 + 0x9104
@@:
cmp dword [esi+16], 1
jne .next
mov edx, [esi+8]
cmp eax, [esi+8]
ja .next
 
mov eax, [esi+8]
.next:
add esi, 20
loop @B
 
mov [MEM_AMOUNT-OS_BASE], eax
jmp @F
.nosmap:
call mem_test
 
mov eax, [MEM_AMOUNT-OS_BASE]
@@:
mov [pg_data.mem_amount-OS_BASE], eax
 
shr eax, 12
96,7 → 71,7
cld
rep stosd
 
mov edx, (sys_pgdir-OS_BASE)+ (OS_BASE shr 20)
mov edx, (sys_pgdir-OS_BASE)+ 0x800; (OS_BASE shr 20)
bt [cpu_caps-OS_BASE], CAPS_PSE
jnc .no_PSE
 
/kernel/trunk/const.inc
184,7 → 184,7
 
TSS_SIZE equ (128+8192)
 
OS_BASE equ 0xE0000000
OS_BASE equ 0x80000000
 
window_data equ OS_BASE