⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmupost.asm

📁 AWARD BIOS源代码,支持的CHIPSET请看文件,有同型号的板子烧上去就可以跑
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		mov	si,offset Video_Off_Item
		call	GetItem_value
		mov	PM_RAM:[Video_Off_Mode],al

;Read DOZE timer setup value and store in SM RAM

;Read Suspend timer setup value and store in SM RAM

;Set Conserve Mode
		mov	cx, VT586_ACPI + 53h
                mov     al, 88h                 ; But the first conserve mode will on afer
                call    Set_PMU                 ; first doze state

		mov	PM_RAM:[PM_MODE1],FULL_ON
		post_func_call	Update_PM_Timer		

;enable primary activity monitor

		post_func_call	End_Pmi_Handler 	;clear status

ifdef	Break_Suspend_In_Mouse_CMOS	       		
                mov     si,offset Mouse_Irq_Item	
		call    GetItem_Value
		shl	al,2
                mov     PM_RAM:[MISC_CNTL1],al		
endif;	Break_Suspend_In_Mouse_CMOS	       		   	

ifdef	HDD_PWRDOWN_IN_SUSPEND					
ifdef   HDD_PWRDOWN_IN_SUSPEND_After_1Min 			
		mov	si,offset HDD_Power_Item		
		Call	GetItem_Value		
 								
		mov	byte ptr PM_RAM:[HDD_OFF_Timer],al	

		cmp 	al,0				   
		jz	short @f			   

		post_func_call	HDD_Timer_Restore	
@@:					 
endif;	HDD_PWRDOWN_IN_SUSPEND_After_1Min
endif;	HDD_PWRDOWN_IN_SUSPEND
		mov	cl, 2ch
;R08		mov	al, 1
;R08		call	Set_PMIO
;R16		mov	bx, 01e0h		;R08
		mov	bx, 01e4h		;R16
		call	Get_Set_PMIO		;R08
;Set CPU type


ifdef	VT686				;R52A - starts
		mov	si,offset Evt_INTR_Item
		call	F000_Getitem_Value
		mov	bl,00000000b			; set primary activity
		test	al,1	    
		jz	short @F    
		mov	bl,00000010b
@@:				    
		mov	PM_RAM:[VT586PM_I34h_Value],bl	;default
		mov	al,bl				;R70
		mov	cl, 34h
		call	E000_Set_PMIO
	
		mov	si,offset Evt_HDD_Item
		call	F000_GetItem_Value
		or	al,al
		jz	short No_Evt_HDD
		or	PM_RAM:[VT586PM_I34h_Value],00011100b
	No_Evt_HDD:

		mov	si,offset Evt_DMA_Item
		call	F000_GetItem_Value
		or	PM_RAM:[VT586PM_I34h_Value],al

		mov	si,offset Evt_LPT_COM_Item
		call	F000_GetItem_Value
		or	al,al
		jz	short No_Evt_LPT_COM
		or	PM_RAM:[VT586PM_I34h_Value],11100000b
	No_Evt_LPT_COM:

		mov	si,offset M_Evt_VGA_Item
		call	F000_GetItem_Value
		mov	cl, 35h
		call	E000_Set_PMIO
else;	VT686				;R52A - ends
		mov	si,offset Evt_INTR_Item
		call	Getitem_Value
		mov	bl,10000000b			; set primary activity
		test	al,1	    
		jz	short @F    
		mov	bl,10000010b			
@@:				    
		mov	al,bl	    
		mov	PM_RAM:[VT586PM_I34h_Value],al	;default
		mov	cl, 34h
		call	Set_PMIO
	
		mov	si,offset Evt_HDD_Item
		call	GetItem_Value
		shl	al,3
		or	PM_RAM:[VT586PM_I34h_Value],al

		mov	si,offset Evt_DMA_Item
		call	GetItem_Value
		or	PM_RAM:[VT586PM_I34h_Value],al

