/kernel/trunk/kernel.asm |
---|
277,19 → 277,10 |
mov fs,bx |
mov gs,bx |
bt [cpu_caps], CAPS_PGE |
jnc @F |
mov dword [sys_pgdir], 0 |
mov dword [sys_pgdir+4], 0 |
mov dword [sys_pgdir+8], 0 |
or dword [sys_pgdir+(OS_BASE shr 20)], PG_GLOBAL |
mov ebx, cr4 |
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 |
/kernel/trunk/init.inc |
---|
71,13 → 71,12 |
or ebx, CR4_PSE |
mov eax, PG_LARGE+PG_SW |
; bt [cpu_caps-OS_BASE], CAPS_PGE |
; jnc @F |
bt [cpu_caps-OS_BASE], CAPS_PGE |
jnc @F |
; or eax, PG_GLOBAL |
; or ebx, CR4_PGE |
; |
;@@: |
or eax, PG_GLOBAL |
or ebx, CR4_PGE |
@@: |
mov cr4, ebx |
dec [pg_data.kernel_tables-OS_BASE] |
123,8 → 122,15 |
mov edi, (sys_pgdir-OS_BASE) |
lea esi, [edi+(OS_BASE shr 20)] |
movsd |
movsd |
lodsd |
and eax, not PG_GLOBAL |
stosd |
lodsd |
and eax, not PG_GLOBAL |
stosd |
lodsd |
and eax, not PG_GLOBAL |
stosd |
ret |
endp |
/kernel/trunk/core/string.inc |
---|
File deleted |
/kernel/trunk/core/taskman.inc |
---|
76,6 → 76,7 |
pushad |
mov [cmdline], ebx |
mov [flags], edx |
; [ebp] pointer to filename |
83,16 → 84,12 |
lea eax, [filename] |
mov dword [eax+1020],0 ;force terminate |
;string |
stdcall strncpy, eax, [ebp], 1023 |
stdcall k_strncpy, eax, [ebp], 1023 |
mov [cmdline], ebx |
test ebx, ebx |
jz @F |
lea eax, [cmdline] |
mov dword [eax+252], 0 |
stdcall strncpy, eax, ebx, 255 |
@@: |
stdcall k_strncpy, eax, [cmdline], 255 |
lea eax, [filename] |
stdcall load_file, eax |
mov ecx, -ERROR_FILE_NOT_FOUND |
139,8 → 136,9 |
_clear_ 256 ;clean extended information about process |
; write application name |
lea eax, [filename] |
stdcall strrchr, eax, '/' ; now eax points to name without path |
lea edi, [filename] |
mov al, '/' |
call k_strrchr ; now eax points to name without path |
lea esi, [eax+1] |
test eax, eax |
965,7 → 963,7 |
.add_command_line: |
mov edx,[params] |
mov edx,[edx] ;app_cmdline |
test edx, [cmd_line] ;check both src & dst |
test edx,edx |
jz @F ;application don't need parameters |
mov eax, edx |
975,7 → 973,7 |
cmp eax, [SLOT_BASE+APPDATA.mem_size+ebx*8] |
ja @f |
stdcall strncpy, edx, [cmd_line], 256 |
stdcall k_strncpy, edx, [cmd_line], 256 |
@@: |
mov edx,[params] |
mov edx, [edx+4] ;app_path |
986,7 → 984,7 |
jc @f |
cmp eax, [SLOT_BASE+APPDATA.mem_size+ebx*8] |
ja @f |
stdcall strncpy, edx, [app_path], 1024 |
stdcall k_strncpy, edx, [app_path], 1024 |
@@: |
mov ebx,[slot] |
mov eax,ebx |
/kernel/trunk/core/memory.inc |
---|
1057,7 → 1057,42 |
endp |
align 4 |
proc strncmp stdcall, str1:dword, str2:dword, count:dword |
mov ecx,[count] |
jecxz .end |
mov ebx,ecx |
mov edi,[str1] |
mov esi,edi |
xor eax,eax |
repne scasb |
neg ecx ; cx = count - strlen |
add ecx,ebx ; strlen + count - strlen |
.okay: |
mov edi,esi |
mov esi,[str2] |
repe cmpsb |
mov al,[esi-1] |
xor ecx,ecx |
cmp al,[edi-1] |
ja .str2_big |
je .end |
.str1_big: |
sub ecx,2 |
.str2_big: |
not ecx |
.end: |
mov eax,ecx |
ret |
endp |
align 4 |
proc stall stdcall, delay:dword |
push ecx |
1085,8 → 1120,227 |
ret |
endp |
align 4 |
k_strrchr: |
push eax |
xor eax,eax |
or ecx,-1 |
repne scasb |
add ecx,1 |
neg ecx |
sub edi,1 |
pop eax |
std |
repne scasb |
cld |
add edi,1 |
cmp [edi],al |
jne @F |
mov eax,edi |
ret |
@@: |
xor eax,eax |
ret |
align 4 |
proc k_strncpy stdcall, dest:dword, src:dword, maxlen:dword |
mov eax, [dest] |
mov esi, [src] |
mov ecx, [maxlen] |
test eax, eax |
jz .L9 |
test esi, esi |
jz .L9 |
test ecx, ecx |
jz .L9 |
sub esi, eax |
jmp .L1 |
align 4 |
.L2: |
mov edx, [esi+eax] |
mov [eax], dl |
test dl, dl |
jz .L7 |
mov [eax+1], dh |
test dh, dh |
jz .L6 |
shr edx, 16 |
mov [eax+2],dl |
test dl, dl |
jz .L5 |
mov [eax+3], dh |
test dh, dh |
jz .L4 |
add eax, 4 |
.L1: |
sub ecx, 4 |
jae .L2 |
add ecx, 4 |
jz .L9 |
mov dl, [eax+esi] |
mov [eax], dl |
test dl, dl |
jz .L3 |
inc eax |
dec ecx |
jz .L9 |
mov dl, [eax+esi] |
mov [eax], dl |
test dl, dl |
jz .L3 |
inc eax |
dec ecx |
jz .L9 |
mov dl, [eax+esi] |
mov [eax], dl |
test dl, dl |
jz .L3 |
inc eax |
jmp .L9 |
.L4: dec ecx |
inc eax |
.L5: dec ecx |
inc eax |
.L6: dec ecx |
inc eax |
.L7: |
add ecx,3 |
jz .L9 |
.L8: |
mov byte [ecx+eax], 0 |
.L3: |
dec ecx |
jnz .L8 |
.L9: |
ret |
endp |
if 0 |
magic equ 0xfefefeff |
k_strlen: |
mov eax,[esp+4] |
mov edx, 3 |
and edx, eax |
jz .L1 |
jp .L0 |
cmp dh, byte [eax] |
je .L2 |
inc eax |
cmp dh, byte [eax] |
je .L2 |
inc eax |
xor edx, 2 |
jz .L1 |
.L0: |
cmp dh, [eax] |
je .L2 |
inc eax |
xor edx, edx |
.L1: |
mov ecx, [eax] |
add eax, 4 |
sub edx, ecx |
add ecx, magic |
dec edx |
jnc .L3 |
xor edx, ecx |
and edx, not magic |
jne .L3 |
mov ecx, [eax] |
add eax, 4 |
sub edx, ecx |
add ecx, magic |
dec edx |
jnc .L3 |
xor edx, ecx |
and edx, not magic |
jne .L3 |
mov ecx, [eax] |
add eax, 4 |
sub edx, ecx |
add ecx, magic |
dec edx |
jnc .L3 |
xor edx, ecx |
and edx, not magic |
jne .L3 |
mov ecx, [eax] |
add eax, 4 |
sub edx, ecx |
add ecx, magic |
dec edx |
jnc .L3 |
xor edx, ecx |
and edx, not magic |
je .L1 |
.L3: sub eax ,4 |
sub ecx, magic |
cmp cl, 0 |
jz .L2 |
inc eax |
test ch, ch |
jz .L2 |
shr ecx, 16 |
inc eax |
cmp cl,0 |
jz .L2 |
inc eax |
.L2: |
sub eax, [esp+4] |
ret |
end if |
if 0 |
push eax |
push edx |
mov edx, 0x400 ;bochs |
/kernel/trunk/core/ext_lib.inc |
---|
228,7 → 228,7 |
mov edx,[exp] |
.next: test edx,edx |
jz .end |
stdcall strncmp,[edx],[sz_name], dword -1 |
stdcall strcmp,[edx],[sz_name] |
test eax,eax |
jz .ok |
add edx,8 |
306,4 → 306,21 |
ret |
endp |
proc strcmp, str1:dword,str2:dword |
push esi edi |
mov esi,[str1] |
mov edi,[str2] |
xor eax,eax |
@@: lodsb |
scasb |
jne .fail |
or al,al |
jnz @b |
jmp .ok |
.fail: or eax,-1 |
.ok: pop edi esi |
ret |
endp |
s_libname db 64 dup (0) |
/kernel/trunk/core/exports.inc |
---|
62,14 → 62,7 |
szSleep db 'Sleep',0 |
szGetTimerTicks db 'GetTimerTicks',0 |
szStrncat db 'strncat',0 |
szStrncpy db 'strncpy',0 |
szstrncmp db 'strncmp',0 |
szStrnlen db 'strnlen',0 |
szStrchr db 'strchr',0 |
szStrrchr db 'strrchr',0 |
align 16 |
kernel_export: |
dd szRegService , reg_service |
122,18 → 115,9 |
dd szSetMouseData , set_mouse_data |
dd szSleep , delay_ms |
dd szGetTimerTicks , get_timer_ticks |
dd szStrncat , strncat |
dd szStrncpy , strncpy |
dd szstrncmp , strncmp |
dd szStrnlen , strnlen |
dd szStrchr , strchr |
dd szStrrchr , strrchr |
exp_lfb: |
dd szLFBAddress , 0 |
dd 0 ;terminator, must be zero |
dd 0 |
endg |
/kernel/trunk/kernel32.inc |
---|
171,7 → 171,6 |
include "core/taskman.inc" |
include "core/dll.inc" |
include "core/exports.inc" |
include "core/string.inc" |
; GUI stuff |
include "gui/window.inc" |
/kernel/trunk/drivers/imports.inc |
---|
145,26 → 145,6 |
if used GetTimerTicks |
extrn GetTimerTicks |
end if |
if used strncat |
extrn strncat |
end if |
if used strncpy |
extrn strncpy |
end if |
if used strncmp |
extrn strncmp |
end if |
if used strnlen |
extrn strnlen |
end if |
if used strchr |
extrn strchr |
end if |
if used strrchr |
extrn strrchr |
end if |
if used LFBAddress |
extrn LFBAddress |
end if |