Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 378 → Rev 379

/kernel/trunk/kernel.asm
504,9 → 504,9
 
; LOAD FONTS I and II
 
mov [0x3000],dword 1
mov [0x3004],dword 1
mov [0x3010],dword 0x3020
mov [CURRENT_TASK],dword 1
mov [TASK_COUNT],dword 1
mov [TASK_BASE],dword TASK_DATA
 
mov esi,char
xor ebx,ebx
636,9 → 636,9
mov dword [0x80000+256+APPDATA.bk_obj], ebx
 
; task list
mov [0x3020+TASKDATA.wnd_number], 1 ; on screen number
mov [0x3020+TASKDATA.pid], 1 ; process id number
mov [0x3020+TASKDATA.mem_start], 0 ; process base address
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
 
mov edi,tss_data+tss_step
mov ecx, (tss_step)/4
719,8 → 719,8
call load_skin
 
; LOAD FIRST APPLICATION
mov [0x3000],dword 1
mov [0x3004],dword 1
mov [CURRENT_TASK],dword 1
mov [TASK_COUNT],dword 1
cli
cmp byte [0x2f0000+0x9030],1
jne no_load_vrr_m
744,8 → 744,8
first_app_found:
cli
 
;mov [0x3004],dword 2
mov [0x3000],dword 1 ; set OS task fisrt
;mov [TASK_COUNT],dword 2
mov [CURRENT_TASK],dword 1 ; set OS task fisrt
 
 
; SET KEYBOARD PARAMETERS
1061,7 → 1061,7
ret
 
sopl8:
mov edx,[0x3010]
mov edx,[TASK_BASE]
mov edx,[edx+0x4]
and ebx,65535
cld
1326,7 → 1326,7
; edx length
; edi 1 force
 
; mov edi,[0x3000]
; mov edi,[CURRENT_TASK]
; shl edi,8
; add ax,word[edi+0x80000+APPDATA.wnd_clientbox.top]
; rol eax,16
1339,12 → 1339,12
add ecx,esp
mov eax,[esp+64+32-8+4]
push edx ; add window start x & y
mov edx,[0x3010]
mov edx,[TASK_BASE]
mov ebx,[edx-twdw+WDATA.box.left]
add ebx, [(edx-0x3000)*8+0x80000+APPDATA.wnd_clientbox.left]
add ebx, [(edx-CURRENT_TASK)*8+0x80000+APPDATA.wnd_clientbox.left]
shl ebx,16
add ebx,[edx-twdw+WDATA.box.top]
add ebx, [(edx-0x3000)*8+0x80000+APPDATA.wnd_clientbox.top]
add ebx, [(edx-CURRENT_TASK)*8+0x80000+APPDATA.wnd_clientbox.top]
add eax,ebx
pop edx
mov ebx,[esp+64+32-12+4]
1405,7 → 1405,7
jnz nsyse2
cmp ebx,1
jnz kbnobase
mov edi,[0x3010]
mov edi,[TASK_BASE]
add ecx,[edi+TASKDATA.mem_start]
mov eax,ecx
mov ebx,keymap
1415,7 → 1415,7
kbnobase:
cmp ebx,2
jnz kbnoshift
mov edi,[0x3010]
mov edi,[TASK_BASE]
add ecx,[edi+TASKDATA.mem_start]
mov eax,ecx
mov ebx,keymap_shift
1425,7 → 1425,7
kbnoshift:
cmp ebx,3
jne kbnoalt
mov edi,[0x3010]
mov edi,[TASK_BASE]
add ecx,[edi+TASKDATA.mem_start]
mov eax,ecx
mov ebx,keymap_alt
1608,7 → 1608,7
jne ngsyse2
cmp ebx,1
jnz kbnobaseret
mov edi,[0x3010]
mov edi,[TASK_BASE]
add ecx,[edi+TASKDATA.mem_start]
mov ebx,ecx
mov eax,keymap
1618,7 → 1618,7
kbnobaseret:
cmp ebx,2
jnz kbnoshiftret
mov edi,[0x3010]
mov edi,[TASK_BASE]
add ecx,[edi+TASKDATA.mem_start]
mov ebx,ecx
mov eax,keymap_shift
1628,7 → 1628,7
kbnoshiftret:
cmp ebx,3
jne kbnoaltret
mov edi,[0x3010]
mov edi,[TASK_BASE]
add ecx,[edi+TASKDATA.mem_start]
mov ebx,ecx
mov eax,keymap_alt
1733,7 → 1733,7
mov eax,[0xfb0a]
shl eax,16
mov ax,[0xfb0c]
mov esi,[0x3010]
mov esi,[TASK_BASE]
mov bx, word [esi-twdw+WDATA.box.left]
shl ebx,16
mov bx, word [esi-twdw+WDATA.box.top]
1884,7 → 1884,7
 
