Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9931 → Rev 9932

/kernel/trunk/blkdev/flp_drv.inc
14,10 → 14,6
; Source code author - Kulakov Vladimir Gennadievich.
; Adaptation and improvement - Mario79.
 
;give_back_application_data: ; give back to application
; mov edi,[TASK_BASE]
; mov edi,[edi+TASKDATA.mem_start]
; add edi,ecx
give_back_application_data_1:
mov esi, FDD_BUFF;FDD_DataBuffer ;0x40000
mov ecx, 128
25,10 → 21,6
rep movsd
ret
 
;take_data_from_application: ; take from application
; mov esi,[TASK_BASE]
; mov esi,[esi+TASKDATA.mem_start]
; add esi,ecx
take_data_from_application_1:
mov edi, FDD_BUFF;FDD_DataBuffer ;0x40000
mov ecx, 128
/kernel/trunk/const.inc
225,17 → 225,8
window_data = OS_BASE + 0x0001000
background_window = window_data + sizeof.WDATA
 
;TASK_TABLE = OS_BASE + 0x0003000
;CURRENT_TASK = OS_BASE + 0x0003000
;TASK_COUNT = OS_BASE + 0x0003004
;TASK_BASE = OS_BASE + 0x0003010
;TASK_DATA = OS_BASE + 0x0003020
;TASK_EVENT = OS_BASE + 0x0003020
 
;CDDataBuf = OS_BASE + 0x0005000
 
;unused 0x6000 - 0x8fff
 
BOOT_VARS = 0x9000
 
idts = OS_BASE + 0x000B100
483,8 → 474,6
height dd ?
ends
 
; Fields, marked as R now not used, but will be used soon,
; when legacy TASKDATA structure will be deleted
struct APPDATA
app_name rb 11
rb 5
520,7 → 509,7
window dd ? ;+128 ptr WDATA
dd ? ;+132
dd ? ;+136
counter_sum dd ? ;+140 ; R
counter_sum dd ? ;+140
rd 4 ;+144
ipc_start dd ? ;+160
ipc_size dd ? ;+164
536,8 → 525,8
rd 4 ;+216
priority dd ? ;+232
in_schedule LHEAD ;+236
counter_add dd ? ;+244 ; R
cpu_usage dd ? ;+248 ; R
counter_add dd ? ;+244
cpu_usage dd ? ;+248
dd ? ;+252 ; temporary place to save cursor
ends
 
546,22 → 535,6
APP_OBJ_OFFSET = 48
APP_EV_OFFSET = 40
 
; Note: in future TASKDATA will be merged into APPDATA
;struct TASKDATA
; event_mask dd ? ;+0 mask which stores event types allowed for task
; pid dd ? ;+4
; dw ? ;+8
; state db ? ;+10
; db ? ;+11
; dw ? ;+12
; wnd_number db ? ;+14
; db ? ;+15
; mem_start dd ? ;+16
; counter_sum dd ? ;+20
; counter_add dd ? ;+24
; cpu_usage dd ? ;+28
;ends
 
; Thread states:
TSTATE_RUNNING = 0
TSTATE_RUN_SUSPENDED = 1
613,7 → 586,7
draw_bgr_y dd ?
draw_data RECT
thread dd ? ; prt APPDATA
rb 64 - 16 - 4*2 - 4*2 - 4 - 16
rb 12
ends
 
label WDATA.fl_wstyle byte at WDATA.cl_workarea + 3
/kernel/trunk/core/sched.inc
1,6 → 1,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;;
;; Copyright (C) KolibriOS team 2004-2023. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68,33 → 68,26
 
align 4
update_counters:
;mov edi, [TASK_BASE]
mov esi, [current_slot]
rdtsc
;sub eax, [edi+TASKDATA.counter_add] ; time stamp counter add
;add [edi+TASKDATA.counter_sum], eax ; counter sum
sub eax, [esi - sizeof.APPDATA + APPDATA.counter_add] ; time stamp counter add
add [esi - sizeof.APPDATA + APPDATA.counter_sum], eax ; counter sum
sub eax, [esi + APPDATA.counter_add] ; time stamp counter add
add [esi + APPDATA.counter_sum], eax ; counter sum
ret
 
