亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? power.asm

?? DOS 源碼 系列之 BIOS ,上傳與大家分享
?? ASM
?? 第 1 頁 / 共 5 頁
字號:
	iret                            ; don't need to chain if BIOS resident
ENDIF

I28_idle endp

;********************* Shell idle check ******************************
; purpose: check idle (INT 2A Function 84h)
;          if interrupt is detected than DO_IDLE should be called
;          the interrupt should be absorbed.

PUBLIC I2A_idle
I2A_idle proc   far
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds, Bios_Data_Word
	assume  ds:Bios_Data

	cmp     ah,84h                  
	jne     i2Anxt            	; check for a service call to us

; load up registers and call do idle
	push    di
	lea     di,[INFO].SHELL_TOT
	call    DO_IDLE
	adc     word ptr [di],0         ; accumulate idle time
	adc     word ptr [di]+2,0
	pop	di
	pop	ds
	iret

i2Anxt: 
	jmp     dword ptr pwr_i2a_next

I2A_idle endp
;************************ I16_IDLE *********************

PUBLIC I16_IDLE
I16_IDLE proc near
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data


	cmp     [IN_KYC],0
	jne     kybxxx
	cmp     ah,01h
	je      kbpchk
	cmp     ah,11h
	je      kbpchk
	or	ah,ah
	jz	kbChkIdle
	cmp	ah,10h
	jz	kbChkIdle
kybxxx: 
	jmp     dword ptr pwr_i16_next


kbpchk: inc     [KYC].PCOUNT
	test    [CONTROL].IDLE_FLG,KYC_ACTIVE
	jz      kybxxx

	mov     [IN_KYC],1              ; ONLY ALLOW ONE RE-ENTRY

	jmp     dword ptr pwr_call_i16  ;call old int 16h handler
;
;We return to the label below after calling the previous int 16h handler
;
calli16ret:
	mov     ds,Bios_Data_Word               ;reinit DS to Bios_Data
	assume  ds:Bios_Data

	push    bx
	lea     bx,KYC_TMR0

		; if a key is ready, just clear out our timer and
		; return.  If no key is ready, go through the full
		; delay check.  Here we check the flags returned
		; by the INT 16 handler we called.
       
	jz      i16_ChkDelay

		; Just clear the timer
	push    ax
	call    ClearTimer
	pop     ax
	jmp     short kbpret
	
i16_ChkDelay:
		; load up registers and call delay check
	push	cx
	push    si
	push    di
	lea     si,KYC
	lea     di,[INFO].KEY_TOT
	mov	cx,1
	call    Chk_i16idle
	pop     di
	pop     si
	pop	cx

kbpret: 
	pop     bx
	mov     [IN_KYC],0              ; can start up again
	pop     ds
	assume  ds:nothing
	iret

kbChkIdle:
	assume  ds:Bios_Data
; see if there is a key available
	inc	ah			; make it to fn 1 or 11
kbChkKey:
	push	ax			; save function no (1 or 11h)
	jmp     dword ptr kb_call_i16  ;call old int 16h handler
kbChkRet:
	pop	ax			; get back orig. polling fn no
	jz	kbDoIdle		; no key available
	dec	ah			; get back original get key fn(0 or 10)
	jmp	kybxxx			; go get the key
; no key available do idle
kbDoIdle:
	push	ax
	push    bx
	push    di
	lea     bx,KYC_TMR0
	lea     di,[INFO].KEY_TOT
	call    DO_IDLE
	adc     word ptr [di],0         ; accumulate idle time
	adc     word ptr [di]+2,0
	mov     word ptr [bx]+2,0       ; avoid speed up error
	call    ClearTimer
	pop	di
	pop	bx
	pop	ax
	jmp	short kbChkKey		; go look for key

I16_IDLE endp


;************************ I1C_TIMR *********************