;R52A		mov	si,offset Evt_INTR_Item
;R52A		call	GetItem_Value
;R52A		shl	al,1
;R52A		or	PM_RAM:[VT586PM_I34h_Value],al


		mov	si,offset Evt_LPT_COM_Item
		call	GetItem_Value
		shl	al,5
		or	PM_RAM:[VT586PM_I34h_Value],al

		mov	si,offset M_Evt_VGA_Item
		call	GetItem_Value
;R52Aifndef	VT686			;R52
		shl	al,4
		or	PM_RAM:[VT586PM_I34h_Value],al
;R52A;R52 - starts	
;R52Aelse;	VT686
;R52A		mov	cl, 35h
;R52A		call	E000_Set_PMIO
;R52Aendif;	VT686
;R52A;R52 - ends
endif;	VT686				;R52A

		mov	cl, 38h
		mov	al, 01h
		call	Set_PMIO

ifdef	Have_Fan_Control_Item_In_GPO_Low
	Have_Fan_Control_Item_In_GPO 	EQU	1
endif;	Have_Fan_Control_Item_In_GPO_Low
ifdef	Have_Fan_Control_Item_In_GPO_High
	Have_Fan_Control_Item_In_GPO 	EQU	1
endif;	Have_Fan_Control_Item_In_GPO_High

ifdef   Have_Fan_Control_Item_In_GPO
		extrn	Fan_Control_Item:near
		mov	si, offset DGROUP:Fan_Control_Item 
		call	GetItem_Value	       ;save suspend--> fan
		shl	al,7			       ;stop ?
 		or	PM_RAM:[Video_Off_Mode],al
endif;  Have_Fan_Control_Item_In_GPO

ifdef ACPI_SUPPORT			;
		mov	cl, 2ah		; Enable Software SMI
		mov	bl, 40h		;
		call	Get_Set_PMIO_OR	;
endif ;ACPI_SUPPORT			;

		push	ds			     
		mov	ax,G_RAM		     
		mov	ds,ax			     
		assume	ds:G_RAM		     
		mov	bl,byte ptr ds:[hardware]    
		pop	ds			     
		mov	byte ptr PM_RAM:[PS2_INST],bl
		pop	ds
		popa
endif;	Move_F000_PMU_INIT_To_E000				

		ret
Ct_PM_Init	Endp

ifndef	Move_F000_PMU_INIT_To_E000				
;R62 start
;==================================================[]
;Input: SI = item offset
;	DI = timer setting offset in PM_RAM
;==================================================[]
Timer_Transfer	proc	near
		call	GetItem_Value		;get setup setting
		xor	ah,ah
		shl	ax,1	
		mov	bx,offset Timer_Value	;value table
		add	bx,ax			;translate
		mov	ax,cs:[bx]		;into reg. value	
		mov	es:[di],ax		;save value in PM_RAM	
		ret
Timer_Transfer	ENDP

IRQ_Evnt_TBL:
		dw	offset IRQ3_Event_Item
		dw	offset IRQ4_Event_Item
		dw	offset IRQ5_Event_Item
		dw	offset IRQ6_Event_Item
		dw	offset IRQ7_Event_Item
		dw	offset IRQ8_Event_Item
		dw	offset IRQ9_Event_Item
		dw	offset IRQ10_Event_Item
		dw	offset IRQ11_Event_Item
		dw	offset IRQ12_Event_Item
		dw	offset IRQ13_Event_Item
		dw	offset IRQ14_Event_Item
		dw	offset IRQ15_Event_Item
IRQ_Evnt_TBL_Len	EQU	($ - offset IRQ_Evnt_TBL) /2
;R62 end