align 4
updatecputimes:
mov ecx, [thread_count]
;mov edi, TASK_DATA
mov esi, SLOT_BASE
.newupdate:
xor eax, eax
;xchg eax, [edi+TASKDATA.counter_sum]
;mov [edi+TASKDATA.cpu_usage], eax
add esi, sizeof.APPDATA
xchg eax, [esi + APPDATA.counter_sum]
;add edi, 0x20
mov [esi + APPDATA.cpu_usage], eax
add esi, sizeof.APPDATA
loop .newupdate
ret
 
;TODO: Надо бы убрать использование do_change_task из V86...
; и после этого перенести обработку TASKDATA.counter_add/sum в do_change_task
; и после этого перенести обработку APPDATA.counter_add/sum в do_change_task
 
align 4
do_change_task:
266,10 → 259,9
; keep running the current thread if other ready threads have the same or lower priority
;retval:
; ebx = address of the APPDATA for the selected task (slot-base)
; edi = address of the TASKDATA for the selected task
; ZF = 1 if the task is the same
;warning:
; [current_slot_idx] = bh , [TASK_BASE] = edi -- as result
; [current_slot_idx] = bh -- as result
; [current_slot] is not set to new value (ebx)!!!
;scratched: eax,ecx
proc find_next_task
296,7 → 288,7
mov al, [ebx + APPDATA.state]
test al, al
jz .task_found ; state == 0
cmp al, 5
cmp al, TSTATE_WAITING
jne .task_next ; state == 1,2,3,4,9
; state == 5
pushad ; more freedom for [APPDATA.wait_test]
335,8 → 327,7
mov byte [current_slot_idx], bh
 
rdtsc ;call _rdtsc
mov [ebx - sizeof.APPDATA + APPDATA.counter_add], eax; for next using update_counters
;mov [edi+TASKDATA.counter_add], eax; for next using update_counters
mov [ebx + APPDATA.counter_add], eax; for next using update_counters
cmp ebx, [current_slot]
ret
.task_next:
/kernel/trunk/core/syscall.inc
141,7 → 141,7
dd set_app_param ; 40-WantEvents
dd undefined_syscall ; 41- deprecated GetIrqOwner
dd undefined_syscall ; 42- deprecated ReadIrqData
dd undefined_syscall ; 43-SendDeviceData
dd undefined_syscall ; 43- deprecated SendDeviceData
dd undefined_syscall ; 44- deprecated ProgramIrqs
dd undefined_syscall ; 45- deprecated ReserveIrq and FreeIrq
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
/kernel/trunk/core/taskman.inc
398,7 → 398,7
 
mov edi, [tmp_task_ptab]
stdcall map_page, edi, eax, PG_SWR
mov ecx, 1024
mov ecx, PAGE_SIZE/4
xor eax, eax
rep stosd
 