PUBLIC I1c_Timr
I1c_Timr proc
	assume  ds:nothing, es:nothing

	push    ds
	push    ax
	mov     ax,BIOSDATASEG          ; M092 check rollover flag in BIOS
	mov     ds,ax                   ; M092
	xor     al,al                   ; M096
	xchg    al,ds:[ROLLOVERFLG]     ; M096 get Bios rollover flg and 
					;   reset it
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	or      [CMOSUpdFlg],al         ; M092 set update flag if rollover

	dec     [CMOSPollCount]         ; M090
	jz      itmSetCMOSFlg           ; M090

itmNoTmUpdate:
	inc     [SPDUP_CNT]             ; speedup delay

	test    [POWER_STATUS],1        ; is idle detection on ?
	jz      i1c_to_end

	inc     [KYC_TMR0]+2            ; timer over flow
	inc     [KYC].DELAY             ; adjust delay

	inc     [I28_TMR0]+2            ; timer over flow
	inc     [I28].DELAY             ; adjust delay


	add     word ptr [INFO].CPU_ON_TIME,1
	adc     word ptr [INFO].CPU_ON_TIME+2,0

	xor     ax,ax                   ; M004  BEGIN
	xchg    [IDLTIC],ax             ; If we were idle during the last
	add     word ptr [INFO].CPU_IDLE_TIME,ax        ; tick period, let's
	adc     word ptr [INFO].CPU_IDLE_TIME+2,0       ; count it
					; M004 END

	test    [CONTROL].IDLE_FLG,AUTO_ACTIVE  ; no AUTO adjust
i1c_to_end:
	jz      itmxxx

itmot1: inc     [SWITCH_CNT]            ; time to switch methods?
	mov     ax,[CONTROL].SWITCH_DLY
	cmp     [SWITCH_CNT],ax
	jb      itmxxx                  ; not yet ...

itmot2: mov     [SWITCH_CNT],0
	mov     ax,[I28].PCOUNT         ; If( KYC.COUNT < I28.COUNT)
	cmp     ax,[KYC].PCOUNT         ; occurs in windows ...
	ja      itmdos

		; keyboard count is higher than INT 28 count
		; keyboard is highest count, it wins

	cmp     [KYC].PCOUNT,0          ; avoid thrashing
	je      itmxxx
	mov     ax,KYC_ACTIVE
	jmp     short itmset

itmSetCMOSFlg:
	mov     al,[CMOSFlg]            ; M090 ; need to update from CMOS
	or	[CMOSUpdFlg],al         ; M090 ; only if POWER STD mode in APM 
	mov	ax,MAXCMOSPOLLCOUNT	; machines
	mov	[CMOSPollCount],ax	; start counting again
	jmp     itmNoTmUpdate

itmdos:         ; INT 28 count higher than keyboard count
		; INT 28 count is highest, it wins
	or      ax,ax                   ; don't bother if count is 0
	jz      itmxxx
	mov     ax,DOS_ACTIVE

itmset: and     [CONTROL].IDLE_FLG,NOT ( APP_ACTIVE+DOS_ACTIVE+KYC_ACTIVE)
	or      [CONTROL].IDLE_FLG,ax

itmskp: xor     ax,ax                   ;reset for next round
	mov     [KYC].PCOUNT,ax
	mov     [I28].PCOUNT,ax

itmxxx: 
	test    [POWER_STATUS],2        ; M089 is F/W mgmt on ?
	jz      itmChain                ; M089 No need to poll APM in POWER
					; STD mode
IFDEF INCL_APM
; now check to see if we need to call APM for a PMEVENT 
	cmp     fAPM_STATE,0            ; is APM enabled ?
	je      itmChain
	dec     APM_POLL_COUNT
	jnz     itmChain

; time to poll APM for any PM Event

	push    bx
	mov     ax,[APM_MAX_POLLCOUNT]  ; first reset the counter
	mov     APM_POLL_COUNT,ax
;
itmPoll:
	mov     ax,APM_GETPMEVENT_FUNC
	int     15h
	jc      itm_End                 ; no events -> no work to do 
;
; BX = PM Event
;       1 = stand-by request
;       2 = suspend request
;       3 = normal resume
;       4 = crit. resume
;       5 = battery low
	cmp     bx,APM_NORM_RESUME
	je      itm_Set_time
	cmp     bx,APM_CRIT_RESUME
	jne     itm_broadcast