sys_end:
 
mov eax,[0x3010]
mov eax,[TASK_BASE]
mov [eax+TASKDATA.state], 3 ; terminate this program
 
waitterm: ; wait here for termination
1931,7 → 1931,7
mov [0x2f0000+0x9030],byte 0
for_shutdown_parameter:
 
mov eax,[0x3004]
mov eax,[TASK_COUNT]
add eax,2
mov [shutdown_processes],eax
mov [0xFF00],al
1944,13 → 1944,13
sysfn_terminate: ; 18.2 = TERMINATE
cmp ebx,2
jb noprocessterminate
mov edx,[0x3004]
mov edx,[TASK_COUNT]
cmp ebx,edx
ja noprocessterminate
mov eax,[0x3004]
mov eax,[TASK_COUNT]
shl ebx,5
mov edx,[ebx+0x3000+TASKDATA.pid]
add ebx,0x3000+TASKDATA.state
mov edx,[ebx+CURRENT_TASK+TASKDATA.pid]
add ebx,CURRENT_TASK+TASKDATA.state
cmp byte [ebx], 9
jz noprocessterminate
 
1995,13 → 1995,13
sysfn_activate: ; 18.3 = ACTIVATE WINDOW
cmp ebx,2
jb .nowindowactivate
cmp ebx,[0x3004]
cmp ebx,[TASK_COUNT]
ja .nowindowactivate
 
mov [window_minimize], 2 ; restore window if minimized
 
movzx esi, word [0xC000 + ebx*2]
cmp esi, [0x3004]
cmp esi, [TASK_COUNT]
je .nowindowactivate ; already active
 
mov edi, ebx
2029,7 → 2029,7
;!!!!!!!!!!!!!!!!!!!!!!!!
 
sysfn_getactive: ; 18.7 = get active window
mov eax, [0x3004]
mov eax, [TASK_COUNT]
movzx eax, word [0xC400 + eax*2]
mov [esp+36],eax
ret
2070,7 → 2070,7
rep movsb
ret
for_all_tables:
mov edi,[0x3010]
mov edi,[TASK_BASE]
mov edi,[edi+TASKDATA.mem_start]
add edi,ecx
mov esi,0x40000
2089,7 → 2089,7
ret
 
sysfn_getversion: ; 18.13 = get kernel ID and version
mov edi,[0x3010]
mov edi,[TASK_BASE]
mov edi,[edi+TASKDATA.mem_start]
add edi,ebx
mov esi,version_inf
2285,7 → 2285,7
cmp eax,5 ; BLOCK MOVE TO BGR
jnz nosb5
; bughere
mov edi, [0x3010]
mov edi, [TASK_BASE]
add ebx, [edi+TASKDATA.mem_start]
; mov esi, ebx
; mov edi, ecx
2347,9 → 2347,9
sys_getkey:
mov [esp+36],dword 1
; test main buffer
mov ebx, [0x3000] ; TOP OF WINDOW STACK
mov ebx, [CURRENT_TASK] ; TOP OF WINDOW STACK
movzx ecx,word [0xC000 + ebx * 2]
mov edx,[0x3004]
mov edx,[TASK_COUNT]
cmp ecx,edx
jne .finish
cmp [0xf400],byte 0
2395,10 → 2395,10
 
sys_getbutton:
 
mov ebx, [0x3000] ; TOP OF WINDOW STACK
mov ebx, [CURRENT_TASK] ; TOP OF WINDOW STACK
mov [esp+36],dword 1
movzx ecx, word [0xC000 + ebx * 2]
mov edx, [0x3004] ; less than 256 processes
mov edx, [TASK_COUNT] ; less than 256 processes
cmp ecx,edx
jne .exit
movzx eax,byte [0xf500]
2427,12 → 2427,12
; +30 dword PID , process idenfification number
;
 
mov edi,[0x3010] ; eax = return area
mov edi,[TASK_BASE] ; eax = return area
add eax,[edi + TASKDATA.mem_start]
 
cmp ebx,-1 ; who am I ?
jne no_who_am_i
mov ebx,[0x3000]
mov ebx,[CURRENT_TASK]
no_who_am_i:
 
push eax ; return area
2447,7 → 2447,7
xor edx,edx
mov eax,0x20
mul ebx
add eax,0x3000+TASKDATA.cpu_usage
add eax,CURRENT_TASK+TASKDATA.cpu_usage
mov ebx,eax
pop eax
mov ecx,[ebx]
2486,7 → 2486,7
 
mov eax,[esp]
shl eax,5
add eax,0x3000+TASKDATA.pid
add eax,CURRENT_TASK+TASKDATA.pid
mov eax,[eax]
mov [ebx+20],eax
 
2505,7 → 2505,7
 
mov eax,[esp]
shl eax,5
add eax,0x3000+TASKDATA.state
add eax,CURRENT_TASK+TASKDATA.state
mov eax,[eax]
mov [ebx+40],ax
 
2531,7 → 2531,7
 
; return number of processes
 
mov eax,[0x3004]
mov eax,[TASK_COUNT]
mov [esp+36],eax
ret
 
2618,7 → 2618,7
 
; buttons away
 
mov ecx,[0x3000]
mov ecx,[CURRENT_TASK]
 
sys_newba2:
 
2661,8 → 2661,8
cmp eax,2
jnz srl1
 
mov edx,[0x3010] ; return whole screen draw area for this app
add edx,draw_data-0x3000
mov edx,[TASK_BASE] ; return whole screen draw area for this app
add edx,draw_data-CURRENT_TASK
mov [edx+RECT.left], 0
mov [edx+RECT.top], 0
mov eax,[0xfe00]
2670,7 → 2670,7
mov eax,[0xfe04]
mov [edx+RECT.bottom],eax
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
or [edi-twdw+WDATA.fl_wdrawn], 1 ; no new position & buttons from app
 
call sys_window_mouse
2731,9 → 2731,9
 
; parameter for drawwindow_IV
push 0
mov edi, [0x3004]
mov edi, [TASK_COUNT]
movzx edi, word [0xC400 + edi*2]
cmp edi, [0x3000]
cmp edi, [CURRENT_TASK]
jne @f
inc dword [esp]
@@:
2757,12 → 2757,12
call [disable_mouse]
 
xor eax,eax
mov edx,[0x3004]
mov edx,[TASK_COUNT]
movzx edx,word[0xC400+edx*2]
cmp edx,[0x3000]
cmp edx,[CURRENT_TASK]
jne @f
inc eax
@@: mov edx,[0x3000]
@@: mov edx,[CURRENT_TASK]
shl edx,5
add edx,window_data
movzx ebx,[edx+WDATA.fl_wstyle]
2790,7 → 2790,7
 
