From a316af7413d1d4fa17b943d1bba31e6e2b572a67 Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Sun, 13 Mar 2016 06:08:07 +0000 Subject: [PATCH] kernel: new app loader git-svn-id: svn://kolibrios.org@6333 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/const.inc | 2 + kernel/trunk/core/memory.inc | 9 - kernel/trunk/core/taskman.inc | 627 +++++++++++++--------------------- kernel/trunk/core/v86.inc | 10 +- kernel/trunk/data32.inc | 4 +- kernel/trunk/fs/fs_lfn.inc | 17 +- kernel/trunk/kernel.asm | 1 - 7 files changed, 262 insertions(+), 408 deletions(-) diff --git a/kernel/trunk/const.inc b/kernel/trunk/const.inc index 37962204fd..3ee2083fa2 100644 --- a/kernel/trunk/const.inc +++ b/kernel/trunk/const.inc @@ -428,6 +428,8 @@ struct PROC ht_free rd 1 ;htab[0] stdin ht_next rd 1 ;htab[1] stdout htab rd (4096-$)/4 ;htab[2] stderr +; htab rd (4096+3072-$)/4 ;htab[2] stderr +; workdir rb 1024 pdt_0 rd 1024 ends diff --git a/kernel/trunk/core/memory.inc b/kernel/trunk/core/memory.inc index 994ee1f0ba..25d474d743 100644 --- a/kernel/trunk/core/memory.inc +++ b/kernel/trunk/core/memory.inc @@ -575,15 +575,6 @@ proc page_fault_handler cmp ebx, kernel_tabs jb .alloc;.app_tabs ;таблицы страниц приложения ; ;просто создадим одну -if 0 ;пока это просто лишнее - cmp ebx, LFB_BASE - jb .core_tabs ;таблицы страниц ядра - ;Ошибка - .lfb: - ;область LFB - ;Ошибка - jmp .fail -end if .core_tabs: .fail: ;simply return to caller mov esp, ebp diff --git a/kernel/trunk/core/taskman.inc b/kernel/trunk/core/taskman.inc index 2078955a9e..defe339c07 100644 --- a/kernel/trunk/core/taskman.inc +++ b/kernel/trunk/core/taskman.inc @@ -30,13 +30,17 @@ struct APP_HEADER_01_ i_icon dd ? ;+32 ends - -struct APP_PARAMS - app_cmdline dd ? ;0x00 - app_path dd ? ;0x04 - app_eip dd ? ;0x08 - app_esp dd ? ;0x0C - app_mem dd ? ;0x10 +struct APP_HDR + cmdline rd 1 ;0x00 + path rd 1 ;0x04 + eip rd 1 ;0x08 + esp rd 1 ;0x0C + _edata rd 1 ;0x10 + _emem rd 1 ;0x14 + img_base rd 1 ;0x18 + img_size rd 1 + filename_size rd 1 + cmdline_size rd 1 ends macro _clear_ op @@ -46,160 +50,59 @@ macro _clear_ op rep stosd } +align 4 +_strnlen: + mov edx, ecx + xor eax, eax + repne scasb + jne @F + inc ecx +@@: + mov eax, edx + sub eax, ecx + retn + fs_execute_from_sysdir: xor ebx, ebx fs_execute_from_sysdir_param: xor edx, edx - mov esi, sysdir_path align 4 proc fs_execute - -;fn_read:dword, file_size:dword, cluster:dword - ; ebx - cmdline ; edx - flags ; ebp - full filename -; [esp+4] = procedure DoRead, [esp+8] = filesize & [esp+12]... - arguments for it locals - cmdline_size dd ? ; +0 ; cmdline -12 - cmdline_adr dd ? ; +4 ; cmdline -8 - cmdline_flag dd ? ; +8 ; cmdline -4 - cmdline rd 64 ;256/4 - filename rd 256 ;1024/4 - flags dd ? + filename rd 1 + cmdline rd 1 + flags rd 1 + + slot rd 1 + slot_base rd 1 + +;app header data + + hdr_cmdline rd 1 ;0x00 + hdr_path rd 1 ;0x04 + hdr_eip rd 1 ;0x08 + hdr_esp rd 1 ;0x0C + hdr_edata rd 1 ;0x10 + hdr_emem rd 1 ;0x14 + file_base rd 1 ;0x18 + file_size rd 1 ;0x1c + filename_size rd 1 ;0x20 + cmdline_size rd 1 ;0x24 - save_proc dd ? - slot dd ? - slot_base dd ? - file_base dd ? - file_size dd ? -; handle dd ? ;temp. for default cursor handle for curr. thread - ;app header data - hdr_cmdline dd ? ;0x00 - hdr_path dd ? ;0x04 - hdr_eip dd ? ;0x08 - hdr_esp dd ? ;0x0C - hdr_mem dd ? ;0x10 - hdr_i_end dd ? ;0x14 endl - pushad - -; cmp [SCR_MODE], word 0x13 -; jbe @f -; pushad -; stdcall set_cursor, [def_cursor_clock] -; mov [handle], eax -; mov [redrawmouse_unconditional], 1 -; call wakeup_osloop -; popad -;@@: + mov eax, [ebp] mov [flags], edx - -; [ebp] pointer to filename - - lea edi, [filename] - lea ecx, [edi+1024] - mov al, '/' - stosb -@@: - cmp edi, ecx - jae .bigfilename - lodsb - stosb - test al, al - jnz @b - mov esi, [ebp] - test esi, esi - jz .namecopied - mov byte [edi-1], '/' -@@: - cmp edi, ecx - jae .bigfilename - lodsb - stosb - test al, al - jnz @b - jmp .namecopied -.bigfilename: - popad - mov eax, -ERROR_FILE_NOT_FOUND - - jmp .final - -.namecopied: - xor eax, eax - mov [cmdline_flag], eax - mov [cmdline_adr], eax - mov [cmdline_size], eax - mov [cmdline], ebx - test ebx, ebx - jz .no_copy -;-------------------------------------- - pushad - pushfd - mov esi, ebx - mov ecx, 65536 ; 64 Kb max for ext.cmdline - cld -@@: - dec ecx - jz .end_string + mov [filename], eax - lodsb - test al, al - jnz @b - -.end_string: - mov eax, 65536 ; 64 Kb max for ext.cmdline - sub eax, ecx - mov [cmdline_size], eax - cmp eax, 255 - ja @f - - popfd - popad - jmp .old_copy - -@@: - xor eax, eax - dec eax - mov [cmdline_flag], eax - popfd - popad -; get memory for the extended command line - stdcall kernel_alloc, [cmdline_size] ;eax - test eax, eax - jz .old_copy ; get memory failed - - mov [cmdline_adr], eax - - pushad - pushfd - mov esi, ebx - mov edi, eax - mov ecx, [cmdline_size] - cld - rep movsb - popfd - popad - jmp .no_copy - -.old_copy: -; clear flag because old method with 256 bytes - xor eax, eax - mov [cmdline_flag], eax -;-------------------------------------- - lea eax, [cmdline] - mov dword [eax+252], 0 -.copy: - stdcall strncpy, eax, ebx, 255 -.no_copy: - lea eax, [filename] + mov eax, [filename] stdcall load_file, eax - mov esi, -ERROR_FILE_NOT_FOUND test eax, eax jz .err_file @@ -216,25 +119,28 @@ proc fs_execute call lock_application_table call alloc_thread_slot - test eax, eax mov esi, -0x20 ; too many processes - jz .err + test eax, eax + jz .err_0 mov [slot], eax shl eax, 8 - add eax, SLOT_BASE - mov [slot_base], eax - mov edi, eax - _clear_ 256 ;clean extended information about process + lea edi, [SLOT_BASE+eax] + mov [slot_base], edi + +;clean extended information about process + mov ecx, 256/4 + xor eax, eax + cld + rep stosd ; write application name - lea eax, [filename] - stdcall strrchr, eax, '/' ; now eax points to name without path + stdcall strrchr, [filename], '/' ; now eax points to name without path lea esi, [eax+1] test eax, eax jnz @F - lea esi, [filename] + mov esi, [filename] @@: mov ecx, 11 ; 11 chars for name! 8 - is old value! mov edi, [slot_base] @@ -246,20 +152,33 @@ proc fs_execute jz .copy_process_name_done stosb loop .copy_process_name_loop + .copy_process_name_done: - mov ebx, [current_process] - mov [save_proc], ebx + mov edi, [cmdline] + xor eax, eax + test edi, edi + jz @F + + mov ecx, 65535 + call _strnlen + cmp eax, 256 + jb @F + lea ebx, [eax+1] + add [hdr_emem], ebx +@@: + mov [cmdline_size], eax + + stdcall create_process, [hdr_emem] - stdcall create_process, [hdr_mem], [file_base], [file_size] mov esi, -30; no memory test eax, eax - jz .failed + jz .err_hdr mov ebx, [sys_proc+LHEAD.prev] __list_add eax, ebx, sys_proc - mov ebx, [hdr_mem] + mov ebx, [hdr_emem] mov [eax+PROC.mem_used], ebx mov ebx, [slot_base] @@ -269,60 +188,43 @@ proc fs_execute lea ecx, [eax+PROC.thr_list] list_add_tail edx, ecx - xor edx, edx - cmp word [6], '02' - jne @f + mov esi, sizeof.APP_HDR + add esi, [cmdline_size] - not edx -@@: - mov [ebx+APPDATA.tls_base], edx + mov edi, [filename] + mov ecx, 1023 + call _strnlen + add esi, eax + mov [filename_size], eax - mov ecx, [hdr_mem] - mov edi, [file_size] - add edi, 4095 - and edi, not 4095 - sub ecx, edi - jna @F + stdcall kernel_alloc, esi + mov [ebx+APPDATA.exec_params], eax + mov edi, eax + lea esi, [hdr_cmdline] + mov ecx, sizeof.APP_HDR/4 + rep movsd - xor eax, eax - cld - rep stosb -@@: + mov esi, [filename] + mov ecx, [filename_size] + rep movsb + mov ecx, [cmdline_size] + mov esi, [cmdline] + rep movsb -; release only virtual space, not phisical memory - - stdcall free_kernel_space, [file_base] lea eax, [hdr_cmdline] - lea ebx, [cmdline] - lea ecx, [filename] - stdcall set_app_params , [slot], eax, ebx, ecx, [flags] + stdcall set_app_params , [slot], eax, [flags] - mov eax, [save_proc] - call set_cr3 + mov eax, [process_number] ;set result + call unlock_application_table + ret - mov eax, [process_number];set result +.err_0: call unlock_application_table - jmp .final - -.failed: - mov eax, [save_proc] - call set_cr3 -.err: .err_hdr: stdcall kernel_free, [file_base] .err_file: - call unlock_application_table mov eax, esi -.final: -; cmp [SCR_MODE], word 0x13 -; jbe @f -; pushad -; stdcall set_cursor, [handle] -; mov [redrawmouse_unconditional], 1 -; call wakeup_osloop -; popad -;@@: ret endp @@ -344,17 +246,17 @@ test_app_header: jne .check_01_header mov ecx, [APP_HEADER_00.start] - mov [ebx+0x08], ecx ;app_eip + mov [ebx+APP_HDR.eip], ecx mov edx, [APP_HEADER_00.mem_size] - mov [ebx+0x10], edx ;app_mem + mov [ebx+APP_HDR._emem], edx shr edx, 1 sub edx, 0x10 - mov [ebx+0x0C], edx ;app_esp + mov [ebx+APP_HDR.esp], edx mov ecx, [APP_HEADER_00.i_param] - mov [ebx], ecx ;app_cmdline - mov [ebx+4], dword 0 ;app_path + mov [ebx+APP_HDR.cmdline], ecx + mov [ebx+APP_HDR.path], 0 mov edx, [APP_HEADER_00.i_end] - mov [ebx+0x14], edx + mov [ebx+APP_HDR._edata], edx ret .check_01_header: @@ -365,7 +267,7 @@ test_app_header: jne .fail @@: mov ecx, [APP_HEADER_01.start] - mov [ebx+0x08], ecx ;app_eip + mov [ebx+0x08], ecx mov edx, [APP_HEADER_01.mem_size] ; \begin{diamond}[20.08.2006] @@ -375,15 +277,15 @@ test_app_header: jb .fail ; \end{diamond}[20.08.2006] - mov [ebx+0x10], edx ;app_mem + mov [ebx+APP_HDR._emem], edx mov ecx, [APP_HEADER_01.stack_top] - mov [ebx+0x0C], ecx ;app_esp + mov [ebx+APP_HDR.esp], ecx mov edx, [APP_HEADER_01.i_param] - mov [ebx], edx ;app_cmdline + mov [ebx+APP_HDR.cmdline], edx mov ecx, [APP_HEADER_01.i_icon] - mov [ebx+4], ecx ;app_path + mov [ebx+APP_HDR.path], ecx mov edx, [APP_HEADER_01.i_end] - mov [ebx+0x14], edx + mov [ebx+APP_HDR._edata], edx ret .fail: xor eax, eax @@ -420,12 +322,9 @@ alloc_thread_slot: popfd ret - align 4 -proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword +proc create_process stdcall, app_size:dword locals - app_pages dd ? - img_pages dd ? process dd ? app_tabs dd ? endl @@ -434,37 +333,13 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword push esi push edi - mov ecx, pg_data.mutex - call mutex_lock - xor eax, eax mov [process], eax mov eax, [app_size] - add eax, 4095 - and eax, NOT(4095) - mov [app_size], eax - mov ebx, eax - shr eax, 12 - mov [app_pages], eax - - add ebx, 0x3FFFFF - and ebx, NOT(0x3FFFFF) - shr ebx, 22 - mov [app_tabs], ebx - - mov ecx, [img_size] - add ecx, 4095 - and ecx, NOT(4095) - - mov [img_size], ecx - shr ecx, 12 - mov [img_pages], ecx - - lea eax, [eax+ebx+2];all requested memory - - cmp eax, [pg_data.pages_free] - ja .fail + add eax, 0x3FFFFF + shr eax, 22 + mov [app_tabs], eax stdcall kernel_alloc, 0x2000 test eax, eax @@ -509,62 +384,27 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword or eax, PG_SWR mov [edi-4096+(page_tabs shr 20)], eax - lea eax, [edi-8192] - call set_cr3 + lea edx, [edi-4096] + mov esi, [app_tabs] - mov edx, [app_tabs] - xor edi, edi -@@: +.alloc_page_dir: call alloc_page test eax, eax jz .fail + or eax, PG_UWR + mov [edx], eax - stdcall map_page_table, edi, eax - add edi, 0x00400000 - dec edx - jnz @B - - mov edi, page_tabs - - mov ecx, [app_tabs] - shl ecx, 10 + mov edi, [tmp_task_ptab] + stdcall map_page, edi, eax, PG_SWR + mov ecx, 1024 xor eax, eax rep stosd - mov ecx, [img_pages] - mov ebx, PG_UWR - xor edx, edx - mov esi, [img_base] - shr esi, 10 - add esi, page_tabs - mov edi, page_tabs -.remap: - lodsd - and eax, 0xFFFFF000 - or eax, ebx; force user level r/w access - stosd - add edx, 0x1000 - dec [app_pages] - dec ecx - jnz .remap + add edx, 4 + dec esi + jnz .alloc_page_dir - mov ecx, [app_pages] - test ecx, ecx - jz .done - -.alloc: - call alloc_page - test eax, eax - jz .fail - - stdcall map_page, edx, eax, dword PG_UWR - add edx, 0x1000 - dec [app_pages] - jnz .alloc - -.done: - mov ecx, pg_data.mutex - call mutex_unlock + stdcall map_page, [tmp_task_ptab], 0, PG_UNMAP mov eax, [process] pop edi @@ -572,11 +412,10 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword pop ebx ret .fail: - mov ecx, pg_data.mutex - call mutex_unlock - cmp [process], 0 - je @f -;; stdcall destroy_app_space, [dir_addr], 0 + mov ecx, [process] + jcxz @F + + call destroy_process @@: xor eax, eax pop edi @@ -585,18 +424,6 @@ proc create_process stdcall, app_size:dword,img_base:dword,img_size:dword ret endp -align 4 -set_cr3: - pushfd - cli - mov ebx, [current_slot] - mov [current_process], eax - mov [ebx+APPDATA.process], eax - mov eax, [eax+PROC.pdt_0_phys] - mov cr3, eax - popfd - ret - align 4 proc destroy_page_table stdcall, pg_tab:dword @@ -856,7 +683,6 @@ proc write_process_memory mov ecx, 0x8000 @@: mov ebx, [offset] - ; add ebx, new_app_base push ecx stdcall map_memEx, [proc_mem_map], \ [slot], ebx, ecx, PG_SWR @@ -958,8 +784,7 @@ proc new_sys_threads list_add_tail ebx, ecx ;add thread to process child's list lea eax, [app_cmdline] - stdcall set_app_params , [slot], eax, dword 0, \ - dword 0, [flags] + stdcall set_app_params , [slot], eax, [flags] mov eax, [process_number] ;set result call unlock_application_table @@ -972,8 +797,109 @@ proc new_sys_threads ret endp +proc map_process_image stdcall, img_size:dword, file_base:dword, file_size:dword + + mov edx, [img_size] + mov esi, [file_base] + mov ecx, [file_size] + add edx, 4095 + add ecx, 4095 + shr edx, 12 ; total pages + shr ecx, 12 ; image pages + + mov edi, page_tabs + shr esi, 10 + add esi, edi + +.map_image: + lodsd + and eax, -4096 + or eax, PG_UWR + stosd + dec edx + loop .map_image + + test edx, edx + jz .done +.map_bss: + call alloc_page + test eax, eax + jz .fail + + or eax, PG_UWR + stosd + dec edx + jnz .map_bss + + mov edi, [file_size] + mov ecx, [img_size] + add edi, 4095 + and edi, -4096 + add ecx, 4095 + and ecx, -4096 + sub ecx, edi + shr ecx, 2 + xor eax, eax + rep stosd +.done: +.fail: + ret +endp + align 4 -tls_app_entry: +common_app_entry: + + mov ebp, [current_slot] + mov ebp, [ebp+APPDATA.exec_params] + test ebp, ebp + jz .exit + + stdcall map_process_image, [ebp+APP_HDR._emem],\ + [ebp+APP_HDR.img_base], [ebp+APP_HDR.img_size] + + xor eax, eax + mov edi, [ebp+APP_HDR.path] + lea esi, [ebp+sizeof.APP_HDR] + mov ecx, [ebp+APP_HDR.filename_size] + test edi, edi + jnz .copy_filename + + add esi, ecx + jmp .check_cmdline + +.copy_filename: + rep movsb + stosb + +.check_cmdline: + mov edi, [ebp+APP_HDR.cmdline] + mov ecx, [ebp+APP_HDR.cmdline_size] + test edi, edi + jz .check_tls_header + + cmp ecx, 256 + jb .copy_cmdline + + mov edi, [ebp+APP_HDR._emem] + add edi, 4095 + and edi, -4096 + sub edi, ecx + dec edi + + cmp word [6], '00' + jne @F + mov [APP_HEADER_00_.i_param], edi + jmp .copy_cmdline +@@: + mov [APP_HEADER_01_.i_param], edi + +.copy_cmdline: + rep movsb + stosb + +.check_tls_header: + cmp word [6], '02' + jne .cleanup call init_heap stdcall user_alloc, 4096 @@ -986,19 +912,21 @@ tls_app_entry: mov [tls_data_l+7], ah mov dx, app_tls mov fs, dx + +.cleanup: + stdcall free_kernel_space, [ebp+APP_HDR.img_base] + stdcall kernel_free, ebp +.exit: popad iretd - EFL_IF equ 0x0200 EFL_IOPL1 equ 0x1000 EFL_IOPL2 equ 0x2000 EFL_IOPL3 equ 0x3000 - align 4 -proc set_app_params stdcall,slot:dword, params:dword,\ - cmd_line:dword, app_path:dword, flags:dword +proc set_app_params stdcall,slot:dword, params:dword, flags:dword locals pl0_stack dd ? @@ -1059,73 +987,13 @@ proc set_app_params stdcall,slot:dword, params:dword,\ rep movsd shr ebx, 3 - mov eax, new_app_base - mov dword [CURRENT_TASK+ebx+0x10], eax + mov dword [CURRENT_TASK+ebx+0x10], 0 -.add_command_line: - mov edx, [params] - mov edx, [edx] ;app_cmdline - test edx, edx - jz @f ;application doesn't need parameters - - mov eax, edx - add eax, 256 - jc @f - -; cmp eax, [SLOT_BASE+APPDATA.mem_size+ebx*8] -; ja @f - - mov eax, [cmd_line] - - cmp [edx], dword 0xffffffff ; extended destination tag - jne .no_ext_dest - - mov edx, [edx+4] ; extended destination for cmdline - jmp .continue - -.no_ext_dest: - mov [eax-12], dword 255 -.continue: - mov byte [edx], 0 ;force empty string if no cmdline given - - test eax, eax - jz @f -;-------------------------------------- - cmp [eax-4], dword 0xffffffff ; cmdline_flag - jne .old_copy - - push eax - stdcall strncpy, edx, [eax-8], [eax-12] - pop eax - - stdcall kernel_free, [eax-8] - jmp @f - -.old_copy: -;-------------------------------------- - stdcall strncpy, edx, eax, 256 -@@: - mov edx, [params] - mov edx, [edx+4];app_path - test edx, edx - jz @F ;application don't need path of file - mov eax, edx - add eax, 1024 - jc @f -; cmp eax, [SLOT_BASE+APPDATA.mem_size+ebx*8] -; ja @f - stdcall strncpy, edx, [app_path], 1024 -@@: mov ebx, [slot] mov eax, ebx shl ebx, 5 lea ecx, [draw_data+ebx];ecx - pointer to draw data - mov edx, irq0.return - cmp [ebx*8+SLOT_BASE+APPDATA.tls_base], -1 - jne @F - mov edx, tls_app_entry -@@: ; set window state to 'normal' (non-minimized/maximized/rolled-up) state mov [ebx+window_data+WDATA.fl_wstate], WSTATE_NORMAL mov [ebx+window_data+WDATA.fl_redraw], 1 @@ -1152,7 +1020,7 @@ proc set_app_params stdcall,slot:dword, params:dword,\ lea ecx, [ebx+REG_EIP] xor eax, eax - mov [ebx+REG_RET], edx + mov [ebx+REG_RET], dword common_app_entry mov [ebx+REG_EDI], eax mov [ebx+REG_ESI], eax mov [ebx+REG_EBP], eax @@ -1162,8 +1030,8 @@ proc set_app_params stdcall,slot:dword, params:dword,\ mov [ebx+REG_ECX], eax mov [ebx+REG_EAX], eax - mov eax, [esi+0x08] ;app_eip - mov [ebx+REG_EIP], eax ;app_entry + mov eax, [esi+APP_HDR.eip] + mov [ebx+REG_EIP], eax mov [ebx+REG_CS], dword app_code mov ecx, USER_PRIORITY @@ -1172,12 +1040,11 @@ proc set_app_params stdcall,slot:dword, params:dword,\ mov [ebx+REG_CS], dword os_code ; kernel thread mov ecx, MAX_PRIORITY - @@: mov [ebx+REG_EFLAGS], dword EFL_IOPL1+EFL_IF - mov eax, [esi+0x0C] ;app_esp - mov [ebx+REG_APP_ESP], eax;app_stack + mov eax, [esi+APP_HDR.esp] + mov [ebx+REG_APP_ESP], eax mov [ebx+REG_SS], dword app_data lea edx, [ebx+REG_RET] @@ -1199,9 +1066,7 @@ proc set_app_params stdcall,slot:dword, params:dword,\ ret endp - align 4 - get_stack_base: mov eax, [current_slot] mov eax, [eax+APPDATA.pl0_stack] diff --git a/kernel/trunk/core/v86.inc b/kernel/trunk/core/v86.inc index fc01ae9b5e..18169816d7 100644 --- a/kernel/trunk/core/v86.inc +++ b/kernel/trunk/core/v86.inc @@ -37,7 +37,7 @@ v86_create: ; allocate tables mov ebx, eax - stdcall create_process, 4096, eax, 4096 ;FIXME + stdcall create_process, 4096 test eax, eax jz .fail2 @@ -51,7 +51,6 @@ v86_create: mov [ebx+V86_machine.iopm], eax - ; initialize tables push edi mov edi, eax @@ -66,7 +65,6 @@ v86_create: cli mov cr3, eax - ; now V86 specific: initialize known addresses in first Mb ; first page - BIOS data (shared between all machines!) @@ -109,10 +107,8 @@ v86_create: add eax, edx loop @b - mov eax, sys_proc - push ebx - call set_cr3 - pop ebx + mov eax, [sys_proc+PROC.pdt_0_phys] + mov cr3, eax popfd pop edi diff --git a/kernel/trunk/data32.inc b/kernel/trunk/data32.inc index 9338b8e2e8..e13eebda92 100644 --- a/kernel/trunk/data32.inc +++ b/kernel/trunk/data32.inc @@ -158,8 +158,8 @@ sz_EXPORTS db '_EXPORTS',0 szIMPORTS db 'IMPORTS',0 read_firstapp db '/sys/' -firstapp db 'LAUNCHER',0 -notifyapp db '@notify',0 +firstapp db '/RD/1/LAUNCHER',0 +notifyapp db '/RD/1/@notify',0 if lang eq ru ud_user_message cp866 'Ошибка: неподдерживаемая инструкция процессора',0 mtrr_user_message cp866 '"Обнаружена проблема с конфигурацией MTRR.\nПроизводительность может быть пониженной" -dW',0 diff --git a/kernel/trunk/fs/fs_lfn.inc b/kernel/trunk/fs/fs_lfn.inc index 6011dad549..4554ab0908 100644 --- a/kernel/trunk/fs/fs_lfn.inc +++ b/kernel/trunk/fs/fs_lfn.inc @@ -133,6 +133,15 @@ file_system_lfn: jnz @f mov esi, [esi] lodsb +@@: + lea ebp, [esi-1] + cmp dword [ebx], 7 + jne @F + mov edx, [ebx+4] + mov ebx, [ebx+8] + call fs_execute; ebp, ebx, edx + mov [image_of_eax], eax + ret @@: cmp al, '/' jz .notcurdir @@ -150,14 +159,6 @@ file_system_lfn: jz .rootdir call process_replace_file_name .parse_normal: - cmp dword [ebx], 7 - jne @F - mov edx, [ebx+4] - mov ebx, [ebx+8] - call fs_execute; esi+ebp, ebx, edx - mov [image_of_eax], eax - ret -@@: mov edi, rootdirs-8 xor ecx, ecx push esi diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 9a94e495eb..b1d29df726 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -974,7 +974,6 @@ include "detect/vortex86.inc" ; Vortex86 SoC detection code mov esi, 250 ; wait 1/4 a second call delay_ms rdtsc - sti sub eax, ecx xor edx, edx