itm_Set_time:
	INC     APM_RESUME_COUNT
	call    Do_APM_CPUBUSY          ; M002 bring CPU to full speed
	mov     [CMOSUpdFlg],1          ; M090

itm_broadcast:
	mov     ax,I2F_APM_BROADCAST
	int     2fh                     ; broadcast the pm events to other
					; apps
; BUGBUG: Warning: the function codes for APM BIOS GetPMEvent and 
; the multiplex API broadcast functions are assumed to be the same
	cmp     bl,APM_NORM_RESUME      ; was it a stand-by/suspend request
	jae     itm_End                 ; if not, nothing else to do
;
; this was an APM request for system stand-by/suspend
; if no apps/tsrs objected to this request, let us call the APM to suspend/
; stand-by
	or      bh,bh
	jnz     itm_End                 ; somebody objected ? if so quit
	push    cx                      ; M093
	mov     cx,bx                   ; required power mode in CX
	mov     bx,APM_SYSTEM_DEV       ; full system
	mov     ax,APM_SETPWSTATE_FUNC
	int     15h
	pop     cx                      ; M093
IFDEF DEBUG
	jnc     itm_dbg_Success
	dbg_printchar   'f'             ; CY for a set power state call
itm_dbg_Success:
ENDIF                                   ; IFDEF DEBUG
; Resumed from a suspend/stand-by; we should get a resume notification
; from APM so that we can go and update the date and time 
	jmp     itmPoll                 ; go back and poll APM for
					; a resume notification event
;
itm_End:pop     bx
ENDIF
itmChain:
	pop     ax
	jmp     dword ptr pwr_i1c_next

I1C_TIMR endp

;************* I6C_RESUME *****************************
;
; On interrupts 6C, update system date and time from the hardware
; clock.  Int 6C is one way a system may signal a resume event.
; Entire routine is part of modification M080.

I6C_Resume      proc

	assume  ds:nothing,es:nothing

	push    ds
	mov     ds,cs:Bios_Data_Word
	assume ds:Bios_Data

;       Bugbug -- need to sti?
;       Bugbug -- enough stack space?

	push    ax
	push    bx
	push    cx
	push    dx
	push    si
	push    di

IFDEF   POWERALONE                      ; M081
	call    far ptr P_UpdFromCMOS
ELSE
	call    P_UpdFromCMOS_ptr       ; M074 update our date and time
					; from CMOS RTC
ENDIF

	pop     di
	pop     si
	pop     dx
	pop     cx
	pop     bx
	pop     ax

	jmp     dword ptr pwr_i6c_next

I6C_Resume      endp

;************* APPLICATION ACTIVITY MONITORS ***********

; SPEED UP by setting DOIdle delay count relitive to TIMER interrupts
; that have occurred between polling interrupt ...
; ** REQUIRES TESTING -- At this point APP_SPDUP tends to inhibit idle

PUBLIC APP_SPDUP
App_Spdup proc near
	assume  ds:Bios_Data, es:nothing

	push    ax
	mov     ax,[SPDUP_DLY]          ; machine speed dependent
	add     ax,[CONTROL].SPDUP_RAMP
	cmp     ax,[CONTROL].SPDUP_MAX  ; machine speed dependent
	jb      asdot3
	mov     ax,[CONTROL].SPDUP_MAX
asdot3: mov     [SPDUP],1               ; indicate activity
	mov     [SPDUP_DLY],ax
	mov     [SPDUP_CNT],0
	pop     ax
asdex0: ret

App_Spdup endp

I9_App  proc    
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	dec     [I9_COUNT]
	jnz     i9ex0
	mov     [I9_COUNT],2
	call    APP_SPDUP
i9ex0:  
	jmp     dword ptr Pwr_i9_next

I9_App  endp

I10_App         proc
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	cmp     ah,04h                          ; avoid cursor set
	jb      i10ex0                          ; calls
	call    APP_SPDUP
i10ex0: 
	jmp     dword ptr Pwr_i10_next

