optimization

git-svn-id: svn://kolibrios.org@427 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2007-03-22 12:01:05 +00:00
parent 6f7428a7e4
commit e449a2473e
16 changed files with 626 additions and 260 deletions

View File

@ -134,6 +134,45 @@ SSE_FZ equ 0x8000
SSE_INIT equ (SSE_IM+SSE_DM+SSE_ZM+SSE_OM+SSE_UM+SSE_PM)
struc TSS
{
._back rw 2
._esp0 rd 1
._ss0 rw 2
._esp1 rd 1
._ss1 rw 2
._esp2 rd 1
._ss2 rw 2
._cr3 rd 1
._eip rd 1
._eflags rd 1
._eax rd 1
._ecx rd 1
._edx rd 1
._ebx rd 1
._esp rd 1
._ebp rd 1
._esi rd 1
._edi rd 1
._es rw 2
._cs rw 2
._ss rw 2
._ds rw 2
._fs rw 2
._gs rw 2
._ldt rw 2
._trap rw 1
._io rw 1
rb 24
._io_map_0 rb 4096
._io_map_1 rb 4096
}
virtual at 0
TSS TSS
end virtual
OS_BASE equ 0x80000000
window_data equ OS_BASE
@ -339,6 +378,20 @@ EVENT_EXTENDED equ 0x00000200
EV_INTR equ 1
struc THR_DATA
{
rb (8192-512)
.pl0_stack:
.fpu_state rb 512
.pdbr rb 4096
}
THR_DATA_SIZE equ 4096*3
virtual at (OS_BASE-THR_DATA_SIZE)
thr_data THR_DATA
end virtual
struc SYS_VARS
{ .bpp dd ?
.scanline dd ?

View File

@ -19,9 +19,8 @@ sys_debug_services_table:
debug_set_event_data:
; in: ebx = pointer
; destroys eax
mov eax, [CURRENT_TASK]
shl eax, 8
mov [eax+SLOT_BASE+APPDATA.dbg_event_mem], ebx
mov eax, [current_slot]
mov [eax+APPDATA.dbg_event_mem], ebx
ret
get_debuggee_slot:
@ -453,9 +452,8 @@ debug_exc:
mov dr6, eax
; test if debugging
cli
mov eax, [CURRENT_TASK]
shl eax, 8
mov eax, [SLOT_BASE+eax+APPDATA.debugger_slot]
mov eax, [current_slot]
mov eax, [eax+APPDATA.debugger_slot]
test eax, eax
jnz .debug
sti

View File

@ -152,14 +152,13 @@ align 4
proc get_notify stdcall, p_ev:dword
.wait:
mov ebx,[CURRENT_TASK]
shl ebx,8
test dword [ebx+SLOT_BASE+0xA8],EVENT_NOTIFY
mov ebx,[current_slot]
test dword [ebx+APPDATA.event_mask],EVENT_NOTIFY
jz @f
and dword [ebx+SLOT_BASE+0xA8], not EVENT_NOTIFY
and dword [ebx+APPDATA.event_mask], not EVENT_NOTIFY
mov edi, [p_ev]
mov dword [edi], EV_INTR
mov eax, [ebx+SLOT_BASE+APPDATA.event]
mov eax, [ebx+APPDATA.event]
mov dword [edi+4], eax
ret
@@:
@ -994,9 +993,8 @@ create_kernel_object:
test eax, eax
jz .fail
mov ecx,[CURRENT_TASK]
shl ecx,8
add ecx, SLOT_BASE+APP_OBJ_OFFSET
mov ecx,[current_slot]
add ecx, APP_OBJ_OFFSET
pushfd
cli
@ -1036,3 +1034,68 @@ destroy_kernel_object:
ret
if 0
irq:
.irq0:
pusfd
pushad
push IRQ_0
jmp .master
.irq_1:
pusfd
pushad
push IRQ_1
jmp .master
.master:
mov ax, app_data
mov ds, eax
mov es, eax
mov ebx, [esp+4] ;IRQ_xx
mov eax, [irq_handlers+ebx+4]
call intr_handler
mov ecx, [esp+4]
cmp [irq_actids+ecx*4], 0
je @F
in al, 0x21
bts eax, ecx
out 0x21, al
mov al, 0x20
out 0x20, al
jmp .restart
.slave:
mov ax, app_data
mov ds, eax
mov es, eax
mov ebx, [esp+4] ;IRQ_xx
mov eax, [irq_handlers+ebx+4]
call intr_handler
mov ecx, [esp+4]
sub ecx, 8
cmp [irq_actids+ecx*4], 0
je @F
in al, 0xA1
bts eax, ecx
out 0xA1, al
mov al, 0x20
out 0xA0, al
out 0x20, al
.restart:
mov ebx, [next_slot]
test ebx, ebx
jz @F
mov [next_task],0
mov esi, [prev_slot]
call do_change_task
add esp, 4
iretd
end if

View File

@ -227,10 +227,9 @@ except_19: ;sse exceptions handler
push ecx
push edx
mov ebx, [CURRENT_TASK]
shl ebx, 8
mov ebx, [current_slot]
mov eax, [ebx+SLOT_BASE+APPDATA.sse_handler]
mov eax, [ebx+APPDATA.sse_handler]
test eax, eax
jz .default

View File

@ -614,22 +614,21 @@ HEAP_TOP equ 0x5FC00000
align 4
proc init_heap
mov ebx,[CURRENT_TASK]
shl ebx,8
mov eax, [SLOT_BASE+APPDATA.heap_top+ebx]
mov ebx,[current_slot]
mov eax, [ebx+APPDATA.heap_top]
test eax, eax
jz @F
sub eax,[SLOT_BASE+APPDATA.heap_base+ebx]
sub eax,[ebx+APPDATA.heap_base]
sub eax, 4096
ret
@@:
mov esi, [SLOT_BASE+APPDATA.mem_size+ebx]
mov esi, [ebx+APPDATA.mem_size]
add esi, 4095
and esi, not 4095
mov [SLOT_BASE+APPDATA.mem_size+ebx], esi
mov [ebx+APPDATA.mem_size], esi
mov eax, HEAP_TOP
mov [SLOT_BASE+APPDATA.heap_base+ebx], esi
mov [SLOT_BASE+APPDATA.heap_top+ebx], eax
mov [ebx+APPDATA.heap_base], esi
mov [ebx+APPDATA.heap_top], eax
sub eax, esi
; add esi, new_app_base
@ -651,12 +650,9 @@ proc user_alloc stdcall, alloc_size:dword
add ecx, (4095+4096)
and ecx, not 4095
mov ebx, [CURRENT_TASK]
shl ebx, 8
mov esi, dword [ebx+SLOT_BASE+APPDATA.heap_base]; heap_base
mov edi, dword [ebx+SLOT_BASE+APPDATA.heap_top]; heap_top
; add esi, new_app_base
; add edi, new_app_base
mov ebx, [current_slot]
mov esi, dword [ebx+APPDATA.heap_base] ; heap_base
mov edi, dword [ebx+APPDATA.heap_top] ; heap_top
l_0:
cmp esi, edi
jae m_exit
@ -677,7 +673,6 @@ l_0:
or eax, FREE_BLOCK
shr edx, 12
mov [page_tabs+edx*4], eax
@@:
or ecx, USED_BLOCK
mov [page_tabs+ebx*4], ecx
@ -690,17 +685,15 @@ l_0:
dec ecx
jnz @B
mov edx, [CURRENT_TASK]
shl edx, 8
mov ebx, [alloc_size]
add ebx, 0xFFF
and ebx, not 0xFFF
add ebx, [SLOT_BASE+APPDATA.mem_size+edx]
call update_mem_size
mov edx, [current_slot]
mov ebx, [alloc_size]
add ebx, 0xFFF
and ebx, not 0xFFF
add ebx, [edx+APPDATA.mem_size]
call update_mem_size
mov eax, esi
add eax, 4096
; sub eax, new_app_base
ret
m_next:
add esi, eax
@ -750,15 +743,12 @@ proc user_free stdcall, base:dword
dec ecx
jnz .release
.not_used:
mov edx, [CURRENT_TASK]
shl edx, 8
mov esi, dword [edx+SLOT_BASE+APPDATA.heap_base]; heap_base
mov edi, dword [edx+SLOT_BASE+APPDATA.heap_top]; heap_top
sub ebx, [edx+SLOT_BASE+APPDATA.mem_size]
mov edx, [current_slot]
mov esi, dword [edx+APPDATA.heap_base]
mov edi, dword [edx+APPDATA.heap_top]
sub ebx, [edx+APPDATA.mem_size]
neg ebx
call update_mem_size
; add esi, new_app_base
; add edi, new_app_base
shr esi, 12
shr edi, 12
@@:

View File

@ -303,12 +303,11 @@ proc new_mem_resize stdcall, new_size:dword
and edi,not 4095
mov [new_size], edi
mov edx,[CURRENT_TASK]
shl edx,8
cmp [SLOT_BASE+APPDATA.heap_base+edx],0
mov edx,[current_slot]
cmp [edx+APPDATA.heap_base],0
jne .exit
mov esi, [SLOT_BASE+APPDATA.mem_size+edx]
mov esi, [edx+APPDATA.mem_size]
add esi, 4095
and esi, not 4095
@ -332,16 +331,13 @@ proc new_mem_resize stdcall, new_size:dword
jb @B
.update_size:
mov ebx, [new_size]
call update_mem_size
mov ebx, [new_size]
call update_mem_size
xor eax, eax
dec [pg_data.pg_mutex]
ret
.expand:
; add edi, new_app_base
; add esi, new_app_base
push esi
push edi
@ -405,14 +401,14 @@ proc new_mem_resize stdcall, new_size:dword
endp
update_mem_size:
; in: edx = slot shl 8
; in: edx = slot base
; ebx = new memory size
; destroys eax,ecx,edx
mov [SLOT_BASE+APPDATA.mem_size+edx],ebx
mov [APPDATA.mem_size+edx],ebx
;search threads and update
;application memory size infomation
mov ecx,[SLOT_BASE+APPDATA.dir_table+edx]
mov ecx,[APPDATA.dir_table+edx]
mov eax,2
.search_threads:
@ -456,38 +452,35 @@ proc page_fault_handler
.err_addr equ ebp-4
pushad
; push eax
; push edx
; mov edx, 0x400 ;bocsh
; mov al,0xff ;bocsh
; out dx, al ;bocsh
; pop edx
; pop eax
mov ebp, esp
mov eax, cr2
push eax
push ds
push es
mov ax, 0x10
mov ax, app_data
mov ds, ax
mov es, ax
inc [pg_data.pages_faults]
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]
cmp ebx, OS_BASE
jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíè
jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ;
cmp ebx, page_tabs
jb .kernel_space ;ñòðàíèöà â ïàìÿòè ÿäðà
cmp ebx, kernel_tabs
jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíè
jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ;
;ïðîñòî ñîçäàäèì îäíó
cmp ebx, LFB_BASE
@ -514,7 +507,7 @@ align 4
mov eax, [page_tabs+ebx*4]
test eax, 2
jz .fail ;àäðåñ íå çàðåçåðâèðîâàí äë
jz .fail ;àäðåñ íå çàðåçåðâèðîâàí äëÿ ;
;èñïîëüçîâàíèÿ. Îøèáêà
.alloc:
call alloc_page
@ -530,8 +523,6 @@ align 4
cld
rep stosd
.exit:
pop es
pop ds
mov esp, ebp
popad
add esp, 4
@ -557,8 +548,6 @@ align 4
.core_tabs:
.fail:
pop es
pop ds
mov esp, ebp
popad
add esp, 4
@ -729,15 +718,12 @@ sys_IPC:
align 4
proc set_ipc_buff
mov eax,[CURRENT_TASK]
shl eax,8
add eax, SLOT_BASE
mov eax,[current_slot]
pushf
cli
mov [eax+0xA0],ebx ;set fields in extended information area
mov [eax+0xA4],ecx
mov [eax+APPDATA.ipc_start],ebx ;set fields in extended information area
mov [eax+APPDATA.ipc_size],ecx
; add ebx, new_app_base
add ecx, ebx
add ecx, 4095
and ecx, not 4095
@ -914,14 +900,12 @@ new_services:
@@:
cmp eax, 13
ja @f
; add ebx, new_app_base
stdcall user_free, ebx
mov [esp+36], eax
ret
@@:
cmp eax, 14
ja @f
; add ebx, new_app_base
cmp ebx, OS_BASE
jae .fail
stdcall get_event_ex, ebx, ecx
@ -930,10 +914,9 @@ new_services:
@@:
cmp eax, 15
ja @f
mov ecx, [CURRENT_TASK]
shl ecx, 8
mov eax, [ecx+SLOT_BASE+APPDATA.fpu_handler]
mov [ecx+SLOT_BASE+APPDATA.fpu_handler], ebx
mov ecx, [current_slot]
mov eax, [ecx+APPDATA.fpu_handler]
mov [ecx+APPDATA.fpu_handler], ebx
mov [esp+36], eax
ret
@@:
@ -942,7 +925,6 @@ new_services:
test ebx, ebx
jz .fail
; add ebx, new_app_base
cmp ebx, OS_BASE
jae .fail
stdcall get_service, ebx
@ -957,10 +939,9 @@ new_services:
@@:
cmp eax, 18
ja @f
mov ecx, [CURRENT_TASK]
shl ecx, 8
mov eax, [ecx+SLOT_BASE+APPDATA.sse_handler]
mov [ecx+SLOT_BASE+APPDATA.sse_handler], ebx
mov ecx, [current_slot]
mov eax, [ecx+APPDATA.sse_handler]
mov [ecx+APPDATA.sse_handler], ebx
mov [esp+36], eax
ret
@@:

View File

@ -138,7 +138,7 @@ find_next_task:
jb @f
mov edi, CURRENT_TASK
xor ebx, ebx
@@:
@@:
add edi,0x20
inc ebx
@ -237,3 +237,91 @@ updatecputimes:
jnz .newupdate
ret
if 0
MAX_PROIRITY 0 ; highest, used for kernel tasks
MAX_USER_PRIORITY 0 ; highest priority for user processes
USER_PRIORITY 7 ; default (should correspond to nice 0)
MIN_USER_PRIORITY 14 ; minimum priority for user processes
IDLE_PRIORITY 15 ; lowest, only IDLE process goes here
NR_SCHED_QUEUES 16 ; MUST equal IDLE_PRIORYTY + 1
rdy_head rd 16
align 4
pick_task:
xor eax, eax
.pick:
mov ebx, [rdy_head+eax*4]
test ebx, ebx
jz .next
mov [next_task], ebx
test [ebx+flags.billable]
jz @F
mov [bill_task], ebx
@@:
ret
.next:
inc eax
jmp .pick
; param
; eax= task
;
; retval
; eax= task
; ebx= queue
; ecx= front if 1 or back if 0
align 4
shed:
cmp [eax+.tics_left], 0 ;signed compare
mov ebx, [eax+.priority]
setg ecx
jg @F
mov edx, [eax+.tics_quantum]
mov [eax+.ticks_left], edx
cmp ebx, (IDLE_PRIORITY-1)
je @F
inc ebx
@@:
ret
; param
; eax= task
align 4
enqueue:
call shed ;eax
cmp [rdy_head+ebx*4],0
jnz @F
mov [rdy_head+ebx*4], eax
mov [rdy_tail+ebx*4], eax
mov [eax+.next_ready], 0
jmp .pick
@@:
test ecx, ecx
jz .back
mov ecx, [rdy_head+ebx*4]
mov [eax+.next_ready], ecx
mov [rdy_head+ebx*4], eax
jmp .pick
.back:
mov ecx, [rdy_tail+ebx*4]
mov [ecx+.next_ready], eax
mov [rdy_tail+ebx*4], eax
mov [eax+.next_ready], 0
.pick:
call pick_proc ;select next task
ret
end if

View File

@ -118,9 +118,8 @@ exc_c:
; test if debugging
cli
mov eax, [CURRENT_TASK]
shl eax, 8
mov eax, [SLOT_BASE+eax+APPDATA.debugger_slot]
mov eax, [current_slot]
mov eax, [eax+APPDATA.debugger_slot]
test eax, eax
jnz .debug
sti

View File

@ -55,9 +55,8 @@ sysenter_entry:
; lea esp, [eax + RING0_STACK_SIZE] ; configure ESP
; mov eax, [ss:sysenter_stack - 4] ; eax - original eax, from app
mov esp, [CURRENT_TASK]
shl esp, 8
mov esp, [SLOT_BASE + esp + APPDATA.pl0_stack]
mov esp, [current_slot]
mov esp, [esp + APPDATA.pl0_stack]
add esp, RING0_STACK_SIZE ; configure ESP
sti
;------------------
@ -104,14 +103,12 @@ syscall_entry:
; lea esp, [eax + RING0_STACK_SIZE] ; configure ESP
; mov eax, [ss:sysenter_stack - 4] ; eax - original eax, from app
mov esp, [CURRENT_TASK]
shl esp, 8
mov esp, [SLOT_BASE + esp + APPDATA.pl0_stack]
mov esp, [current_slot]
mov esp, [esp + APPDATA.pl0_stack]
add esp, RING0_STACK_SIZE ; configure ESP
sti
;------------------
; push ds es
pushad
cld
@ -132,7 +129,6 @@ syscall_entry:
pop eax
popad
; pop es ds
;------------------
cli