1086,14 → 1086,14
mov ebx, [thread_count]
shl ebx, BSF sizeof.APPDATA ; multiply by size
; skip first process in the task table
mov ecx, SLOT_BASE
add ebx, ecx
.loop:
add ecx, sizeof.APPDATA
cmp [SLOT_BASE + ecx + APPDATA.state], TSTATE_FREE
cmp [ecx + APPDATA.state], TSTATE_FREE
jz @f ;skip empty slots
cmp [SLOT_BASE + ecx + APPDATA.tid], eax
cmp [ecx + APPDATA.tid], eax
jz .pid_found
;ecx = offset of current process info entry
;ebx = maximum permitted offset
@@:
cmp ecx, ebx
jb .loop
/kernel/trunk/docs/events_subsystem.ru.txt
199,7 → 199,7
---------------------------------------------------------------------------------------------
GetEvent:
Бесконечно ожидает любое событие в очереди событий текущего потока. Поток замораживается
путем перевода TASKDATA.state<=TSTATE_WAITING=5. Данные события (EVENT.code+5*dword)
путем перевода APPDATA.state<=TSTATE_WAITING=5. Данные события (EVENT.code+5*dword)
по получении копируются в указанный буфер. Сбрасывает байт приоритета (см. выше) в буфере.
Если в полученном событии НЕ установлен MANUAL_RESET, то:
{EVENT_SIGNALED и EVENT_WATCHED по получении события сбрасываются.
/kernel/trunk/gui/window.inc
2173,8 → 2173,8
 
movzx edx, word[esi]
shl edx, BSF sizeof.WDATA
cmp byte [SLOT_BASE + edx*(sizeof.APPDATA/sizeof.WDATA) - sizeof.APPDATA + APPDATA.state], TSTATE_FREE
je .next_window
test byte [window_data + edx + WDATA.fl_wstate], WSTATE_USED
jz .next_window
 
mov eax, [edi + WDATA.box.top]
mov ebx, [edi + WDATA.box.height]
/kernel/trunk/kernel.asm
2229,8 → 2229,7
 
;------------------------------------------------------------------------------
sysfn_getidletime: ; 18.4 = GET IDLETIME
;mov eax, [TASK_TABLE+32+TASKDATA.cpu_usage]
mov eax, [SLOT_BASE + APPDATA.cpu_usage]
mov eax, [SLOT_BASE + sizeof.APPDATA + APPDATA.cpu_usage]
mov [esp + SYSCALL_STACK.eax], eax
ret
;------------------------------------------------------------------------------
2532,8 → 2531,7
shl ecx, BSF sizeof.APPDATA
 
; +0: dword: memory usage
;mov eax, [ecx+TASK_TABLE+TASKDATA.cpu_usage]
mov eax, [SLOT_BASE + ecx - sizeof.APPDATA + APPDATA.cpu_usage]
mov eax, [SLOT_BASE + ecx + APPDATA.cpu_usage]
mov [ebx], eax
; +10: 11 bytes: name of the process
push ecx
2543,7 → 2541,6
call memmove
pop ecx
 
shr ecx, (BSF sizeof.APPDATA - BSF sizeof.WDATA)
; +22: address of the process in memory
; +26: size of used memory - 1
push edi
2550,9 → 2547,9
lea edi, [ebx+12]
xor eax, eax
mov edx, 0x100000*16
cmp ecx, 1 shl BSF sizeof.WDATA
cmp ecx, 1 shl BSF sizeof.APPDATA
je .os_mem
mov edx, [SLOT_BASE + ecx*(sizeof.APPDATA/sizeof.WDATA) + APPDATA.process]
mov edx, [SLOT_BASE + ecx + APPDATA.process]
mov edx, [edx + PROC.mem_used]
mov eax, std_application_base_address
.os_mem:
2560,13 → 2557,16
lea eax, [edx-1]
stosd
 
mov edx, ecx
shr edx, (BSF sizeof.APPDATA - BSF sizeof.WDATA)
 
; +30: PID/TID
mov eax, [SLOT_BASE + ecx*(sizeof.APPDATA/sizeof.WDATA) + APPDATA.tid]
mov eax, [SLOT_BASE + ecx + APPDATA.tid]
stosd
 
; window position and size
push esi
lea esi, [window_data + ecx + WDATA.box]
lea esi, [window_data + edx + WDATA.box]
movsd
movsd
movsd
2573,11 → 2573,11
movsd
 
; Process state (+50)
movzx eax, byte [SLOT_BASE + ecx*(sizeof.APPDATA/sizeof.WDATA) + APPDATA.state]
movzx eax, byte [SLOT_BASE + ecx + APPDATA.state]
stosd
 
; Window client area box
lea esi, [window_data + ecx + WDATA.clientbox]
lea esi, [window_data + edx + WDATA.clientbox]
movsd
movsd
movsd
2584,15 → 2584,15
movsd
 
; Window state
mov al, [window_data + ecx + WDATA.fl_wstate]
mov al, [window_data + edx + WDATA.fl_wstate]
stosb
 
; Event mask (+71)
mov EAX, dword [SLOT_BASE + ecx*(sizeof.APPDATA/sizeof.WDATA) + APPDATA.event_mask]
mov eax, dword [SLOT_BASE + ecx + APPDATA.event_mask]
stosd
 
; Keyboard mode (+75)
mov al, byte [SLOT_BASE + ecx*(sizeof.APPDATA/sizeof.WDATA) + APPDATA.keyboard_mode]
mov al, byte [SLOT_BASE + ecx + APPDATA.keyboard_mode]
stosb
 
pop esi