KERNEL: reducing the use of current_slot_idx

git-svn-id: svn://kolibrios.org@9828 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Doczom 2022-06-03 23:34:04 +00:00
parent 4237496c20
commit 4b862c1c0b
9 changed files with 124 additions and 136 deletions

View File

@ -1154,9 +1154,8 @@ proc load_library stdcall, file_name:dword, encoding:dword
call malloc call malloc
test eax, eax test eax, eax
jz .fail_and_free_user jz .fail_and_free_user
mov ebx, [current_slot_idx] mov ebx, [current_slot]
shl ebx, BSF sizeof.APPDATA mov edx, [ebx + APPDATA.tid]
mov edx, [SLOT_BASE + ebx + APPDATA.tid]
mov [eax + HDLL.pid], edx mov [eax + HDLL.pid], edx
push eax push eax
call init_dlls_in_thread call init_dlls_in_thread

View File

@ -1396,9 +1396,8 @@ align 4
mov edx, E_ACCESS mov edx, E_ACCESS
ja .fail ja .fail
mov ebx, [current_slot_idx] mov ebx, [current_slot]
shl ebx, BSF sizeof.APPDATA mov ebx, [ebx + APPDATA.tid]
mov ebx, [SLOT_BASE + ebx + APPDATA.tid]
mov eax, sizeof.SMAP mov eax, sizeof.SMAP
call create_kernel_object call create_kernel_object

View File

@ -342,9 +342,8 @@ lock_application_table:
mov ecx, application_table_mutex mov ecx, application_table_mutex
call mutex_lock call mutex_lock
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.APPDATA mov eax, [eax + APPDATA.tid]
mov eax, [eax + SLOT_BASE + APPDATA.tid]
mov [application_table_owner], eax mov [application_table_owner], eax
@ -389,7 +388,7 @@ sys_resize_app_memory:
@@: @@:
stdcall new_mem_resize, ecx stdcall new_mem_resize, ecx
.store_result: .store_result:
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
.no_application_mem_resize: .no_application_mem_resize:
ret ret

View File

@ -827,9 +827,8 @@ v86_irq:
v86_irq2: v86_irq2:
mov esi, [v86_irqhooks + edi*8] ; get VM handle mov esi, [v86_irqhooks + edi*8] ; get VM handle
mov eax, [esi + V86_machine.process] mov eax, [esi + V86_machine.process]
mov ecx, [current_slot_idx] mov ecx, [current_slot]
shl ecx, BSF sizeof.APPDATA cmp [ecx + APPDATA.process], eax
cmp [SLOT_BASE + ecx + APPDATA.process], eax
jnz .notcurrent jnz .notcurrent
lea eax, [edi+8] lea eax, [edi+8]
cmp al, 10h cmp al, 10h

View File

@ -56,9 +56,8 @@ reserve_cd:
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
reserve_ok2: reserve_ok2:
push eax push eax
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.APPDATA mov eax, [eax + APPDATA.tid]
mov eax, [eax + SLOT_BASE + APPDATA.tid]
mov [cd_status], eax mov [cd_status], eax
pop eax pop eax
sti sti

View File

@ -718,7 +718,7 @@ dd .loadCursorUni
mov eax, [MOUSE_X] mov eax, [MOUSE_X]
shl eax, 16 shl eax, 16
mov ax, [MOUSE_Y] mov ax, [MOUSE_Y]
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
@@: @@:
ret ret
@ -732,30 +732,29 @@ dd .loadCursorUni
shl ebx, 16 shl ebx, 16
mov bx, word [esi + window_data + WDATA.box.top] mov bx, word [esi + window_data + WDATA.box.top]
sub eax, ebx sub eax, ebx
mov edi, [current_slot_idx] mov edi, [current_slot]
shl edi, 8 sub ax, word[edi + APPDATA.wnd_clientbox.top]
sub ax, word[edi+SLOT_BASE+APPDATA.wnd_clientbox.top]
rol eax, 16 rol eax, 16
sub ax, word[edi+SLOT_BASE+APPDATA.wnd_clientbox.left] sub ax, word[edi + APPDATA.wnd_clientbox.left]
rol eax, 16 rol eax, 16
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.msbutton: .msbutton:
movzx eax, byte [BTN_DOWN] movzx eax, byte [BTN_DOWN]
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.msbuttonExt: .msbuttonExt:
mov eax, [BTN_DOWN] mov eax, [BTN_DOWN]
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.app_load_cursor: .app_load_cursor:
cmp ecx, OS_BASE cmp ecx, OS_BASE
jae @f jae @f
stdcall load_cursor, ecx, edx stdcall load_cursor, ecx, edx
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
@@: @@:
ret ret
@ -772,19 +771,19 @@ dd .loadCursorUni
test eax, eax test eax, eax
jz @f jz @f
stdcall load_cursor, ebp, LOAD_FROM_FILE stdcall load_cursor, ebp, LOAD_FROM_FILE
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
@@: @@:
stdcall kernel_free, ebp stdcall kernel_free, ebp
ret ret
.app_set_cursor: .app_set_cursor:
stdcall set_cursor, ecx stdcall set_cursor, ecx
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.app_delete_cursor: .app_delete_cursor:
stdcall delete_cursor, ecx stdcall delete_cursor, ecx
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.msz: .msz:
@ -795,10 +794,10 @@ dd .loadCursorUni
mov ax, [MOUSE_SCROLL_H] mov ax, [MOUSE_SCROLL_H]
shl eax, 16 shl eax, 16
mov ax, [MOUSE_SCROLL_V] mov ax, [MOUSE_SCROLL_V]
mov [esp+36-4], eax mov [esp + SYSCALL_STACK._eax], eax
and [MOUSE_SCROLL_H], word 0 and [MOUSE_SCROLL_H], word 0
and [MOUSE_SCROLL_V], word 0 and [MOUSE_SCROLL_V], word 0
ret ret
@@: @@:
and [esp+36-4], dword 0 and [esp + SYSCALL_STACK._eax], dword 0
ret ret

View File

@ -105,7 +105,7 @@ align 4
set_keyboard_data: set_keyboard_data:
movzx eax, word[thread_count]; top window process movzx eax, word[thread_count]; top window process
movzx eax, word[WIN_POS + eax*2] movzx eax, word[WIN_POS + eax*2]
shl eax, 8 shl eax, BSF sizeof.APPDATA
mov al, [SLOT_BASE + eax + APPDATA.keyboard_mode] mov al, [SLOT_BASE + eax + APPDATA.keyboard_mode]
mov [keyboard_mode], al mov [keyboard_mode], al
@ -203,6 +203,7 @@ irq1:
in al, 0x60 in al, 0x60
;-------------------------------------- ;--------------------------------------
send_scancode: send_scancode:
;DEBUGF 1, "K : Scan code: %x \n", al
mov [keyboard_data], al mov [keyboard_data], al
; ch = scancode ; ch = scancode
; cl = ext_code ; cl = ext_code

View File

