113,6 → 113,7 |
popad |
mov eax, -ERROR_FILE_NOT_FOUND |
ret |
|
.namecopied: |
|
mov [cmdline], ebx |
201,6 → 202,14 |
mov eax,[hdr_mem] |
mov [ebx+APPDATA.mem_size],eax |
|
xor edx, edx |
cmp word [6], '02' |
jne @f |
|
not edx |
@@: |
mov [ebx+APPDATA.tls_base],edx |
|
if GREEDY_KERNEL |
else |
mov ecx, [hdr_mem] |
278,8 → 287,10 |
.check_01_header: |
|
cmp [eax+6],word '01' |
je @f |
cmp [eax+6], word '02' |
jne .fail |
|
@@: |
mov ecx,[APP_HEADER_01.start] |
mov [ebx+0x08], ecx ;app_eip |
mov edx,[APP_HEADER_01.mem_size] |
736,7 → 747,7 |
mov eax, [slot] |
shl eax,8 |
mov ebx, [offset] |
; add ebx, new_app_base |
|
push ecx |
stdcall map_memEx, [proc_mem_map],\ |
[SLOT_BASE+eax+0xB8],\ |
897,6 → 908,18 |
mov ecx,[ebx+APPDATA.dir_table] |
mov [edx+APPDATA.dir_table],ecx ;copy page directory |
|
mov eax, [ebx+APPDATA.tls_base] |
test eax, eax |
jz @F |
|
push edx |
stdcall user_alloc, 4096 |
pop edx |
test eax, eax |
jz .failed |
@@: |
mov [edx+APPDATA.tls_base], eax |
|
lea eax, [app_cmdline] |
stdcall set_app_params ,[slot],eax,dword 0,\ |
dword 0,dword 0 |
931,6 → 954,24 |
pop eax |
ret |
|
align 4 |
tls_app_entry: |
|
call init_heap |
stdcall user_alloc, 4096 |
|
mov edx, [current_slot] |
mov [edx+APPDATA.tls_base], eax |
mov [tls_data_l+2],ax |
shr eax,16 |
mov [tls_data_l+4],al |
mov [tls_data_l+7],ah |
mov dx, app_tls |
mov fs, dx |
popad |
iretd |
|
|
EFL_IF equ 0x0200 |
EFL_IOPL1 equ 0x1000 |
EFL_IOPL2 equ 0x2000 |
1037,6 → 1078,11 |
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 |
1063,7 → 1109,7 |
lea ecx, [ebx+REG_EIP] |
xor eax, eax |
|
mov [ebx+REG_RET], dword irq0.return |
mov [ebx+REG_RET], edx |
mov [ebx+REG_EDI], eax |
mov [ebx+REG_ESI], eax |
mov [ebx+REG_EBP], eax |