1363,10 → 1363,17 |
; add check pointers |
test bl, bl |
jz @f |
stdcall is_region_userspace, ecx, 1 |
bt ebx, 30 ; check 30 bit |
jb @f |
stdcall is_region_userspace, ecx, 4 |
jz @f |
ret |
@@: |
jz @f |
stdcall is_region_userspace, ecx, 8 |
jz @f |
ret |
@@: |
test esi, 0x08000000 |
jz @f |
stdcall is_region_userspace, edi, 1 |
1882,16 → 1889,6 |
smn2: |
ret |
|
detect_devices: |
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
;include 'detect/commouse.inc' |
;include 'detect/ps2mouse.inc' |
;include 'detect/dev_fd.inc' |
;include 'detect/dev_hdcd.inc' |
;include 'detect/sear_par.inc' |
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
ret |
|
sys_end: |
;-------------------------------------- |
cmp [_display.select_cursor], 0 |
2024,27 → 2021,27 |
sysfn_terminate: ; 18.2 = TERMINATE |
push ecx |
cmp ecx, 2 |
jb noprocessterminate |
jb .noprocessterminate |
mov edx, [thread_count] |
cmp ecx, edx |
ja noprocessterminate |
ja .noprocessterminate |
mov eax, [thread_count] |
shl ecx, BSF sizeof.APPDATA |
add ecx, SLOT_BASE |
mov edx, [ecx + APPDATA.tid] |
cmp byte [ecx + APPDATA.state], TSTATE_FREE |
jz noprocessterminate |
jz .noprocessterminate |
push eax |
mov eax, ecx |
call is_kernel_thread |
pop eax |
jz noprocessterminate |
jz .noprocessterminate |
push ecx edx |
mov edx, ecx |
call request_terminate |
pop edx ecx |
test eax, eax |
jz noprocessterminate |
jz .noprocessterminate |
;-------------------------------------- |
; terminate all network sockets it used |
pusha |
2073,10 → 2070,10 |
;call MEM_Heap_UnLock |
|
cmp edx, [application_table_owner]; clear app table stat |
jne noatsc |
jne .noatsc |
call unlock_application_table |
noatsc: |
noprocessterminate: |
.noatsc: |
.noprocessterminate: |
add esp, 4 |
ret |
;------------------------------------------------------------------------------ |
2496,7 → 2493,7 |
|
align 4 |
sys_getkey: |
mov [esp + 32], dword 1 |
mov [esp + SYSCALL_STACK.eax], dword 1 |
; test main buffer |
mov ebx, [current_slot_idx] ; TOP OF WINDOW STACK |
movzx ecx, word [WIN_STACK + ebx * 2] |
2688,23 → 2685,23 |
align 4 |
sys_redrawstat: |
cmp ebx, 1 |
jne no_widgets_away |
jne .no_widgets_away |
; buttons away |
mov ecx, [current_slot_idx] |
sys_newba2: |
.sys_newba2: |
mov edi, [BTN_ADDR] |
cmp [edi], dword 0 ; empty button list ? |
je end_of_buttons_away |
je .end_of_buttons_away |
movzx ebx, word [edi] |
inc ebx |
mov eax, edi |
sys_newba: |
.sys_newba: |
dec ebx |
jz end_of_buttons_away |
jz .end_of_buttons_away |
|
add eax, 0x10 |
cmp cx, [eax] |
jnz sys_newba |
jnz .sys_newba |
|
push eax ebx ecx |
mov ecx, ebx |
2716,16 → 2713,15 |
dec dword [edi] |
pop ecx ebx eax |
|
jmp sys_newba2 |
jmp .sys_newba2 |
|
end_of_buttons_away: |
|
.end_of_buttons_away: |
ret |
|
no_widgets_away: |
.no_widgets_away: |
|
cmp ebx, 2 |
jnz srl1 |
jnz .srl1 |
|
mov edx, [current_slot_idx] ; return whole screen draw area for this app |
shl edx, 5 ;? |
2739,7 → 2735,7 |
dec eax |
mov [edx + RECT.bottom], eax |
|
srl1: |
.srl1: |
ret |
|
;ok - 100% work |
2878,7 → 2874,7 |
align 4 |
checkmisc: |
cmp [ctrl_alt_del], 1 |
jne nocpustart |
jne .nocpustart |
|
mov ebp, cpustring |
call fs_execute_from_sysdir |
2886,9 → 2882,9 |
mov [ctrl_alt_del], 0 |
;-------------------------------------- |
align 4 |
nocpustart: |
.nocpustart: |
cmp [mouse_active], 1 |
jne mouse_not_active |
jne .mouse_not_active |
mov [mouse_active], 0 |
|
xor edi, edi |
2942,7 → 2938,7 |
pop eax |
;-------------------------------------- |
align 4 |
mouse_not_active: |
.mouse_not_active: |
cmp [REDRAW_BACKGROUND], 0 ; background update ? |
jz nobackgr |
|
3425,18 → 3421,18 |
mov edx, [timer_ticks] |
;-------------------------------------- |
align 4 |
newtic: |
.newtic: |
mov ecx, [timer_ticks] |
sub ecx, edx |
cmp ecx, ebx |
jae zerodelay |
jae .zerodelay |
|
call change_task |
|
jmp newtic |
jmp .newtic |
;-------------------------------------- |
align 4 |
zerodelay: |
.zerodelay: |
pop edx |
pop ecx |
ret |
3527,46 → 3523,46 |
r_f_port_area: |
|
test ebx, ebx |
jnz free_port_area |
jnz .free_port_area |
|
cmp ecx, edx ; beginning > end ? |
ja rpal1 |
ja .rpal1 |
cmp edx, 65536 ;test ebx, not 0xffff |
jae rpal1 |
jae .rpal1 |
mov eax, [RESERVED_PORTS] |
test eax, eax ; no reserved areas ? |
je rpal2 |
je .rpal2 |
cmp eax, 255 ; max reserved |
jae rpal1 |
rpal3: |
jae .rpal1 |
.rpal3: |
mov ebx, eax |
shl ebx, 4 ;16 byte is sizeof item in RESERVED_PORTS table |
add ebx, RESERVED_PORTS |
cmp ecx, [ebx+8] |
ja rpal4 |
ja .rpal4 |
cmp edx, [ebx+4] |
jae rpal1 |
rpal4: |
jae .rpal1 |
.rpal4: |
dec eax |
jnz rpal3 |
jmp rpal2 |
rpal1: |
jnz .rpal3 |
jmp .rpal2 |
.rpal1: |
xor eax, eax |
inc eax |
ret |
rpal2: |
.rpal2: |
; enable port access at port IO map |
pushad ; start enable io map |
mov eax, ecx |
xor ebp, ebp ; enable - eax = port |
cli |
new_port_access: |
.new_port_access: |
call set_io_access_rights |
|
inc eax |
cmp eax, edx |
jbe new_port_access |
no_unmask_io: |
jbe .new_port_access |
;no_unmask_io: |
sti |
popad ; end enable io map |
|
3584,31 → 3580,31 |
xor eax, eax |
ret |
|
free_port_area: |
.free_port_area: |
|
mov eax, [RESERVED_PORTS]; no reserved areas ? |
test eax, eax |
jz frpal2 |
jz .frpal2 |
mov ebx, [current_slot] |
mov ebx, [ebx + APPDATA.tid] |
frpal3: |
.frpal3: |
mov edi, eax |
shl edi, 4 |
add edi, RESERVED_PORTS |
cmp ebx, [edi] |
jne frpal4 |
jne .frpal4 |
cmp ecx, [edi+4] |
jne frpal4 |
jne .frpal4 |
cmp edx, [edi+8] |
jne frpal4 |
jmp frpal1 |
frpal4: |
jne .frpal4 |
jmp .frpal1 |
.frpal4: |
dec eax |
jnz frpal3 |
frpal2: |
jnz .frpal3 |
.frpal2: |
inc eax |
ret |
frpal1: |
.frpal1: |
push ecx |
mov ecx, 256 |
sub ecx, eax |
3627,21 → 3623,20 |
|
xor ebp, ebp |
inc ebp |
new_port_access_disable: ; disable - eax = port |
.new_port_access_disable: ; disable - eax = port |
call set_io_access_rights |
|
inc eax |
cmp eax, edx |
jbe new_port_access_disable |
no_mask_io: ; end disable io map |
jbe .new_port_access_disable |
;no_mask_io: ; end disable io map |
xor eax, eax |
ret |
;----------------------------------------------------------------------------- |
align 4 |
drawbackground: |
dbrv20: |
cmp [BgrDrawMode], dword 1 |
jne bgrstr |
jne .bgrstr |
call vesa20_drawbackground_tiled |
; call [draw_pointer] |
call __sys_draw_pointer |
3648,7 → 3643,7 |
ret |
;-------------------------------------- |
align 4 |
bgrstr: |
.bgrstr: |
call vesa20_drawbackground_stretch |
; call [draw_pointer] |
call __sys_draw_pointer |
3708,12 → 3703,14 |
; edi = pointer to palette |
; ebp = row delta |
; check pointer |
push ecx |
push ecx esi |
mov ax, cx |
shr ecx, 16 |
imul eax, ecx |
; imul eax, esi ; eax*count bit in 1 pixel |
; shr eax, 3 |
stdcall is_region_userspace, ebx, eax |
pop ecx |
pop esi ecx |
jnz sys_putimage.exit |
|
mov eax, [current_slot] |
4078,10 → 4075,10 |
if used _rdtsc |
_rdtsc: |
bt [cpu_caps], CAPS_TSC |
jnc ret_rdtsc |
jnc .ret_rdtsc |
rdtsc |
ret |
ret_rdtsc: |
.ret_rdtsc: |
mov edx, 0xffffffff |
mov eax, 0xffffffff |
ret |