;			value	,unit	
;		----------------------
Timer_Value:
		db	00000000b,0ah		;Disable
		db	00000101b,0ah		;5 Sec  
		db	00001010b,0ah		;10 Sec 
		db	00010100b,0ah		;20 Sec 
		db	00011110b,0ah		;30 Sec 
		db	00101000b,0ah		;40 Sec 
		db	00111100b,0ah		;1 Min  
		db	01111000b,0ah		;2 Min  
		db	00000100b,0bh		;4 Min  
		db	00000110b,0bh		;6 Min  
		db	00001000b,0bh		;8 Min  
		db	00001010b,0bh		;10 Min 
		db	00010100b,0bh		;20 Min 
		db	00011110b,0bh		;30 Min 
		db	00101000b,0bh		;40 Min 
		db	00111100b,0bh		;1 Hour 
endif;	Move_F000_PMU_INIT_To_E000				

;[]========================================================================[]
;Procedure:	Ct_LCD_Init
;
;Function :	Set the LCD power down timer which initial method
;		varies from chip to chip
;
;Input	  :	DS = DGROUP
;		ES = PM_RAM
;
;Output   :	None
;
;Note	  :	1. Call from POST 79S (PM initialization)
;		2. Stack available
;		3. Don't destroy any SEGMENT registers!
;[]========================================================================[]
		ASSUME	ES:PM_RAM
		ASSUME	DS:DGROUP
		Public	Ct_LCD_Init
Ct_LCD_Init	Proc	Near
		ret
Ct_LCD_Init	Endp

;[]========================================================================[]
;Procedure:	HDD_Standby_Offset
;
;Function :	Tell BIOS kernal the offset of the setup item
;		"HDD Power Down Timer"
;
;Input	  :	DS = DGROUP
;		ES = PM_RAM
;
;Output   :	NC: HDD Power Down Item exist
;		    SI = Item offset
;		CF: HDD Power Down Item absent
;		    SI Don't care
;
;Note	  :	1. Call from POST 79S (PM initialization)
;		2. Stack available
;		3. Don't destroy any SEGMENT registers!
;		4. If you don't have such a item in SETUP,
;		   just set carry flag & return!
;[]========================================================================[]
		ASSUME	ES:PM_RAM
		ASSUME	DS:DGROUP
		Public	HDD_Standby_Offset
HDD_Standby_Offset	Proc	Near

		extrn	HDD_Timer_Item:Near
		mov	si,offset HDD_Timer_Item

		clc
		ret

HDD_Standby_Offset	Endp
;[]========================================================================[]
;Procedure:	Get_IRQ15_Offset
;
;Input	  :	DS = G_RAM
;
;Output   :	NC:
;			AX = Segment location of the IRQ15
;			     PMI service routine
;			SI = offset of the IRQ15 PMI service routine
;
;			i.e. AX:SI
;
;		CF:
;			IRQ 15 is not supported!
;
;Registers:	Please preserve all registers except AX & SI
;
;[Note]   :	1. called from PM_INIT
;		   NC: AX:SI will be placed interrupt table located
;		       in segment 0
;		   CF: IRQ15 vector will be masked off
;[]========================================================================[]
			ASSUME	DS:G_RAM
			Public	Get_IRQ15_Offset
Get_IRQ15_Offset	Proc	Near
			stc
			ret
Get_IRQ15_Offset	Endp

;[]========================================================================[]
;Procedure:	Ct_Resume_Handle
;
;Function :	Ct_Resume_Handle
;
;Input	  :	None
;
;Output   :	None
;[]========================================================================[]
		Public	Ct_Resume_Handle
Ct_Resume_Handle	Proc	Near
		mov	ax,G_RAM
		mov	ds,ax
		ASSUME	DS:G_RAM
		mov	ss,G_RAM:[ROM_MODULE_SEG]
		mov	sp,G_RAM:[ROM_MODULE_OFFSET]
		iret
Ct_Resume_Handle	Endp