@ -1584,7 +1584,7 @@ sys_setup:
; 11 = enable lba read ; 11 = enable lba read
; 12 = enable pci access ; 12 = enable pci access
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
and [esp+32], dword 0 and [esp + SYSCALL_STACK._eax], dword 0
; F.21.1 - set MPU MIDI base port ; F.21.1 - set MPU MIDI base port
dec ebx dec ebx
jnz @f jnz @f
@ -1671,7 +1671,7 @@ sys_setup:
ret ret
;-------------------------------------- ;--------------------------------------
.error: .error:
or [esp+32], dword -1 or [esp + SYSCALL_STACK._eax], dword -1
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
@ -1694,7 +1694,7 @@ sys_getsetup:
jnz @f jnz @f
movzx eax, [midi_base] movzx eax, [midi_base]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
@@: @@:
@ -1741,11 +1741,11 @@ sys_getsetup:
jnz .error jnz .error
movzx eax, word [keyboard] movzx eax, word [keyboard]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.addr_error: ; if given memory address is illegal .addr_error: ; if given memory address is illegal
mov dword [esp+32], -1 or dword [esp + SYSCALL_STACK._eax], -1
ret ret
;-------------------------------------- ;--------------------------------------
@@: @@:
@ -1754,7 +1754,7 @@ sys_getsetup:
jnz @f jnz @f
mov eax, [syslang] mov eax, [syslang]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
@@: @@:
@ -1763,7 +1763,7 @@ sys_getsetup:
jnz @f jnz @f
mov eax, [timer_ticks] mov eax, [timer_ticks]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
@@: @@:
@ -1772,8 +1772,8 @@ sys_getsetup:
jnz @f jnz @f
call get_clock_ns call get_clock_ns
mov [esp+24], edx mov [esp + SYSCALL_STACK._edx], edx
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
@@: @@:
@ -1782,7 +1782,7 @@ sys_getsetup:
jnz @f jnz @f
mov eax, [lba_read_enabled] mov eax, [lba_read_enabled]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
@@: @@:
@ -1791,11 +1791,11 @@ sys_getsetup:
jnz .error jnz .error
mov eax, [pci_access_enabled] mov eax, [pci_access_enabled]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
.error: .error:
or [esp+32], dword -1 or [esp + SYSCALL_STACK._eax], dword -1
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
get_timer_ticks: get_timer_ticks:
@ -2006,7 +2006,7 @@ sysfn_shutdown: ; 18.9 = system shutdown
mov [SYS_SHUTDOWN], al mov [SYS_SHUTDOWN], al
mov [shutdown_processes], eax mov [shutdown_processes], eax
call wakeup_osloop call wakeup_osloop
and dword [esp+32], 0 and dword [esp + SYSCALL_STACK._eax], 0
exit_for_anyone: exit_for_anyone:
ret ret
uglobal uglobal
@ -2093,11 +2093,11 @@ sysfn_terminate2:
call sysfn_terminate call sysfn_terminate
call unlock_application_table call unlock_application_table
sti sti
and dword [esp+32], 0 and dword [esp + SYSCALL_STACK._eax], 0
ret ret
.not_found: .not_found:
call unlock_application_table call unlock_application_table
or dword [esp+32], -1 or dword [esp + SYSCALL_STACK._eax], -1
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_deactivate: ; 18.1 = DEACTIVATE WINDOW sysfn_deactivate: ; 18.1 = DEACTIVATE WINDOW
@ -2216,19 +2216,19 @@ sysfn_zmodif:
.fail: .fail:
xor eax, eax xor eax, eax
.exit: .exit:
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_getidletime: ; 18.4 = GET IDLETIME sysfn_getidletime: ; 18.4 = GET IDLETIME
;mov eax, [TASK_TABLE+32+TASKDATA.cpu_usage] ;mov eax, [TASK_TABLE+32+TASKDATA.cpu_usage]
mov eax, [SLOT_BASE + APPDATA.cpu_usage] mov eax, [SLOT_BASE + APPDATA.cpu_usage]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_getcpuclock: ; 18.5 = GET TSC/SEC sysfn_getcpuclock: ; 18.5 = GET TSC/SEC
mov eax, dword [cpu_freq] mov eax, dword [cpu_freq]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
get_cpu_freq: get_cpu_freq:
@ -2244,7 +2244,7 @@ align 4
sysfn_getactive: ; 18.7 = get active window sysfn_getactive: ; 18.7 = get active window
mov eax, [thread_count] mov eax, [thread_count]
movzx eax, word [WIN_POS + eax*2] movzx eax, word [WIN_POS + eax*2]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_sound_flag: ; 18.8 = get/set sound_flag sysfn_sound_flag: ; 18.8 = get/set sound_flag
@ -2252,7 +2252,7 @@ sysfn_sound_flag: ; 18.8 = get/set sound_flag
dec ecx dec ecx
jnz nogetsoundflag jnz nogetsoundflag
movzx eax, byte [sound_flag]; get sound_flag movzx eax, byte [sound_flag]; get sound_flag
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
nogetsoundflag: nogetsoundflag:
; cmp ecx,2 ; cmp ecx,2
@ -2293,7 +2293,7 @@ sysfn_getversion: ; 18.13 = get kernel ID and version
rep movsb rep movsb
ret ret
.addr_error: ; if given memory address is illegal .addr_error: ; if given memory address is illegal
mov dword [esp+32], -1 mov dword [esp + SYSCALL_STACK._eax], -1
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_waitretrace: ; 18.14 = sys wait retrace sysfn_waitretrace: ; 18.14 = sys wait retrace
@ -2304,7 +2304,7 @@ sysfn_waitretrace: ; 18.14 = sys wait retrace
in al, dx in al, dx
test al, 1000b test al, 1000b
jz WaitRetrace_loop jz WaitRetrace_loop
and [esp+32], dword 0 and [esp + SYSCALL_STACK._eax], dword 0
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
@ -2317,7 +2317,7 @@ sysfn_centermouse: ; 18.15 = mouse centered
mov [MOUSE_Y], ax mov [MOUSE_Y], ax
call wakeup_osloop call wakeup_osloop
xor eax, eax xor eax, eax
and [esp+32], eax and [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_mouse_acceleration: ; 18.19 = set/get mouse features sysfn_mouse_acceleration: ; 18.19 = set/get mouse features
@ -2327,7 +2327,7 @@ sysfn_mouse_acceleration: ; 18.19 = set/get mouse features
.get_mouse_acceleration: .get_mouse_acceleration:
xor eax, eax xor eax, eax
mov ax, [mouse_speed_factor] mov ax, [mouse_speed_factor]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.set_mouse_acceleration: .set_mouse_acceleration:
mov [mouse_speed_factor], dx mov [mouse_speed_factor], dx
@ -2335,7 +2335,7 @@ sysfn_mouse_acceleration: ; 18.19 = set/get mouse features
.get_mouse_delay: .get_mouse_delay:
xor eax, eax xor eax, eax
mov al, [mouse_delay] mov al, [mouse_delay]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.set_mouse_delay: .set_mouse_delay:
mov [mouse_delay], dl mov [mouse_delay], dl
@ -2357,7 +2357,7 @@ sysfn_mouse_acceleration: ; 18.19 = set/get mouse features
.get_doubleclick_delay: .get_doubleclick_delay:
xor eax, eax xor eax, eax
mov al, [mouse_doubleclick_delay] mov al, [mouse_doubleclick_delay]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.set_doubleclick_delay: .set_doubleclick_delay:
mov [mouse_doubleclick_delay], dl mov [mouse_doubleclick_delay], dl
@ -2376,19 +2376,19 @@ dd .set_doubleclick_delay
sysfn_getfreemem: sysfn_getfreemem:
mov eax, [pg_data.pages_free] mov eax, [pg_data.pages_free]
shl eax, 2 shl eax, 2
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_getallmem: sysfn_getallmem:
mov eax, [MEM_AMOUNT] mov eax, [MEM_AMOUNT]
shr eax, 10 shr eax, 10
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_pid_to_slot: sysfn_pid_to_slot:
mov eax, ecx mov eax, ecx
call pid_to_slot call pid_to_slot
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_min_rest_window: sysfn_min_rest_window:
@ -2400,7 +2400,7 @@ sysfn_min_rest_window:
@@: @@:
or eax, eax ; eax - number of slot or eax, eax ; eax - number of slot
jz .error jz .error
cmp eax, 255 ; varify maximal slot number cmp eax, max_processes ; varify maximal slot number
ja .error ja .error
movzx eax, word [WIN_STACK + eax*2] movzx eax, word [WIN_STACK + eax*2]
shr ecx, 1 shr ecx, 1
@ -2413,18 +2413,18 @@ sysfn_min_rest_window:
.exit: .exit:
popad popad
xor eax, eax xor eax, eax
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.error: .error:
popad popad
xor eax, eax xor eax, eax
dec eax dec eax
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
sysfn_min_windows: sysfn_min_windows:
call minimize_all_window call minimize_all_window
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
call change_task call change_task
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -2487,10 +2487,10 @@ sys_cachetodiskette:
cmp ebx, 2 cmp ebx, 2
ja .no_floppy_save ja .no_floppy_save
call save_image call save_image
mov [esp + 32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.no_floppy_save: .no_floppy_save:
mov [esp + 32], dword 1 mov [esp + SYSCALL_STACK._eax], dword 1
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -2524,7 +2524,7 @@ sys_getkey:
;-------------------------------------- ;--------------------------------------
align 4 align 4
.ret_eax: .ret_eax:
mov [esp + 32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -2554,7 +2554,7 @@ align 4
align 4 align 4
sys_getbutton: sys_getbutton:
mov ebx, [current_slot_idx] ; TOP OF WINDOW STACK mov ebx, [current_slot_idx] ; TOP OF WINDOW STACK
mov [esp + 32], dword 1 mov [esp + SYSCALL_STACK._eax], dword 1
movzx ecx, word [WIN_STACK + ebx * 2] movzx ecx, word [WIN_STACK + ebx * 2]
mov edx, [thread_count] ; less than 256 processes mov edx, [thread_count] ; less than 256 processes
cmp ecx, edx cmp ecx, edx
@ -2565,7 +2565,7 @@ sys_getbutton:
mov eax, [BTN_BUFF] mov eax, [BTN_BUFF]
and al, 0xFE ; delete left button bit and al, 0xFE ; delete left button bit
mov [BTN_COUNT], byte 0 mov [BTN_COUNT], byte 0
mov [esp + 32], eax mov [esp + SYSCALL_STACK._eax], eax
;-------------------------------------- ;--------------------------------------
align 4 align 4
.exit: .exit:
@ -2676,11 +2676,11 @@ sys_cpuusage:
; return number of processes ; return number of processes
mov eax, [thread_count] mov eax, [thread_count]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.addr_error: ; if given memory address is illegal .addr_error: ; if given memory address is illegal
mov dword [esp+32], -1 mov dword [esp + SYSCALL_STACK._eax], -1
ret ret
@ -2774,7 +2774,7 @@ sys_sheduler:
;.shed_counter: ;.shed_counter:
.00: .00:
mov eax, [context_counter] mov eax, [context_counter]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.02: .02:
@ -2804,8 +2804,8 @@ sys_sheduler:
mov eax, esi mov eax, esi
mov ecx, edx mov ecx, edx
rdmsr rdmsr
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
mov [esp+20], edx ;ret in ebx? mov [esp + SYSCALL_STACK._ebx], edx ;ret in ebx?
ret ret
.04: .04:
@ -2850,9 +2850,9 @@ is_cache_enabled:
mov ebx, eax mov ebx, eax
and eax, 01100000000000000000000000000000b and eax, 01100000000000000000000000000000b
jz cache_disabled jz cache_disabled
mov [esp+32], ebx mov [esp + SYSCALL_STACK._eax], ebx
cache_disabled: cache_disabled:
mov dword [esp+32], eax;0 mov dword [esp + SYSCALL_STACK._eax], eax;0
ret ret
modify_pce: modify_pce:
@ -2862,7 +2862,7 @@ modify_pce:
; xor eax,ebx ;invert pce ; xor eax,ebx ;invert pce
bts eax, 8;pce=cr4[8] bts eax, 8;pce=cr4[8]
mov cr4, eax mov cr4, eax
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;--------------------------------------------------------------------------------------------- ;---------------------------------------------------------------------------------------------
@ -3377,7 +3377,7 @@ align 4
set_app_param: set_app_param:
mov edi, [current_slot] mov edi, [current_slot]
xchg ebx, [edi + APPDATA.event_mask] ; set new event mask xchg ebx, [edi + APPDATA.event_mask] ; set new event mask
mov [esp+32], ebx ; return old mask value mov [esp + SYSCALL_STACK._eax], ebx ; return old mask value
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
@ -3511,7 +3511,7 @@ align 4
syscall_reserveportarea: ; ReservePortArea and FreePortArea syscall_reserveportarea: ; ReservePortArea and FreePortArea
call r_f_port_area call r_f_port_area
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;reserve/free group of ports ;reserve/free group of ports
@ -3717,11 +3717,10 @@ sys_putimage_palette:
pop ecx pop ecx
jnz sys_putimage.exit jnz sys_putimage.exit
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, 8 add dx, word [eax + APPDATA.wnd_clientbox.top]
add dx, word [SLOT_BASE + eax + APPDATA.wnd_clientbox.top]
rol edx, 16 rol edx, 16
add dx, word [SLOT_BASE + eax + APPDATA.wnd_clientbox.left] add dx, word [eax + APPDATA.wnd_clientbox.left]
rol edx, 16 rol edx, 16
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -4228,7 +4227,7 @@ end if
ret ret
@@: @@:
mov [esp+32], ecx mov [esp + SYSCALL_STACK._eax], ecx
mov [esp+20], ecx mov [esp+20], ecx
jmp .ret jmp .ret
@ -4243,7 +4242,7 @@ end if
movzx edx, byte [ebx] movzx edx, byte [ebx]
call memmove call memmove
dec [msg_board_count] dec [msg_board_count]
mov [esp + 32], edx ;eax mov [esp + SYSCALL_STACK._eax], edx ;eax
mov [esp + 20], dword 1 mov [esp + 20], dword 1
ret ret
@ -4270,93 +4269,92 @@ sys_process_def:
cmp ebx, 7 cmp ebx, 7
jae .not_support ;if >=8 then or eax,-1 jae .not_support ;if >=8 then or eax,-1
mov edi, [current_slot_idx] mov edi, [current_slot]
jmp dword [f66call + ebx*4] jmp dword [f66call + ebx*4]
.not_support: .not_support:
or eax, -1 or [esp + SYSCALL_STACK._eax], -1
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
.1: .1:
shl edi, BSF sizeof.APPDATA mov [edi + APPDATA.keyboard_mode], cl
mov [SLOT_BASE + edi + APPDATA.keyboard_mode], cl
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
.2: ; 2 = get keyboard mode .2: ; 2 = get keyboard mode
shl edi, BSF sizeof.APPDATA movzx eax, byte [edi + APPDATA.keyboard_mode]
movzx eax, byte [SLOT_BASE + edi + APPDATA.keyboard_mode] mov [esp + SYSCALL_STACK._eax], eax
mov [esp+32], eax
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
.3: ;3 = get keyboard ctrl, alt, shift .3: ;3 = get keyboard ctrl, alt, shift
mov eax, [kb_state] mov eax, [kb_state]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
.4: .4:
mov edi, [current_slot_idx]
mov eax, hotkey_list mov eax, hotkey_list
@@: @@:
cmp dword [eax+8], 0 cmp dword [eax + 8], 0
jz .found_free jz .found_free
add eax, 16 add eax, 16
cmp eax, hotkey_list+16*256 cmp eax, hotkey_list+16*256
jb @b jb @b
mov dword [esp+32], 1 mov dword [esp + SYSCALL_STACK._eax], 1
ret ret
.found_free: .found_free:
mov [eax+8], edi mov [eax + 8], edi
mov [eax+4], edx mov [eax + 4], edx
movzx ecx, cl movzx ecx, cl
lea ecx, [hotkey_scancodes+ecx*4] lea ecx, [hotkey_scancodes+ecx*4]
mov edx, [ecx] mov edx, [ecx]
mov [eax], edx mov [eax], edx
mov [ecx], eax mov [ecx], eax
mov [eax+12], ecx mov [eax + 12], ecx
test edx, edx test edx, edx
jz @f jz @f
mov [edx+12], eax mov [edx + 12], eax
@@: @@:
and dword [esp+32], 0 and dword [esp + SYSCALL_STACK._eax], 0
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
.5: .5:
mov edi, [current_slot_idx]
movzx ebx, cl movzx ebx, cl
lea ebx, [hotkey_scancodes+ebx*4] lea ebx, [hotkey_scancodes+ebx*4]
mov eax, [ebx] mov eax, [ebx]
.scan: .scan:
test eax, eax test eax, eax
jz .notfound jz .notfound
cmp [eax+8], edi cmp [eax + 8], edi
jnz .next jnz .next
cmp [eax+4], edx cmp [eax + 4], edx
jz .found jz .found
.next: .next:
mov eax, [eax] mov eax, [eax]
jmp .scan jmp .scan
.notfound: .notfound:
mov dword [esp+32], 1 mov dword [esp + SYSCALL_STACK._eax], 1
ret ret
.found: .found:
mov ecx, [eax] mov ecx, [eax]
jecxz @f jecxz @f
mov edx, [eax+12] mov edx, [eax + 12]
mov [ecx+12], edx mov [ecx + 12], edx
@@: @@:
mov ecx, [eax+12] mov ecx, [eax + 12]
mov edx, [eax] mov edx, [eax]
mov [ecx], edx mov [ecx], edx
xor edx, edx xor edx, edx
mov [eax+4], edx mov [eax + 4], edx
mov [eax+8], edx mov [eax + 8], edx
mov [eax+12], edx mov [eax + 12], edx
mov [eax], edx mov [eax], edx
mov [esp+32], edx mov [esp + SYSCALL_STACK._eax], edx
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
@ -4367,9 +4365,8 @@ align 4
test eax, eax test eax, eax
jnz @f jnz @f
; get current PID ; get current PID
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.APPDATA mov eax, [eax + APPDATA.tid]
mov eax, [eax + SLOT_BASE+APPDATA.tid]
; set current PID for lock input ; set current PID for lock input
mov [PID_lock_input], eax mov [PID_lock_input], eax
@@: @@:
@ -4382,9 +4379,8 @@ align 4
test eax, eax test eax, eax
jz @f jz @f
; get current PID ; get current PID
mov ebx, [current_slot_idx] mov ebx, [current_slot]
shl ebx, BSF sizeof.APPDATA mov ebx, [ebx + APPDATA.tid]
mov ebx, [ebx + SLOT_BASE+APPDATA.tid]
; compare current lock input with current PID ; compare current lock input with current PID
cmp ebx, eax cmp ebx, eax
jne @f jne @f
@ -4419,7 +4415,7 @@ sys_gs: ; direct screen access
ja .not_support ja .not_support
jmp dword [f61call + ebx*4] jmp dword [f61call + ebx*4]
.not_support: .not_support:
or [esp+32], dword -1 or [esp + SYSCALL_STACK._eax], dword -1
ret ret
@ -4427,15 +4423,15 @@ sys_gs: ; direct screen access
mov eax, [_display.width] mov eax, [_display.width]
shl eax, 16 shl eax, 16
mov ax, word [_display.height] mov ax, word [_display.height]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.2: ; bits per pixel .2: ; bits per pixel
mov eax, [_display.bits_per_pixel] mov eax, [_display.bits_per_pixel]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
.3: ; bytes per scanline .3: ; bytes per scanline
mov eax, [_display.lfb_pitch] mov eax, [_display.lfb_pitch]
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
align 4 align 4
@ -4445,7 +4441,7 @@ syscall_getscreensize: ; GetScreenSize
shl eax, 16 shl eax, 16
mov ax, word [_display.height] mov ax, word [_display.height]
dec ax dec ax
mov [esp + 32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
@ -4535,7 +4531,7 @@ align 4
;-------------------------------------- ;--------------------------------------
align 4 align 4
.store: .store:
mov [esp + 32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
@ -4548,7 +4544,7 @@ syscall_getpixel: ; GetPixel
xchg eax, ebx xchg eax, ebx
and ecx, 0xFBFFFFFF ;negate 0x04000000 use mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 use mouseunder area
call dword [GETPIXEL]; eax - x, ebx - y call dword [GETPIXEL]; eax - x, ebx - y
mov [esp + 32], ecx mov [esp + SYSCALL_STACK._eax], ecx
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
@ -4631,11 +4627,10 @@ syscall_threads: ; CreateThreads
; edx=thread stack pointer ; edx=thread stack pointer
; ;
; on return : eax = pid ; on return : eax = pid
xor ebx, ebx xor ebx, ebx
call new_sys_threads call new_sys_threads
mov [esp+32], eax mov [esp + SYSCALL_STACK._eax], eax
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -4793,7 +4788,7 @@ sys_apm:
align 4 align 4
undefined_syscall: ; Undefined system call undefined_syscall: ; Undefined system call
mov [esp + 32], dword -1 mov [esp + SYSCALL_STACK._eax], dword -1
ret ret
align 4 align 4

View File

@ -422,9 +422,8 @@ align 4
push esi push esi
push edi push edi
mov eax, [current_slot_idx] mov eax, [current_slot]
shl eax, BSF sizeof.APPDATA mov eax, [eax + APPDATA.tid]
mov eax, [SLOT_BASE + eax + APPDATA.tid]
mov ebx, [src] mov ebx, [src]
mov ecx, [flags] mov ecx, [flags]
call create_cursor ;eax, ebx, ecx call create_cursor ;eax, ebx, ecx
@ -459,10 +458,9 @@ proc delete_cursor stdcall, hcursor:dword
cmp [esi + CURSOR.magic], 'CURS' cmp [esi + CURSOR.magic], 'CURS'
jne .fail jne .fail
mov ebx, [current_slot_idx] mov ebx, [current_slot]
shl ebx, BSF sizeof.APPDATA mov ebx, [ebx + APPDATA.tid]
mov ebx, [ebx + SLOT_BASE + APPDATA.tid] cmp ebx, [esi + CURSOR.pid]
cmp ebx, [esi+CURSOR.pid]
jne .fail jne .fail
mov ebx, [current_slot] mov ebx, [current_slot]
@ -503,7 +501,7 @@ destroy_cursor:
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4
select_cursor: select_cursor:
mov eax, [esp+4] mov eax, [esp + 4]
mov [_display.cursor], eax mov [_display.cursor], eax
ret 4 ret 4
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -522,7 +520,7 @@ proc restore_24 stdcall, x:dword, y:dword
mov esi, cur_saved_data mov esi, cur_saved_data
mov ecx, [cur.w] mov ecx, [cur.w]
lea ecx, [ecx+ecx*2] lea ecx, [ecx + ecx*2]
push ecx push ecx
;-------------------------------------- ;--------------------------------------
align 4 align 4