/kernel/trunk/core/debug.inc |
---|
21,7 → 21,7 |
; destroys eax |
mov eax, [0x3000] |
shl eax, 8 |
mov [eax+0x80000+0xBC], ebx |
mov [eax+0x80000+APPDATA.dbg_event_mem], ebx |
ret |
get_debuggee_slot: |
37,7 → 37,7 |
shl eax, 5 |
push ebx |
mov ebx, [0x3000] |
cmp [0x80000+eax*8+0xAC], ebx |
cmp [0x80000+eax*8+APPDATA.debugger_slot], ebx |
pop ebx |
jnz .ret_bad |
; clc ; automatically |
51,7 → 51,7 |
; destroys eax,ebx |
call get_debuggee_slot |
jc .ret |
and dword [eax*8+0x80000+0xAC], 0 |
and dword [eax*8+0x80000+APPDATA.debugger_slot], 0 |
call do_resume |
.ret: |
sti |
72,13 → 72,13 |
; destroys eax,ebx |
call get_debuggee_slot |
jc .ret |
mov bl, [0x3000+eax+0xA] ; process state |
mov bl, [0x3000+eax+TASKDATA.state] ; process state |
test bl, bl |
jz .1 |
cmp bl, 5 |
jnz .ret |
mov bl, 2 |
.2: mov [0x3000+eax+0xA], bl |
.2: mov [0x3000+eax+TASKDATA.state], bl |
.ret: |
sti |
ret |
87,13 → 87,13 |
jmp .2 |
do_resume: |
mov bl, [0x3000+eax+0xA] |
mov bl, [0x3000+eax+TASKDATA.state] |
cmp bl, 1 |
jz .1 |
cmp bl, 2 |
jnz .ret |
mov bl, 5 |
.2: mov [0x3000+eax+0xA], bl |
.2: mov [0x3000+eax+TASKDATA.state], bl |
.ret: ret |
.1: dec ebx |
jmp .2 |
227,7 → 227,7 |
call get_debuggee_slot |
jc .errret |
mov ebp, eax |
lea eax, [eax*8+0x80000+0xC0] |
lea eax, [eax*8+0x80000+APPDATA.dbg_regs] |
; [eax]=dr0, [eax+4]=dr1, [eax+8]=dr2, [eax+C]=dr3 |
; [eax+10]=dr7 |
add edx, std_application_base_address |
358,7 → 358,7 |
.1: |
mov eax, ebp |
shl eax, 8 |
mov edx, [0x80000+eax+0xBC] |
mov edx, [0x80000+eax+APPDATA.dbg_event_mem] |
test edx, edx |
jz .ret |
; read buffer header |
414,7 → 414,7 |
; new debug event |
mov eax, ebp |
shl eax, 8 |
or byte [0x80000+eax+0xA8+1], 1 ; set flag 100h |
or byte [0x80000+eax+APPDATA.event_mask+1], 1 ; set flag 100h |
.ret: |
ret |
432,7 → 432,7 |
; set DRx registers for task and continue |
mov eax, [0x3000] |
shl eax, 8 |
add eax, 0x80000+0xC0 |
add eax, 0x80000+APPDATA.dbg_regs |
mov ecx, [eax+0] |
mov dr0, ecx |
mov ecx, [eax+4] |
455,7 → 455,7 |
cli |
mov eax, [0x3000] |
shl eax, 8 |
mov eax, [0x80000+eax+0xAC] |
mov eax, [0x80000+eax+APPDATA.debugger_slot] |
test eax, eax |
jnz .debug |
sti |
464,7 → 464,7 |
mov [error_interrupt], 1 |
call show_error_parameters |
mov edx, [0x3010] |
mov byte [edx+0xA], 4 |
mov byte [edx+TASKDATA.state], 4 |
jmp change_task |
.debug: |
; we are debugged process, notify debugger and suspend ourself |
484,7 → 484,7 |
jnz .l1 |
push edx ; DR6 image |
mov ecx, [0x3010] |
push dword [ecx+4] ; PID |
push dword [ecx+TASKDATA.pid] ; PID |
push 12 |
pop ecx |
push 3 ; 3 = debug exception |
493,7 → 493,7 |
pop ecx |
pop ecx |
mov edx, [0x3010] |
mov byte [edx+0xA], 1 ; suspended |
mov byte [edx+TASKDATA.state], 1 ; suspended |
call change_task |
restore_ring3_context |
iretd |
/kernel/trunk/core/mem.inc |
---|
188,7 → 188,7 |
mov eax,[general_page_table] |
call simple_clone_cr3_table ;clone general page table |
shl ebx,8 |
mov [second_base_address+0x80000+ebx+0xB8],eax ;save address of page directory |
mov [second_base_address+0x80000+ebx+APPDATA.dir_table],eax ;save address of page directory |
pop ebx |
ret |
199,7 → 199,7 |
;result: |
; eax - physical address of page directory |
shl eax,8 ;size of process extended information=256 bytes |
mov eax,[second_base_address+0x80000+eax+0xB8] |
mov eax,[second_base_address+0x80000+eax+APPDATA.dir_table] |
ret |
;----------------------------------------------------------------------------- |
dispose_app_cr3_table: |
213,7 → 213,7 |
mov ebp,eax |
;ebp = process slot in the procedure. |
shl eax,8 |
mov eax,[second_base_address+0x80000+eax+0xB8] |
mov eax,[second_base_address+0x80000+eax+APPDATA.dir_table] |
mov ebx,eax |
;ebx = physical address of page directory |
call MEM_Get_Linear_Address |
234,10 → 234,10 |
;eax = current slot of process |
mov ecx,eax |
shl ecx,5 |
cmp byte [second_base_address+0x3000+ecx+0xa],9 ;if process running? |
cmp byte [second_base_address+0x3000+ecx+TASKDATA.state],9 ;if process running? |
jz .next ;skip empty slots |
shl ecx,3 |
cmp [second_base_address+0x80000+ecx+0xB8],ebx ;compare page directory addresses |
cmp [second_base_address+0x80000+ecx+APPDATA.dir_table],ebx ;compare page directory addresses |
jnz .next |
inc edx ;thread found |
.next: |
/kernel/trunk/core/newproce.inc |
---|
33,7 → 33,7 |
cmp eax,ebx |
jz .endnewprocessplace ;empty slot after high boundary |
add eax,0x20 |
cmp word [eax+0xa],9 ;check process state, 9 means that process slot is empty |
cmp word [eax+TASKDATA.state],9 ;check process state, 9 means that process slot is empty |
jnz .newprocessplace |
.endnewprocessplace: |
mov ebx,eax |
41,7 → 41,7 |
shr eax,5 ;calculate slot index |
cmp eax,256 |
jge .failed ;it should be <256 |
mov word [ebx+0xa],9 ;set process state to 9 (for slot after hight boundary) |
mov word [ebx+TASKDATA.state],9 ;set process state to 9 (for slot after hight boundary) |
mov [new_process_place],eax ;save process slot |
pop ebx |
ret |
113,7 → 113,7 |
; mov eax,[esp] ;eax - pointer to file name |
mov ebx,[new_process_place] |
shl ebx,8 |
add ebx,0x80000 |
add ebx,0x80000 + APPDATA.app_name |
mov ecx,11 |
call memmove |
207,7 → 207,7 |
;so free directory entry |
mov eax,[new_process_place] |
shl eax,8 |
mov eax,[0x80000+eax+0xB8] |
mov eax,[0x80000+eax+APPDATA.dir_table] |
call MEM_Free_Page |
.cleanfailed_mem: |
;there is no mem for directory entry, display message. |
219,7 → 219,7 |
;this avoid problems with panel application. |
mov edi,[new_process_place] |
shl edi,8 |
add edi,0x80000 |
add edi,0x80000 + APPDATA.app_name |
mov ecx,11 |
mov eax,' ' |
cld |
280,7 → 280,7 |
mov eax,[esp] ;eax - pointer to file name |
mov ebx,[new_process_place] |
shl ebx,8 |
add ebx,0x80000 |
add ebx,0x80000 + APPDATA.app_name |
mov ecx,11 |
call memmove |
371,7 → 371,7 |
;so free directory entry |
mov eax,[new_process_place] |
shl eax,8 |
mov eax,[0x80000+eax+0xB8] |
mov eax,[0x80000+eax+APPDATA.dir_table] |
call MEM_Free_Page |
.cleanfailed_mem: |
;there is no mem for directory entry, display message. |
383,7 → 383,7 |
;this avoid problems with panel application. |
mov edi,[new_process_place] |
shl edi,8 |
add edi,0x80000 |
add edi,0x80000+APPDATA.app_name |
mov ecx,11 |
mov eax,' ' |
cld |
417,13 → 417,13 |
;(size of application memory) |
shl ebx,8 |
mov eax,[app_mem] |
mov [second_base_address+0x80000+0x8c+ebx],eax |
mov [second_base_address+0x80000+APPDATA.mem_size+ebx],eax |
;set 0x10 field of information about process |
;(application base address) |
; mov ebx,[new_process_place] |
; shl ebx,5 |
shr ebx,3 |
mov dword [second_base_address+0x3000+ebx+0x10],std_application_base_address |
mov dword [second_base_address+0x3000+ebx+TASKDATA.mem_start],std_application_base_address |
;add command line parameters |
.add_command_line: |
466,29 → 466,29 |
mov eax,ebx |
shl ebx,5 |
add ebx,0x3000 ;ebx - pointer to information about process |
mov [ebx+0xe],al ;set window number on screen = process slot |
mov [ebx+TASKDATA.wnd_number],al ;set window number on screen = process slot |
mov [ebx],dword 1+2+4 ;set default event flags (see 40 function) |
mov [ebx+TASKDATA.event_mask],dword 1+2+4 ;set default event flags (see 40 function) |
inc dword [process_number] |
mov eax,[process_number] |
mov [ebx+4],eax ;set PID |
mov [ebx+TASKDATA.pid],eax ;set PID |
mov ecx,ebx |
add ecx,draw_data-0x3000 ;ecx - pointer to draw data |
;set draw data to full screen |
mov [ecx+0],dword 0 |
mov [ecx+4],dword 0 |
mov [ecx+RECT.left],dword 0 |
mov [ecx+RECT.top],dword 0 |
mov eax,[0xfe00] |
mov [ecx+8],eax |
mov [ecx+RECT.right],eax |
mov eax,[0xfe04] |
mov [ecx+12],eax |
mov [ecx+RECT.bottom],eax |
;set window state to 'normal' (non-minimized/maximized/rolled-up) state |
mov [ecx+WDATA.fl_wstate],WSTATE_NORMAL |
;set cr3 register in TSS of application |
mov ecx,[new_process_place] |
shl ecx,8 |
mov eax,[0x800B8+ecx] |
mov eax,[0x80000+APPDATA.dir_table+ecx] |
add eax,8+16 ;add flags |
mov [l.cr3],eax |
566,12 → 566,12 |
; set if debuggee |
test byte [esp+28], 1 |
jz .no_debug |
mov [0x3000+ebx+0xa], byte 1 ; set process state - suspended |
mov [0x3000+ebx+TASKDATA.state], 1 ; set process state - suspended |
mov eax, [0x3000] |
mov [0x80000+ebx*8+0xac], eax ;set debugger PID - current |
mov [0x80000+ebx*8+APPDATA.debugger_slot], eax ;set debugger PID - current |
jmp .debug |
.no_debug: |
mov [0x3000+ebx+0xa], byte 0 ; set process state - running |
mov [0x3000+ebx+TASKDATA.state], 0 ; set process state - running |
.debug: |
mov esi,new_process_running |
622,22 → 622,22 |
mov esi,[0x3000] |
shl esi,8 |
add esi,0x80000 |
add esi,0x80000+APPDATA.app_name |
mov ebx,esi ;ebx=esi - pointer to extended information about current thread |
mov edi,[new_process_place] |
shl edi,8 |
add edi,0x80000 |
mov edx,edi ;edx=edi - pointer to extended infomation about new thread |
lea edx, [edi+APPDATA.app_name] ;edx=edi - pointer to extended infomation about new thread |
mov ecx,256/4 |
rep stosd ;clean extended information about new thread |
mov edi,edx |
mov ecx,11 |
rep movsb ;copy process name |
mov eax,[ebx+0x8c] |
mov eax,[ebx+APPDATA.mem_size] |
mov [app_mem],eax ;set memory size |
mov eax,[ebx+0xb8] |
mov [edx+0xb8],eax ;copy page directory |
mov eax,[ebx+APPDATA.dir_table] |
mov dword [edx-APPDATA.app_name+APPDATA.dir_table],eax ;copy page directory |
; mov eax,[new_process_place] |
; mov ebx,[0x3000] |
; call addreference_app_cr3_table |
669,10 → 669,10 |
and ebx,not (4096-1) ;round up size |
mov ecx,[0x3000] |
shl ecx,8 |
mov edx,[0x8008C+ecx] |
mov edx,[0x80000 + APPDATA.mem_size +ecx] |
add edx,4095 |
and edx,not (4096-1) ;old size |
mov eax,[0x800B8+ecx] |
mov eax,[0x80000 + APPDATA.dir_table+ecx] |
call MEM_Get_Linear_Address |
;eax - linear address of page directory |
call MEM_Heap_Lock ;guarantee that two threads willn't |
704,10 → 704,10 |
mov ebx,esi |
mov eax,[0x3000] |
shl eax,8 |
mov [eax+0x8008c],ebx ;write new memory size |
mov [eax+0x80000 + APPDATA.mem_size],ebx ;write new memory size |
;search threads and update |
;application memory size infomation |
mov ecx,[eax+0x800b8] |
mov ecx,[eax+0x80000 + APPDATA.dir_table] |
mov eax,2 |
.search_threads: |
718,12 → 718,12 |
jg .search_threads_end |
mov edx,eax |
shl edx,5 |
cmp word [0x3000+edx+0xa],9 ;if slot empty? |
cmp word [0x3000+edx+TASKDATA.state],9 ;if slot empty? |
jz .search_threads_next |
shl edx,3 |
cmp [edx+0x800b8],ecx ;if it is our thread? |
cmp [edx+0x80000+APPDATA.dir_table],ecx ;if it is our thread? |
jnz .search_threads_next |
mov [edx+0x8008c],ebx ;update memory size |
mov [edx+0x80000+APPDATA.mem_size],ebx ;update memory size |
.search_threads_next: |
inc eax |
jmp .search_threads |
753,9 → 753,9 |
.loop: |
;ecx=offset of current process info entry |
;ebx=maximum permitted offset |
cmp byte [second_base_address+0x3000+ecx+0xa],9 |
cmp byte [second_base_address+0x3000+ecx+TASKDATA.state],9 |
jz .endloop ;skip empty slots |
cmp [second_base_address+0x3000+ecx+0x4],eax ;check PID |
cmp [second_base_address+0x3000+ecx+TASKDATA.pid],eax ;check PID |
jz .pid_found |
.endloop: |
add ecx,32 |
801,7 → 801,7 |
; eax - number of bytes written |
pushad |
shl eax,8 |
mov eax,[0x80000+eax+0xB8] |
mov eax,[0x80000+eax+APPDATA.dir_table] |
call MEM_Get_Linear_Address |
mov ebp,eax |
;ebp=linear address of page directory of other process. |
906,7 → 906,7 |
; eax - number of bytes read. |
pushad |
shl eax,8 |
mov eax,[0x80000+eax+0xB8] |
mov eax,[0x80000+eax+APPDATA.dir_table] |
call MEM_Get_Linear_Address |
mov ebp,eax |
add edx,std_application_base_address |
1009,10 → 1009,10 |
test ecx,ecx |
jle .ok |
shl eax,5 |
cmp word [0x3000+eax+0xa],0 |
cmp word [0x3000+eax+TASKDATA.state],0 |
jnz .failed |
shl eax,3 |
mov eax,[0x80000+eax+0xb8] |
mov eax,[0x80000+eax+APPDATA.dir_table] |
test eax,eax |
jz .failed |
call MEM_Get_Linear_Address |
1081,8 → 1081,8 |
shl edi,8 |
add edi,0x80000 |
cli |
mov [edi+0xA0],ebx ;set fields in extended information area |
mov [edi+0xA4],ecx |
mov [edi+APPDATA.ipc_start],ebx ;set fields in extended information area |
mov [edi+APPDATA.ipc_size],ecx |
sti |
mov [esp+36],dword 0 ;success |
ret |
1100,10 → 1100,10 |
mov ebp,eax |
;ebp = slot of other process |
shl eax,8 |
mov edi,[eax+0x80000+0xa0] ;is ipc area defined? |
mov edi,[eax+0x80000+APPDATA.ipc_start] ;is ipc area defined? |
test edi,edi |
jz .no_ipc_area |
mov esi,[eax+0x80000+0xa4] ;esi - size of buffer |
mov esi,[eax+0x80000+APPDATA.ipc_size] ;esi - size of buffer |
push dword -1 ;temp variable for read_process_memory |
mov ebx,esp |
push ecx |
1131,7 → 1131,7 |
add edx,esi |
sub edx,4 ;move to beginning of place for our message |
mov eax,[second_base_address+0x3010] |
mov eax,[eax+0x4] ;eax - our PID |
mov eax,[eax+TASKDATA.pid] ;eax - our PID |
mov [esp+8],eax |
mov eax,ebp |
call write_process_memory ;write PID |
1151,7 → 1151,7 |
;awake other process |
shl ebp,8 |
mov eax,ebp |
or [eax+0x800A8],dword 0x40 |
or [eax+0x80000+APPDATA.event_mask],dword 0x40 |
cmp dword [check_idle_semaphore],20 |
jge .ipc_no_cis |
1237,7 → 1237,7 |
lea esi,[eax-11] ;last 11 bytes = application name |
mov edi,[new_process_place] |
shl edi,8 |
add edi,0x80000 |
add edi,0x80000+APPDATA.app_name |
mov ecx,11 |
cld |
rep movsb ;copy name to extended information about process |
1366,7 → 1366,7 |
;so free directory entry |
mov eax,[new_process_place] |
shl eax,8 |
mov eax,[0x80000+eax+0xB8] |
mov eax,[0x80000+eax+APPDATA.dir_table] |
call MEM_Free_Page |
.cleanfailed_mem: |
;there is no mem for directory entry, display message. |
1378,7 → 1378,7 |
;this avoid problems with panel application. |
mov edi,[new_process_place] |
shl edi,8 |
add edi,0x80000 |
add edi,0x80000+APPDATA.app_name |
mov ecx,11 |
mov eax,' ' |
cld |
1455,7 → 1455,7 |
mov ecx, 8 ; 8 chars for name |
mov edi, [new_process_place] |
shl edi, cl |
add edi, 0x80000 |
add edi, 0x80000+APPDATA.app_name |
.copy_process_name_loop: |
lodsb |
cmp al, '.' |
1600,7 → 1600,7 |
; clean process name, this avoid problems with @panel |
mov edi, [new_process_place] |
shl edi, 8 |
add edi, 0x80000 |
add edi, 0x80000+APPDATA.app_name |
mov ecx, 11 |
mov al, ' ' |
rep stosb |
/kernel/trunk/core/physmem.inc |
---|
95,7 → 95,7 |
mov eax,[esi+physical_mem_block.start] |
mov [esp+28],eax |
mov eax,[0x3010] |
mov eax,[eax+0x4] |
mov eax,[eax+TASKDATA.pid] |
mov [esi+physical_mem_block.flags],eax |
popad |
ret |
105,7 → 105,7 |
mov eax,[esi+physical_mem_block.start] |
mov [esp+28],eax |
mov ecx,[0x3010] |
mov ecx,[ecx+0x4] |
mov ecx,[ecx+TASKDATA.pid] |
mov [esi+physical_mem_block.flags],ecx |
mov ecx,[esi+physical_mem_block.size] |
mov [esi+physical_mem_block.size],ebx |
/kernel/trunk/core/sched.inc |
---|
91,11 → 91,11 |
update_counters: |
mov edi, [0x3010] |
mov ebx, [edi+0x18] ; time stamp counter add |
mov ebx, [edi+TASKDATA.counter_add] ; time stamp counter add |
call _rdtsc |
sub eax, ebx |
add eax, [edi+0x14] ; counter sum |
mov [edi+0x14], eax |
add eax, [edi+TASKDATA.counter_sum] ; counter sum |
mov [edi+TASKDATA.counter_sum], eax |
ret |
123,7 → 123,7 |
add edi,0x20 |
inc ebx |
mov al, byte [edi+0xA] |
mov al, byte [edi+TASKDATA.state] |
test al, al |
jz .found |
cmp al, 1 |
146,13 → 146,13 |
test eax, eax |
jz .waiting_for_event |
mov [event_sched], eax |
mov [edi+0xA], byte 0 |
mov [edi+TASKDATA.state], byte 0 |
.noevents: |
.found: |
mov [0x3000],ebx |
mov [0x3010],edi |
call _rdtsc |
mov [edi+0x18],eax |
mov [edi+TASKDATA.counter_add],eax |
xor eax, eax |
cmp ebx, [prev_slot] |
181,9 → 181,9 |
mov ecx, [0x3004] |
mov edi, 0x3020 |
.newupdate: |
mov ebx,[edi+0x14] |
mov [edi+0x1c],ebx |
mov [edi+0x14],dword 0 |
mov ebx,[edi+TASKDATA.counter_sum] |
mov [edi+TASKDATA.cpu_usage],ebx |
mov [edi+TASKDATA.counter_sum],dword 0 |
add edi,0x20 |
dec ecx |
jnz .newupdate |
/kernel/trunk/core/sync.inc |
---|
27,7 → 27,7 |
ok=$ |
push eax |
mov eax,dword [0x3010+second_base_address] |
mov eax,[eax+0x4] |
mov eax,[eax+TASKDATA.pid] |
mov [name],eax |
pop eax |
sti |
61,7 → 61,7 |
local start_wait,first_wait,inc_counter,end_wait |
push eax |
mov eax,[0x3010+second_base_address] |
mov eax,[eax+0x4] |
mov eax,[eax+TASKDATA.pid] |
start_wait=$ |
cli |
cmp [name],dword 0 |
93,7 → 93,7 |
{ |
local ok,try_end |
mov eax,[0x3000+second_base_address] |
mov eax,[eax+0x4] |
mov eax,[eax+TASKDATA.pid] |
cmp [name],eax |
jz ok |
cmp [name],0 |
/kernel/trunk/core/sys32.inc |
---|
228,7 → 228,7 |
cli |
mov eax, [0x3000] |
shl eax, 8 |
mov eax, [0x80000+eax+0xAC] |
mov eax, [0x80000+eax+APPDATA.debugger_slot] |
test eax, eax |
jnz .debug |
sti |
239,7 → 239,7 |
call show_error_parameters |
mov edx, [0x3010] |
mov [edx + 0xA], byte 4 |
mov [edx + TASKDATA.state], byte 4 |
jmp change_task |
250,7 → 250,7 |
movzx ecx, bl |
push ecx |
mov ecx, [0x3010] |
push dword [ecx+4] ; PID of current process |
push dword [ecx+TASKDATA.pid] ; PID of current process |
push 12 |
pop ecx |
push 1 ; 1=exception |
259,7 → 259,7 |
pop ecx |
pop ecx |
mov edx, [0x3010] |
mov byte [edx+0xA], 1 ; suspended |
mov byte [edx+TASKDATA.state], 1 ; suspended |
call change_task |
restore_ring3_context |
iretd |
278,7 → 278,7 |
mov eax, [prev_user_of_fpu] |
shl eax, 8 |
add eax, 0x80000 + 0x10 |
add eax, 0x80000 + APPDATA.fpu_save_area |
fsave [eax] |
mov eax, [0x3000] |
285,11 → 285,11 |
mov [prev_user_of_fpu], eax |
shl eax, 8 |
add eax, 0x80000 |
cmp [eax + 0x7f], byte 0 |
cmp [eax + APPDATA.is_fpu_saved], 0 |
je @f |
frstor [eax+0x10] |
frstor [eax+APPDATA.fpu_save_area] |
@@: |
mov [eax + 0x7f], byte 1 |
mov [eax + APPDATA.is_fpu_saved], 1 |
restore_ring3_context |
iret |
338,7 → 338,7 |
mov [write_error_to],process_pid+43 |
mov eax,[0x3000] |
shl eax, 5 |
mov eax,[0x3000+4+eax] |
mov eax,[0x3000+TASKDATA.pid+eax] |
call writehex |
mov [write_error_to],process_error+43 |
556,7 → 556,7 |
mov eax,[0x3000] |
shl eax, 5 |
add eax,0x3000+4 |
add eax,0x3000+TASKDATA.pid |
mov eax,[eax] |
mov [application_table_status],eax |
571,7 → 571,7 |
mov eax,[0x3000] |
shl eax, 5 |
add eax,0x3000+4 |
add eax,0x3000+TASKDATA.pid |
mov eax,[eax] |
cmp eax,[application_table_status] |
676,17 → 676,17 |
app_esp dd 0x0 |
app_i_param dd 0x0 |
app_i_icon dd 0x0 |
app_mem_pos dd 0x0 |
;app_mem_pos dd 0x0 |
appl_path dd 0x0 |
appl_path_size dd 0x0 |
endg |
iglobal |
hd_app_string db 'HDAPP ' |
process_loading db 'K : Process - loading ',13,10,0 |
process_running db 'K : Process - done',13,10,0 |
first_gdt_search dd 0x2 |
endg |
;iglobal |
;hd_app_string db 'HDAPP ' |
;process_loading db 'K : Process - loading ',13,10,0 |
;process_running db 'K : Process - done',13,10,0 |
;first_gdt_search dd 0x2 |
;endg |
sys_threads: |
812,10 → 812,10 |
mov [esi+WDATA.box.top],eax |
mov [esi+WDATA.box.height], 5 |
xor eax, eax |
mov [esi+16],eax |
mov [esi+20],eax |
mov [esi+24],eax |
mov [esi+28],eax |
mov [esi+WDATA.cl_workarea],eax |
mov [esi+WDATA.cl_titlebar],eax |
mov [esi+WDATA.cl_frames],eax |
mov dword [esi+WDATA.reserved],eax ; clear all flags: wstate, redraw, wdrawn |
lea edi, [esi-window_data+draw_data] |
mov ecx,32/4 |
rep stosd |
825,12 → 825,12 |
pushad |
mov edi, esi |
shl edi, 5 |
mov eax, [0x80000+edi*8+0xAC] |
mov eax, [0x80000+edi*8+APPDATA.debugger_slot] |
test eax, eax |
jz .nodebug |
push 8 |
pop ecx |
push dword [0x3000+edi+0x4] ; PID |
push dword [0x3000+edi+TASKDATA.pid] ; PID |
push 2 |
call debugger_notify |
pop ecx |
850,7 → 850,7 |
pusha ; name to spaces |
mov edi,esi |
shl edi,8 |
add edi,0x80000 |
add edi,0x80000+APPDATA.app_name |
mov ecx,11 |
mov eax,' ' |
rep stosb |
869,7 → 869,7 |
lea esi, [0xc400+eax*2] |
movzx edi, word [esi] ; edi = process |
shl edi, 5 |
cmp [0x3000 + edi + 0xa], byte 9 ; skip dead slots |
cmp [0x3000 + edi + TASKDATA.state], byte 9 ; skip dead slots |
je .check_next_window |
add edi, window_data |
call waredraw |
896,8 → 896,8 |
pusha ; remove all irq reservations |
mov eax,esi |
shl eax, 5 ;imul edx,0x20 |
mov eax,[edx+0x3000+4] |
shl eax, 5 |
mov eax,[edx+0x3000+TASKDATA.pid] |
mov edi,irq_owner |
mov ecx,16 |
newirqfree: |
911,9 → 911,9 |
pusha ; remove all port reservations |
mov edx,esi |
shl edx, 5 ;imul edx,0x20 |
shl edx, 5 |
add edx,0x3000 |
mov edx,[edx+4] |
mov edx,[edx+TASKDATA.pid] |
rmpr0: |
956,10 → 956,10 |
popa |
mov edi,esi ; do not run this process slot |
shl edi, 5 |
mov [edi+0x300A],byte 9 |
mov [edi+0x3000 + TASKDATA.state],byte 9 |
; debugger test - terminate all debuggees |
mov eax, 2 |
mov ecx, 0x80000+2*0x100+0xAC |
mov ecx, 0x80000+2*0x100+APPDATA.debugger_slot |
.xd0: |
cmp eax, [0x3004] |
ja .xd1 |
/kernel/trunk/core/syscall.inc |
---|
40,7 → 40,7 |
align 4 |
save_registers: |
mov esi, [0x3010] |
mov eax, [esi+0x4] ; load PID |
mov eax, [esi+TASKDATA.pid] ; load PID |
lea esi, [esp+4] |
inc [save_syscall_count] |
mov edi,[save_syscall_count] |