View File

@ -21,40 +21,6 @@ struc APP_HEADER_01
.i_icon dd ? ;+32
}
struc TSS
{
._back rw 2
._esp0 rd 1
._ss0 rw 2
._esp1 rd 1
._ss1 rw 2
._esp2 rd 1
._ss2 rw 2
._cr3 rd 1
._eip rd 1
._eflags rd 1
._eax rd 1
._ecx rd 1
._edx rd 1
._ebx rd 1
._esp rd 1
._ebp rd 1
._esi rd 1
._edi rd 1
._es rw 2
._cs rw 2
._ss rw 2
._ds rw 2
._fs rw 2
._gs rw 2
._ldt rw 2
._trap rw 1
._io rw 1
}
virtual at 0
TSS TSS
end virtual
struc APP_PARAMS
{ .app_cmdline ;0x00
@ -484,14 +450,19 @@ endp
align 4
set_cr3:
mov esi, [CURRENT_TASK]
mov ebx, esi
shl esi,8
mov [SLOT_BASE+esi+0xB8],eax
imul ebx,tss_step
add ebx,tss_data
mov [ebx+28], eax
mov ebx, [current_slot]
mov [ebx+APPDATA.dir_table], eax
mov cr3, eax
; mov esi, [CURRENT_TASK]
; mov ebx, esi
; shl esi,8
; mov [SLOT_BASE+esi+0xB8],eax
; imul ebx,tss_step
; add ebx,tss_data
; mov [ebx+28], eax
; mov cr3, eax
ret
align 4
@ -864,9 +835,7 @@ proc new_sys_threads
mov [slot], eax
mov esi,[CURRENT_TASK]
shl esi,8
add esi,SLOT_BASE
mov esi,[current_slot]
mov ebx,esi ;ebx=esi - pointer to extended information about current thread
mov edi, eax

View File

@ -164,16 +164,15 @@ button_dececx:
sys_button:
push edi
mov edi,[CURRENT_TASK]
shl edi,8
mov edi,[current_slot]
rol eax,16
add ax,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add ax,word[edi+APPDATA.wnd_clientbox.left]
rol eax,16
rol ebx,16
add bx,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
add bx,word[edi+APPDATA.wnd_clientbox.top]
rol ebx,16
pop edi
.forced:
.forced:
test ecx,0x80000000
jnz remove_button
@ -220,7 +219,7 @@ sys_button:
pop edx
and edx, 0xFFFF
.newline:
.newline:
call button_dececx
push edi
xor edi, edi
@ -233,7 +232,7 @@ sys_button:
call drawbuttonframes
button_no_draw:
button_no_draw:
and ecx,0xffff
@ -268,7 +267,7 @@ sys_button:
mov bx,[esp+8+0]
mov [eax],bx
noaddbutt:
noaddbutt:
pop edx
pop ecx
@ -284,14 +283,14 @@ remove_button:
and ecx,0x7fffffff
rnewba2:
rnewba2:
mov edi,[BTN_ADDR]
mov eax,edi
movzx ebx,word [edi]
inc bx
rnewba:
rnewba:
dec bx
jz rnmba
@ -317,7 +316,7 @@ remove_button:
jmp rnewba2
rnmba:
rnmba:
ret
@ -328,17 +327,17 @@ find_pressed_button_frames:
movzx ebx,word [eax+0]
shl ebx,5
add ebx,window_data
mov ecx, [ebx+ WDATA.box.left] ; window x start
mov ecx, [ebx+ WDATA.box.left] ; window x start
movzx edx,word [eax+4] ; button x start
add ecx,edx
push ecx
mov dx,[eax+6] ; button x size
mov dx,[eax+6] ; button x size
add cx,dx
mov esi,ecx
inc esi
mov ecx, [ebx+WDATA.box.top] ; window y start
mov dx,[eax+8] ; button y start
mov ecx, [ebx+WDATA.box.top] ; window y start
mov dx,[eax+8] ; button y start
add ecx,edx
mov ebx,ecx
mov dx,[eax+10] ; button y size

View File

@ -114,9 +114,8 @@ create_event:
cld
rep movsd
@@:
mov ecx, [CURRENT_TASK]
shl ecx,8
add ecx, SLOT_BASE+APP_OBJ_OFFSET
mov ecx, [current_slot]
add ecx, APP_OBJ_OFFSET
pushfd
cli
@ -217,12 +216,11 @@ align 4
proc get_event_ex stdcall, p_ev:dword, timeout:dword
.wait:
mov edx,[CURRENT_TASK]
shl edx,8
mov edx,[current_slot]
; cmp [SLOT_BASE+edx+APPDATA.ev_count], 0
; je .switch
add edx, SLOT_BASE+APP_EV_OFFSET
add edx, APP_EV_OFFSET
mov eax, [edx+APPOBJ.fd]
cmp eax, edx
@ -300,9 +298,7 @@ wait_event:
test [eax+EVENT.state], MANUAL_RESET
jnz .done
mov edx,[CURRENT_TASK]
shl edx,8
add edx, SLOT_BASE
mov edx,[current_slot]
pushfd
cli ;remove event from events
@ -575,15 +571,14 @@ get_event_for_app:
;mov edi,[TASK_BASE] ; mouse event
test [edi+TASKDATA.event_mask],dword 00100000b
jz no_mouse_event
mov eax,[CURRENT_TASK]
shl eax,8
test [eax+SLOT_BASE+APPDATA.event_mask],dword 00100000b
mov eax,[current_slot]
test [eax+APPDATA.event_mask],dword 00100000b
jz no_mouse_event
and [eax+SLOT_BASE+APPDATA.event_mask],dword 0xffffffff-00100000b
and [eax+APPDATA.event_mask],dword 0xffffffff-00100000b
popad
mov eax,6
ret
no_mouse_event:
no_mouse_event:
;mov edi,[TASK_BASE] ; DESKTOP BACKGROUND REDRAW
@ -594,42 +589,39 @@ get_event_for_app:
popad
mov eax,5
ret
no_eventoccur5:
no_eventoccur5:
;mov edi,[TASK_BASE] ; IPC
test [edi+TASKDATA.event_mask],dword 01000000b
jz no_ipc
mov eax,[CURRENT_TASK]
shl eax,8
test [eax+SLOT_BASE+APPDATA.event_mask],dword 01000000b
mov eax,[current_slot]
test [eax+APPDATA.event_mask],dword 01000000b
jz no_ipc
and [eax+SLOT_BASE+APPDATA.event_mask],dword 0xffffffff-01000000b
and [eax+APPDATA.event_mask],dword 0xffffffff-01000000b
popad
mov eax,7
ret
no_ipc:
no_ipc:
;mov edi,[TASK_BASE] ; STACK
test [edi+TASKDATA.event_mask],dword 10000000b
jz no_stack_event
mov eax,[CURRENT_TASK]
shl eax,8
test [eax+SLOT_BASE+APPDATA.event_mask],dword 10000000b
mov eax,[current_slot]
test [eax+APPDATA.event_mask],dword 10000000b
jz no_stack_event
and [eax+SLOT_BASE+APPDATA.event_mask],dword 0xffffffff-10000000b
and [eax+APPDATA.event_mask],dword 0xffffffff-10000000b
popad
mov eax,8
ret
no_stack_event:
no_stack_event:
test byte [edi+TASKDATA.event_mask+1], 1 ; DEBUG
jz .test_IRQ
mov eax, [CURRENT_TASK]
shl eax, 8
test byte [eax+SLOT_BASE+APPDATA.event_mask+1], byte 1
mov eax, [current_slot]
test byte [eax+APPDATA.event_mask+1], byte 1
jz .test_IRQ
and byte [eax+SLOT_BASE+APPDATA.event_mask+1], not 1
and byte [eax+APPDATA.event_mask+1], not 1
popad
mov eax, 9
ret

View File

@ -1773,18 +1773,15 @@ random_shaped_window:
test eax, eax
jne rsw_no_address
mov eax,[CURRENT_TASK]
shl eax,8
mov [eax+SLOT_BASE+APPDATA.wnd_shape],ebx
rsw_no_address:
mov eax,[current_slot]
mov [eax+APPDATA.wnd_shape],ebx
rsw_no_address:
cmp eax,1
jne rsw_no_scale
mov eax,[CURRENT_TASK]
shl eax,8
mov byte [eax+SLOT_BASE+APPDATA.wnd_shape_scale], bl
rsw_no_scale:
mov eax,[current_slot]
mov byte [eax+APPDATA.wnd_shape_scale], bl
rsw_no_scale:
ret

View File

@ -424,6 +424,12 @@ high_code:
mov [graph_data_l+4],al
mov [graph_data_l+7],ah
mov [CURRENT_TASK],dword 1
mov [TASK_COUNT],dword 1
mov [TASK_BASE],dword TASK_DATA
mov [current_slot], SLOT_BASE+256
;!!!!!!!!!!!!!!!!!!!!!!!!!!
include 'detect/disks.inc'
;!!!!!!!!!!!!!!!!!!!!!!!!!!
@ -446,10 +452,6 @@ include 'vmodeld.inc'
; LOAD FONTS I and II
mov [CURRENT_TASK],dword 1
mov [TASK_COUNT],dword 1
mov [TASK_BASE],dword TASK_DATA
mov esi,char
xor ebx,ebx
mov ecx,2560
@ -577,6 +579,7 @@ include 'vmodeld.inc'
; task list
mov [CURRENT_TASK],dword 1
mov [TASK_COUNT],dword 1
mov [current_slot], SLOT_BASE+256
mov [TASK_DATA+TASKDATA.wnd_number], 1 ; on screen number
mov [TASK_DATA+TASKDATA.pid], 1 ; process id number
mov [TASK_DATA+TASKDATA.mem_start], 0 ; process base address
@ -3986,11 +3989,10 @@ sys_putimage:
.exit:
ret
@@:
mov edi,[CURRENT_TASK]
shl edi,8
add dx,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
mov edi,[current_slot]
add dx,word[edi+APPDATA.wnd_clientbox.top]
rol edx,16
add dx,word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add dx,word[edi+APPDATA.wnd_clientbox.left]
rol edx,16
.forced:
push ebp esi 0
@ -4089,12 +4091,11 @@ putimage_get32bpp:
; edi color
__sys_drawbar:
mov esi,[CURRENT_TASK]
shl esi,8
add eax,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add ecx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add ebx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
add edx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
mov esi,[current_slot]
add eax,[esi+APPDATA.wnd_clientbox.left]
add ecx,[esi+APPDATA.wnd_clientbox.left]
add ebx,[esi+APPDATA.wnd_clientbox.top]
add edx,[esi+APPDATA.wnd_clientbox.top]
.forced:
inc [mouse_pause]
; call [disable_mouse]
@ -4623,10 +4624,9 @@ syscall_setpixel: ; SetPixel
mov edx,[TASK_BASE]
add eax,[edx-twdw+WDATA.box.left]
add ebx,[edx-twdw+WDATA.box.top]
mov edi,[CURRENT_TASK]
shl edi,8
add eax,[edi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add ebx,[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
mov edi,[current_slot]
add eax,[edi+APPDATA.wnd_clientbox.left]
add ebx,[edi+APPDATA.wnd_clientbox.top]
xor edi,edi ; no force
; mov edi,1
call [disable_mouse]
@ -4636,20 +4636,19 @@ align 4
syscall_writetext: ; WriteText
mov edi,[TASK_BASE]
mov ebp,[edi-twdw+WDATA.box.left]
push esi
mov esi,[CURRENT_TASK]
shl esi,8
add ebp,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
shl ebp,16
add ebp,[edi-twdw+WDATA.box.top]
add bp,word[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
pop esi
add ecx,[edi+TASKDATA.mem_start]
add eax,ebp
xor edi,edi
jmp dtext
mov edi,[TASK_BASE]
mov ebp,[edi-twdw+WDATA.box.left]
push esi
mov esi,[current_slot]
add ebp,[esi+APPDATA.wnd_clientbox.left]
shl ebp,16
add ebp,[edi-twdw+WDATA.box.top]
add bp,word[esi+APPDATA.wnd_clientbox.top]
pop esi
add ecx,[edi+TASKDATA.mem_start]
add eax,ebp
xor edi,edi
jmp dtext
align 4
@ -4679,10 +4678,9 @@ syscall_drawrect: ; DrawRect
shr eax,16
movzx edx,bx
shr ebx,16
mov esi,[CURRENT_TASK]
shl esi,8
add eax,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add ebx,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
mov esi,[current_slot]
add eax,[esi+APPDATA.wnd_clientbox.left]
add ebx,[esi+APPDATA.wnd_clientbox.top]
add ecx,eax
add edx,ebx
jmp [drawbar]
@ -4761,17 +4759,16 @@ syscall_drawline: ; DrawLine
mov edi,[TASK_BASE]
movzx edx,word[edi-twdw+WDATA.box.left]
mov ebp,edx
mov esi,[CURRENT_TASK]
shl esi,8
add ebp,[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
add dx,word[esi+SLOT_BASE+APPDATA.wnd_clientbox.left]
mov esi,[current_slot]
add ebp,[esi+APPDATA.wnd_clientbox.left]
add dx,word[esi+APPDATA.wnd_clientbox.left]
shl edx,16
add ebp,edx
movzx edx,word[edi-twdw+WDATA.box.top]
add eax,ebp
mov ebp,edx
add ebp,[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
add dx,word[esi+SLOT_BASE+APPDATA.wnd_clientbox.top]
add ebp,[esi+APPDATA.wnd_clientbox.top]
add dx,word[esi+APPDATA.wnd_clientbox.top]
shl edx,16
xor edi,edi
add edx,ebp

View File

@ -134,10 +134,10 @@
; 0x80080000 -> 8FFFF additional app info, in 256 byte steps - 256 entries
;
; 00 11db name of app running
; 10 dword pointer to fpu save area
; 14 dword event count
; 18 dword user fpu exceptoins handler
; 1c dword user sse exceptions handler
; 0x10 dword pointer to fpu save area
; 0x14 dword event count
; 0x18 dword user fpu exceptoins handler
; 0x1c dword user sse exceptions handler
; 20 dword PL0 stack base
; 24 dword user heap base
; 28 dword user heap top
@ -234,4 +234,252 @@
; 0xFE000000 -> 0xFE7FFFFF application available LFB 8Mb
; 0xFE800000 -> 0xFFFFFFFF kernel LFB part 24 Mb
if 0
Ýòà áàäÿãà ñ êîïèðàéòàìè óæå çàäîëáàëà. Ïðèõîäèòñÿ äåëàòü âñ¸ ñàìîìó
Âîò ïðîåêò çàãîëîâêîâ.
Äëÿ ñðàâíåíèÿ ÿ áðàë èñõîäíèêè MeOS 079p1
Åñëè ôàéë ïîïàë â îäèí èç ñïèñêîâ îøèáî÷íî, óêàæèòå.
Ñïèñîê ðàçðàáîò÷èêîâ ÿäðà KolibriOS âçÿò èç ïîñëåäíåãî äèñòðèáóòèâà.
Åñëè êîãî-òî çàáûëè, óêàæèòå
×åðåç äâå íåäåëè ÿ ïðîñòàâëþ çàãîëîâêè íà âñå ïåðå÷èñëåííûå ôàéëû.
kernel.asm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved.
;; PROGRAMMING:
;; Èâàí Ïîääóáíûé
;; Ìàðàò Çàêèÿíîâ (Mario79)
;; VaStaNi
;; Trans
;; Ìèõàèë Ñåìåíÿêî (mike.dld)
;; Ñåðãåé Êóçüìèí (Wildwest)
;; Õàëÿâèí Àíäðåé (halyavin)
;; Ìèõàèë Ëèñîâèí (Mihasik)
;; Àíäðåé Èãíàòüåâ (andrew_programmer)
;; NoName
;; Åâãåíèé Ãðå÷íèêîâ (Diamond)
;; Ìèõàéëîâ Èëüÿ (Ghost)
;; Ñåðãåé Ñåì¸íîâ (Serge)
;; Johnny_B
;;
;; Data in this file was originally part of MenuetOS project which is
;; distributed under the terms of GNU GPL. It is modified and redistributed as
;; part of KolibriOS project under the terms of GNU GPL.
;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa
;; PROGRAMMING:
;;
;; Ville Mikael Turjanmaa, villemt@itu.jyu.fi
;; - main os coding/design
;; Jan-Michael Brummer, BUZZ2@gmx.de
;; Felix Kaiser, info@felix-kaiser.de
;; Paolo Minazzi, paolo.minazzi@inwind.it
;; quickcode@mail.ru
;; Alexey, kgaz@crosswinds.net
;; Juan M. Caravaca, bitrider@wanadoo.es
;; kristol@nic.fi
;; Mike Hibbett, mikeh@oceanfree.net
;; Lasse Kuusijarvi, kuusijar@lut.fi
;; Jarek Pelczar, jarekp3@wp.pl
;;
;; KolibriOS is distributed in the hope that it will be useful, but WITHOUT ANY
;; WARRANTY. No author or distributor accepts responsibility to anyone for the
;; consequences of using it or for whether it serves any particular purpose or
;; works at all, unless he says so in writing. Refer to the GNU General Public
;; License (the "GPL") for full details.
;
;; Everyone is granted permission to copy, modify and redistribute KolibriOS,
;; but only under the conditions described in the GPL. A copy of this license
;; is supposed to have been given to you along with KolibriOS so you can know
;; your rights and responsibilities. It should be in a file named COPYING.
;; Among other things, the copyright notice and this notice must be preserved
;; on all copies.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Íà ýòèõ ôàéëàõ óæå ñòîÿò ðàçëè÷íûå êîïèðàéòû
Áóäåò äîáàâëåí êîïèðàéò KolibriOS Team
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved.
;;
;; Distributed under terms of the GNU General Public License
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fdo.inc
kernel16.inc
kernel32.inc
vmodeld.inc
vmodeint.inc
blkdev/cd_drv.inc
blkdev/flp_drv.inc
blkdev/hd_drv.inc
blkdev/rd.inc
boot/shutdown.inc
bus/pci/pci16.inc
bus/pci/pci32.inc
core/sync.inc
core/sys32.inc
detect/commouse.inc
detect/dev_fd.inc
detect/dev_hdcd.inc
detect/sear_par.inc
fs/fat12.inc
fs/fat32.inc
fs/fs.inc
fs/fs_lfn.inc
fs/part_set.inc
network/icmp.inc
network/ip.inc
network/queue.inc
network/socket.inc
network/stack.inc
network/tcp.inc
network/udp.inc
network/eth_drv/arp.inc
network/eth_drv/ethernet.inc
network/eth_drv/drivers/3c59x.inc
network/eth_drv/drivers/i8255x.inc
network/eth_drv/drivers/pcnet32.inc
network/eth_drv/drivers/rtl8029.inc
network/eth_drv/drivers/rtl8139.inc
network/eth_drv/drivers/rtl8169.inc
network/eth_drv/drivers/sis900.inc
sound/playnote.inc
video/vesa12.inc
video/vesa20.inc
video/vga.inc
Ôàéëû áåç êîïèðàéòîâ ñ êîäîì èç ÌåÎÑ
Áóäóò äîáàâëåíû êîïèðàéòû KolibriOS Team è
Menuet OS Team
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved.
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa
;;
;; Distributed under terms of the GNU General Public License
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
blkdev/cdrom.inc
blkdev/fdc.inc
boot/bootcode.inc
core/sched.inc
gui/button.inc
gui/event.inc
gui/mouse.inc
gui/window.inc
hid/keyboard.inc
sound/sb16.inc
Ôàëû ñ êîïèðàéòîì òîëüêî KolibriOS Team
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved.
;;
;; Distributed under terms of the GNU General Public License
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
kglobals.inc
unpacker.inc
const.inc
blkdev/rdsave.inc
boot/preboot.inc
boot/rdload.inc
core/debug.inc
core/dll.inc
core/exports.inc
core/fpu.inc
core/heap.inc
core/malloc.inc
core/memory.inc
core/syscall.inc
core/taskman.inc
detect/disks.inc
detect/ps2mouse.inc
docs/apm.txt
docs/sysfuncr.txt
docs/sysfuncs.txt
drivers/ati2d.asm
drivers/ensoniq.asm
drivers/infinity.asm
drivers/mixer.asm
drivers/sceletone.asm
drivers/sis.asm
drivers/sound.asm
drivers/codec.inc
drivers/imports.inc
drivers/main.inc
drivers/mix_mmx.inc
drivers/mix_sse2.inc
fs/iso9660.inc
fs/ntfs.inc
gui/font.inc
gui/skincode.inc
gui/skindata.inc
hid/m_com1.inc
hid/m_com2.inc
hid/m_ps2.inc
hid/mousedrv.inc
hid/set_dtc.inc
network/eth_drv/pci.inc
skin/default.asm
skin/me_skin.inc
video/cursors.inc
ôàéëû êîòîðûå ìîæíî îñòàâèòü áåç êîïèðàéòà
memmap.inc
boot/booteng.inc
boot/bootet.inc
boot/bootge.inc
boot/bootru.inc
boot/et.inc
boot/ru.inc
end if

View File

@ -267,15 +267,13 @@ proc set_cursor stdcall, hcursor:dword
jne .fail
; cmp [eax+CURSOR.size], CURSOR_SIZE
; jne .fail
mov ebx, [CURRENT_TASK]
shl ebx, 8
xchg eax, [ebx+SLOT_BASE+APPDATA.cursor]
mov ebx, [current_slot]
xchg eax, [ebx+APPDATA.cursor]
ret
.fail:
mov eax, [def_cursor]
mov ebx, [CURRENT_TASK]
shl ebx, 8
xchg eax, [ebx+SLOT_BASE+APPDATA.cursor]
mov ebx, [current_slot]
xchg eax, [ebx+APPDATA.cursor]
ret
endp
@ -398,12 +396,11 @@ proc delete_cursor stdcall, hcursor:dword
cmp ebx, [esi+CURSOR.pid]
jne .fail
mov ebx, [CURRENT_TASK]
shl ebx, 8
cmp esi, [ebx+SLOT_BASE+APPDATA.cursor]
mov ebx, [current_slot]
cmp esi, [ebx+APPDATA.cursor]
jne @F
mov eax, [def_cursor]
mov [ebx+SLOT_BASE+APPDATA.cursor], eax
mov [ebx+APPDATA.cursor], eax
@@:
mov eax, [hcursor]
call [eax+APPOBJ.destroy]