;[]-------------------------------------------------------------------[]
;
; PPPPPPPP	 AA	  RRRRRRRR   TTTTTTTTTTT	       33333
; PPPPPPPPP	AAAA	  RRRRRRRRR  TTTTTTTTTTT    ***       333 333
; PPP	 PPP   AAAAAA	  RRR	 RRR	 TTT	    *** 	  333
; PPPPPPPPP   AAA  AAA	  RRRRRRRRR	 TTT			33333
; PPPPPPPP   AAAAAAAAAA   RRRRRRRR	 TTT	    *** 	  333
; PPP	    AAAAAAAAAAAA  RRR	RRR	 TTT	    ***       333 333
; PPP	   AAA	      AAA RRR	 RRR	 TTT		       33333
;
;	   Hooks to the real mode APM functions
;
;[]-------------------------------------------------------------------[]

;[]-------------------------------------------------------------------[]
;
; PPPPPPPP	 AA	  RRRRRRRR   TTTTTTTTTTT		44444
; PPPPPPPPP	AAAA	  RRRRRRRRR  TTTTTTTTTTT    ***        444444
; PPP	 PPP   AAAAAA	  RRR	 RRR	 TTT	    ***       444 444
; PPPPPPPPP   AAA  AAA	  RRRRRRRRR	 TTT		     4444444444
; PPPPPPPP   AAAAAAAAAA   RRRRRRRR	 TTT	    ***     44444444444
; PPP	    AAAAAAAAAAAA  RRR	RRR	 TTT	    *** 	  444
; PPP	   AAA	      AAA RRR	 RRR	 TTT			  444
;
;
;
;	   OEM specific subroutines
;
;	   Normally, this part will be placed with the PMI handler
;	   (IRQ15 or SMI or NMI)
;
;[]-------------------------------------------------------------------[]

;[]========================================================================[]
;Function :	Routine to handle the power management interrupt (PMI).
;
;Input    :	None
;
;Output   :	if PM using IRQ --- no output!
;		if PM using NMI --- NC: BIOS has handle this NMI for
;					PM chip!
;				    CF: NMI is not issue by PM chip
;
;Destroy:	if PM using IRQ --- destroy None
;		if PM using NMI --- destroy FLAG
;[]========================================================================[]

		Public	APM_R31_Added
APM_R31_Added:

;[]========================================================================[]
;Procedure:	Get_PMI_Source
;
;Function :	To get the corresponding PMI routine according
;		to what kind of PMI it is
;
;Input    :	DS = PM_RAM
;
;Output   :	SI = point to appropriate PMI handler
;		e.g. if it is a suspend request
;		     SI = offset Suspend_Handler
;
;Note	  :	1. Called from PM_Handler
;		2. stack available
;		3. The BIOS PM kernal will issue:
;		   "call si" after calling this routine!
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle PMI source 0Fh (reg. 35h bit 4-0)
;
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle PMI source
;
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle PMI source 
;
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle EXT SMI1 source 
;
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle PMI source 
;
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle PMI source
;
;[]========================================================================[]

;[]========================================================================[]
;
;Function :	Service routine to handle PMI source
;
;[]========================================================================[]


		ASSUME	DS:PM_RAM
ifndef	CRT_Control_Not_In_F000			
F000_Enable_CRT	Proc	Far
		call	Enable_CRT
		retf
F000_Enable_CRT	Endp

F000_Disable_CRT Proc	Far
		call	Disable_CRT
		retf
F000_Disable_CRT Endp
endif	;CRT_Control_Not_In_F000		

ifndef	V_ALARM_IN_E000			
F000_Virtual_Resume_Timer Proc	Far
		call	Virtual_Resume_Timer
		retf
F000_Virtual_Resume_Timer Endp

;-----------------------------------------------------------
;Function :	1. reg.30h bit 1,0 --> 00b (Full-On Mode)
;		2. set PM_RAM:[PM_MODE]=FULL_ON
;		3. Enable CRT display
;		4. set CPU to its full speed
;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -