sys function 49

git-svn-id: svn://kolibrios.org@1330 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Alexey Teplov ( 2009-12-24 17:12:36 +00:00
parent e9e908d84d
commit 90bb6a20e2
2 changed files with 46 additions and 42 deletions

View File

@ -152,7 +152,7 @@ iglobal
dd 0 ; 46-ReservePortArea and FreePortArea
dd display_number ; 47-WriteNum
dd 0 ; 48-SetRedrawType and SetButtonType
dd sys_apm ; 49-Advanced Power Management (APM)
dd 0 ; 49-Advanced Power Management (APM)
dd random_shaped_window ; 50-Window shape & scale
dd syscall_threads ; 51-Threads
dd stack_driver_stat ; 52-Stack driver status
@ -231,7 +231,7 @@ iglobal
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
dd cross_order ; 47-WriteNum
dd display_settings ; 48-SetRedrawType and SetButtonType
dd cross_order ; 49-Advanced Power Management (APM)
dd sys_apm ; 49-Advanced Power Management (APM)
dd cross_order ; 50-Window shape & scale
dd cross_order ; 51-Threads
dd cross_order ; 52-Stack driver status

View File

@ -5478,38 +5478,44 @@ set_screen:
hlt ; Houston, we've had a problem
; --------------- APM ---------------------
uglobal
apm_entry dp 0
apm_vf dd 0
endg
align 4
sys_apm:
cmp word [apm_vf], 0 ; Check APM BIOS enable
xor eax,eax
cmp word [apm_vf], ax ; Check APM BIOS enable
jne @f
or [esp + 48], byte 1 ; error
mov [esp + 36], dword 8 ; 32-bit protected-mode interface not supported
inc eax
or dword [esp + 44], eax ; error
add eax,7
mov dword [esp + 32], eax ; 32-bit protected-mode interface not supported
ret
@@:
xchg eax, ecx
xchg ebx, ecx
; xchg eax, ecx
; xchg ebx, ecx
cmp al, 3
cmp dx, 3
ja @f
and [esp + 48], byte 0xfe ; emulate func 0..3 as func 0
mov eax, [apm_vf]
mov [esp + 36], eax
shr eax, 16
and [esp + 44], byte 0xfe ; emulate func 0..3 as func 0
mov eax,[apm_vf]
mov [esp + 32], eax
shr eax, 16
mov [esp + 28], eax
ret
@@:
mov esi, [master_tab+(OS_BASE shr 20)]
mov esi,[master_tab+(OS_BASE shr 20)]
xchg [master_tab], esi
push esi
mov edi, cr3
mov cr3, edi ;flush TLB
call pword [apm_entry] ; call APM BIOS
call pword [apm_entry] ;call APM BIOS
xchg eax, [esp]
mov [master_tab], eax
@ -5517,17 +5523,15 @@ sys_apm:
mov cr3, eax
pop eax
mov [esp + 8 ], edi
mov [esp + 12], esi
mov [esp + 24], ebx
mov [esp + 28], edx
mov [esp + 32], ecx
mov [esp + 36], eax
mov [esp + 4 ], edi
mov [esp + 8], esi
mov [esp + 20], ebx
mov [esp + 24], edx
mov [esp + 28], ecx
mov [esp + 32], eax
setc al
and [esp + 48], byte 0xfe
or [esp + 48], al
and [esp + 44], byte 0xfe
or [esp + 44], al
ret
; -----------------------------------------