I10_App         endp

I13_App         proc
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	call    APP_SPDUP

	jmp     dword ptr Pwr_i13_next

I13_App         endp

I14_App         proc
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	cmp     ah,3                            ; avoid status calls
	je      i14ex0
	call    APP_SPDUP                       ; M002
i14ex0: 
	jmp     dword ptr Pwr_i14_next

I14_App         endp

I17_App         proc
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	cmp     ah,2                            ; avoid status calls
	je      i17ex0
	call    APP_SPDUP
i17ex0: 
	jmp     dword ptr Pwr_i17_next

I17_App         endp

I21_App         proc
	assume  ds:nothing, es:nothing

	push    ds
	mov     ds,Bios_Data_Word
	assume  ds:Bios_Data

	push	ax

; upper bound check
	cmp	ah,MAX_I21_ENTRY
	ja	i21SpdUp

; get action from the lookup table 
	push	bx
	mov	bx,offset i21_table		; look up table for APIs
	xchg	ah,al			; get function code  in al
	xlat
	pop	bx
	or	al,al			; a busy call ?
	jz	i21SpdUp
	inc	al			; idle calls ?
	jz	i21ex0

; special cases
	cmp	ax,644h			; ioctl get input status call ?
	je	i21ex0

	cmp	al,4b

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品综合| 国产精品伦一区| 国产精品少妇自拍| 亚洲国产精品久久久男人的天堂| 激情久久久久久久久久久久久久久久| 91欧美一区二区| 精品理论电影在线观看 | 一本到三区不卡视频| 日韩三级视频在线看| 亚洲蜜臀av乱码久久精品| 一区二区三区欧美视频| 亚洲天堂av一区| 国产精品网站一区| 国产日韩精品一区二区浪潮av| 亚洲一区二区成人在线观看| 国产高清久久久| 日韩精品一区二| 免费看黄色91| 91精品国产综合久久久蜜臀图片| 亚洲欧美综合另类在线卡通| 国产呦精品一区二区三区网站| 欧美在线免费观看视频| 亚洲欧美经典视频| 91在线一区二区| 国产精品久久久久影院亚瑟| 懂色av一区二区夜夜嗨| 久久亚洲捆绑美女| 国产又黄又大久久| 久久在线免费观看| 久久99热这里只有精品| 26uuu精品一区二区在线观看| 日本不卡免费在线视频| 制服丝袜中文字幕一区| 日本亚洲一区二区| 欧美在线视频日韩| 亚洲成a人v欧美综合天堂| 欧美四级电影网| 亚洲大尺度视频在线观看| 欧美自拍丝袜亚洲| 香蕉加勒比综合久久| 在线综合视频播放| 日本亚洲一区二区| 久久在线观看免费| 成人中文字幕合集| 亚洲人成小说网站色在线 | 亚洲蜜臀av乱码久久精品蜜桃| 色综合天天综合网天天狠天天 | 久久久欧美精品sm网站| 国产老女人精品毛片久久| 国产精品无人区| 91美女在线看| 日韩综合在线视频| 日韩欧美亚洲国产精品字幕久久久| 秋霞成人午夜伦在线观看| 欧美va亚洲va国产综合| 国产成人精品一区二| 亚洲人成网站色在线观看| 欧美日韩三级一区| 国产一区二区精品久久99| 国产精品久久久久久久久晋中 | 亚洲一区二区三区四区五区中文| 欧美高清视频不卡网| 麻豆成人综合网| 中文字幕精品一区二区精品绿巨人 | 成人v精品蜜桃久久一区| 亚洲乱码中文字幕综合| 欧美一区二区观看视频| 国产精品一级片| 一区二区三区 在线观看视频| 欧美卡1卡2卡| va亚洲va日韩不卡在线观看| 亚洲高清久久久| 久久久久久久久岛国免费| 91网站最新网址| 精品制服美女丁香| 亚洲精品成人精品456| 日韩一区二区视频| 99riav一区二区三区| 久久成人综合网| 亚洲乱码中文字幕综合| 久久久久久免费毛片精品| 国产精品888| 欧美欧美午夜aⅴ在线观看| 亚洲一区二区综合| 久久久久久久久久久久久夜| 欧美性一二三区| 高清成人免费视频| 日韩成人免费电影| 中文字幕一区二区三区不卡在线| 91精品国产91综合久久蜜臀| av中文字幕亚洲| 黄色成人免费在线| 午夜欧美在线一二页| 国产精品美女久久福利网站| 欧美成人一区二区三区片免费 | 99久久综合国产精品| 久久国产夜色精品鲁鲁99| 亚洲电影一级黄| 亚洲一级二级三级在线免费观看| 中文字幕成人网| 久久综合九色综合欧美就去吻 | 欧美性xxxxxxxx| 91蜜桃婷婷狠狠久久综合9色| 福利一区福利二区| 国产麻豆视频一区二区| 精品在线播放免费| 久久99久久久欧美国产| 日本亚洲天堂网| 蜜桃精品视频在线| 久久综合色之久久综合| 不卡av在线网| 麻豆视频观看网址久久| 一区二区三区四区国产精品| 亚洲视频在线一区二区| 国产精品久久久久9999吃药| 国产精品第四页| 亚洲美女视频在线| 亚洲一区二区五区| 洋洋av久久久久久久一区| 亚洲黄色片在线观看| 亚洲黄色在线视频| 亚洲成av人片| 日韩专区中文字幕一区二区| 天天综合色天天综合色h| 日韩国产欧美三级| 精品一区二区久久久| 国产一区二区三区四区五区美女| 国产精品中文字幕一区二区三区| 国产丶欧美丶日本不卡视频| 成人综合婷婷国产精品久久| 99久久精品一区二区| 欧美日韩一区二区不卡| 日韩一级成人av| 国产亚洲女人久久久久毛片| xnxx国产精品| 日韩精品高清不卡| 激情五月激情综合网| www.日韩精品| 97成人超碰视| 色综合天天综合色综合av| 色婷婷久久久综合中文字幕| 欧美日韩国产另类一区| 日韩丝袜美女视频| 国产视频在线观看一区二区三区| 中文字幕欧美激情一区| 亚洲国产日韩精品| 狠狠色丁香久久婷婷综合_中| 不卡av在线免费观看| 欧美精品高清视频| 日本一区二区综合亚洲| 一区二区三区在线免费观看| 美国三级日本三级久久99| 成人av网站大全| 欧美一区二区三区播放老司机| 国产午夜精品久久久久久久| 一区二区理论电影在线观看| 加勒比av一区二区| 91美女在线观看| 久久久精品国产99久久精品芒果| 亚洲精品免费在线| 日本不卡视频在线观看| 欧美激情中文不卡| 欧美精品一区二区三区一线天视频| 最新国产成人在线观看| 蜜桃视频第一区免费观看| 91麻豆免费看片| 国产欧美视频一区二区| 麻豆免费精品视频| 色婷婷av一区二区三区之一色屋| 久久综合狠狠综合久久综合88| 亚洲超碰精品一区二区| 99久久久久久| 国产日产亚洲精品系列| 麻豆精品精品国产自在97香蕉| 色综合久久综合网欧美综合网 | 亚洲精品视频免费看| 黄色小说综合网站| 91麻豆精品国产自产在线观看一区| 亚洲欧洲av在线| 夫妻av一区二区| 亚洲精品一区二区三区蜜桃下载| 三级成人在线视频| 欧美伊人精品成人久久综合97 | 久久亚洲精精品中文字幕早川悠里| 午夜婷婷国产麻豆精品| 97久久精品人人澡人人爽| 久久久精品tv| 国产精品一二三区在线| 日韩欧美黄色影院| 日韩1区2区日韩1区2区| 欧美高清一级片在线| 亚洲国产日韩一区二区| 在线免费观看日本欧美| 亚洲男同性视频| 色系网站成人免费| 亚洲免费在线电影| 色综合久久九月婷婷色综合| 亚洲色欲色欲www| 91九色最新地址| 亚洲一线二线三线视频|