;--------------------------------------------------------------
.2: ;jmp @f
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
shl edi,5
test [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
jz @f
2913,7 → 2913,7
 
sys_set_window:
 
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
shl edi,5
add edi,window_data
 
2996,7 → 2996,7
; NOTE: only window owner thread can set its caption,
; so there's no parameter for PID/TID
 
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
shl edi,5
 
; have to check if caption is within application memory limit
3031,7 → 3031,7
 
sys_window_move:
 
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
shl edi,5
add edi,window_data
 
3299,7 → 3299,7
jne mouse_not_active
mov [mouse_active], 0
xor edi, edi
mov ecx, [0x3004]
mov ecx, [TASK_COUNT]
set_mouse_event:
add edi, 256
or [edi+0x80000+APPDATA.event_mask], dword 00100000b
3357,8 → 3357,8
noshutdown:
 
 
mov eax,[0x3004] ; termination
mov ebx,0x3020+TASKDATA.state
mov eax,[TASK_COUNT] ; termination
mov ebx,TASK_DATA+TASKDATA.state
mov esi,1
 
newct:
3475,7 → 3475,7
 
pop ecx
 
cmp ecx,[0x3004]
cmp ecx,[TASK_COUNT]
jle newdw2
 
pop eax
3545,7 → 3545,7
set_app_param:
push edi
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
mov [edi+TASKDATA.event_mask],eax
 
pop edi
3634,7 → 3634,7
;; 5 file not found
;; ebx = size of file
;
; mov edi,[0x3010]
; mov edi,[TASK_BASE]
; add edi,0x10
; add esi,[edi]
; add eax,[edi]
3662,12 → 3662,12
 
sys_programirq:
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
add eax,[edi+TASKDATA.mem_start]
 
cmp ebx,16
jae .not_owner
mov edi,[0x3010]
mov edi,[TASK_BASE]
mov edi,[edi+TASKDATA.pid]
cmp edi,[irq_owner+ebx*4]
je spril1
3696,7 → 3696,7
shl edx,2
add edx,irq_owner
mov edx,[edx]
mov edi,[0x3010]
mov edi,[TASK_BASE]
mov edi,[edi+TASKDATA.pid]
cmp edx,edi
je gidril1
3736,7 → 3736,7
 
pushad
 
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
imul edi,tss_step
add edi,tss_data+128
; add edi,128
3844,7 → 3844,7
mov [0x2d0000],edi
shl edi,4
add edi,0x2d0000
mov esi,[0x3010]
mov esi,[TASK_BASE]
mov esi,[esi+TASKDATA.pid]
mov [edi],esi
mov [edi+4],ebx
3860,7 → 3860,7
mov esi,[0x2d0000] ; no reserved areas ?
test esi,esi
je frpal2
mov edx,[0x3010]
mov edx,[TASK_BASE]
mov edx,[edx+TASKDATA.pid]
frpal3:
mov edi,esi
3934,7 → 3934,7
 
lea edi,[irq_owner+ebx*4]
mov edx,[edi]
mov eax,[0x3010]
mov eax,[TASK_BASE]
cmp edx,[eax+TASKDATA.pid]
jne fril1
dec ecx
3949,7 → 3949,7
cmp dword [edi], 0
jnz ril1
 
mov edx,[0x3010]
mov edx,[TASK_BASE]
mov edx,[edx+TASKDATA.pid]
mov [edi],edx
dec ecx
4001,7 → 4001,7
.exit:
ret
@@:
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
shl edi,8
add dx,word[edi+0x80000+APPDATA.wnd_clientbox.top]
rol edx,16
4043,7 → 4043,7
; esi = number of bits per pixel, must be 8, 24 or 32
; edi = pointer to palette
; ebp = row delta
mov eax, [0x3000]
mov eax, [CURRENT_TASK]
shl eax, 8
add dx, word [eax+0x80000+APPDATA.wnd_clientbox.top]
rol edx, 16
4104,7 → 4104,7
; edi color
 
__sys_drawbar:
mov esi,[0x3000]
mov esi,[CURRENT_TASK]
shl esi,8
add eax,[esi+0x80000+APPDATA.wnd_clientbox.left]
add ecx,[esi+0x80000+APPDATA.wnd_clientbox.left]
4474,7 → 4474,7
 
 
sys_process_def:
mov edi, [0x3000]
mov edi, [CURRENT_TASK]
 
dec eax ; 1 = set keyboard mode
jne no_set_keyboard_setup
4635,10 → 4635,10
syscall_setpixel: ; SetPixel
 
 
mov edx,[0x3010]
mov edx,[TASK_BASE]
add eax,[edx-twdw+WDATA.box.left]
add ebx,[edx-twdw+WDATA.box.top]
mov edi,[0x3000]
mov edi,[CURRENT_TASK]
shl edi,8
add eax,[edi+0x80000+APPDATA.wnd_clientbox.left]
add ebx,[edi+0x80000+APPDATA.wnd_clientbox.top]
4651,10 → 4651,10
 
syscall_writetext: ; WriteText
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
mov ebp,[edi-twdw+WDATA.box.left]
push esi
mov esi,[0x3000]
mov esi,[CURRENT_TASK]
shl esi,8
add ebp,[esi+0x80000+APPDATA.wnd_clientbox.left]
shl ebp,16
4671,7 → 4671,7
syscall_openramdiskfile: ; OpenRamdiskFile
 
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
add edi,TASKDATA.mem_start
add eax,[edi]
add edx,[edi]
4694,7 → 4694,7
shr eax,16
movzx edx,bx
shr ebx,16
mov esi,[0x3000]
mov esi,[CURRENT_TASK]
shl esi,8
add eax,[esi+0x80000+APPDATA.wnd_clientbox.left]
add ebx,[esi+0x80000+APPDATA.wnd_clientbox.top]
4726,7 → 4726,7
 
syscall_delramdiskfile: ; DelRamdiskFile
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
add edi,TASKDATA.mem_start
add eax,[edi]
call filedelete
4737,7 → 4737,7
 
syscall_writeramdiskfile: ; WriteRamdiskFile
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
add edi,TASKDATA.mem_start
add eax,[edi]
add ebx,[edi]
4762,7 → 4762,7
 
syscall_readstring: ; ReadString
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
add edi,TASKDATA.mem_start
add eax,[edi]
call read_string
4773,10 → 4773,10
 
syscall_drawline: ; DrawLine
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
movzx edx,word[edi-twdw+WDATA.box.left]
mov ebp,edx
mov esi,[0x3000]
mov esi,[CURRENT_TASK]
shl esi,8
add ebp,[esi+0x80000+APPDATA.wnd_clientbox.left]
add dx,word[esi+0x80000+APPDATA.wnd_clientbox.left]
4860,7 → 4860,7
 
read_from_hd: ; Read from hd - fn not in use
 
mov edi,[0x3010]
mov edi,[TASK_BASE]
add edi,TASKDATA.mem_start
add eax,[edi]
add ecx,[edi]
4924,7 → 4924,7
 
; push edi
 
; mov edi,[0x3000] ; restore processes tss pointer in gdt, busyfl?
; mov edi,[CURRENT_TASK] ; restore processes tss pointer in gdt, busyfl?
; imul edi,8
; mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b