www.pudn.com > hpbios.rar > AFLASH.ASM


;	[]===========================================================[] 
; 
;	NOTICE: THIS PROGRAM BELONGS TO AWARD SOFTWARE INTERNATIONAL(R) 
;		INC. IT IS CONSIDERED A TRADE SECRET AND IS NOT TO BE 
;		DIVULGED OR USED BY PARTIES WHO HAVE NOT RECEIVED 
;		WRITTEN AUTHORIZATION FROM THE OWNER. 
; 
; 	[]===========================================================[] 
; 
;---------------------------------------------------------------------------- 
;Rev	Date	 Name	Description 
;---------------------------------------------------------------------------- 
;OEM02  03/10/00 BAR	Added Utility_Support_GPO_Ctrl swtich 
;OEM01	01/24/00 AVN	Fixed awdflash.exe fail. 
;R00	01/03/00 RIC	Initialization. 
 
;=========================================================================== 
; 
;Flash_12V_Enable_By_GPO_Low	EQU	0	; GPO0 Low enable 12V 
;Flash_12V_Enable_By_GPO_Low	EQU	1	; GPO1 Low enable 12V 
;Flash_12V_Enable_By_GPO_Low	EQU	2	; GPO2 Low enable 12V 
;.......... 
;Flash_12V_Enable_By_GPO_Low	EQU	30	; GPO30 Low enable 12V 
; 
;Flash_12V_Enable_By_GPO_High	EQU	0	; GPO0 High enable 12V 
;Flash_12V_Enable_By_GPO_High	EQU	1	; GPO1 High enable 12V 
;Flash_12V_Enable_By_GPO_High	EQU	2	; GPO2 High enable 12V 
;.......... 
;Flash_12V_Enable_By_GPO_High	EQU	30	; GPO30 High enable 12V 
; 
;=========================================================================== 
; 
;Flash_W_By_GPO_Low	EQU	0	; GPO0 Low Enable Flash Write. 
;Flash_W_By_GPO_Low	EQU	1	; GPO1 Low Enable Flash Write. 
;Flash_W_By_GPO_Low	EQU	2	; GPO2 Low Enable Flash Write. 
;............ 
;Flash_W_By_GPO_Low	EQU	30	; GPO30 Low Enable Flash Write. 
; 
;Flash_W_By_GPO_High	EQU	0	; GPO0 High Enable Flash Write. 
;Flash_W_By_GPO_High	EQU	1	; GPO1 High Enable Flash Write. 
;Flash_W_By_GPO_High	EQU	2	; GPO2 High Enable Flash Write. 
;............ 
;Flash_W_By_GPO_High	EQU	30	; GPO30 High Enable Flash Write. 
; 
;=========================================================================== 
 
.386p 
		PAGE	56,132 
		TITLE	CHIPSET  -- 386/486 EISA ROM/BIOS 
 
		INCLUDE	BIOS.CFG 
		INCLUDE	COMMON.MAC 
		INCLUDE POST.EQU 
		INCLUDE POST.MAC 
		INCLUDE	BTROMSEG.EQU 
		COMPILE_FOR_APMBIOS 	=	0	 
		include	SMIFLASH.INC			 
		extrn	Issue_System_Reset:Near       
		extrn	Get_Ct:Near			 
		extrn	Set_Ct:Near			 
		extrn	Get_Set_Ct:Near			 
		extrn	Get_PMIO:Near			 
		extrn	Set_PMIO:Near			 
		extrn	Get_Set_PMIO:Near		 
 
G_RAM		SEGMENT	USE16 AT 0 
 
		ORG	04H*4 
		INCLUDE	SEG_0.INC 
 
		ORG	400H 
		INCLUDE	G_RAM.INC 
 
G_RAM		ENDS 
 
DGROUP		GROUP	FCODE 
FCODE		SEGMENT	USE16 PARA PUBLIC 'CODE' 
		ASSUME	CS:DGROUP,DS:DGROUP 
 
;;=======================================================================* 
;; Check BIOS HOOK Function 
;; Input : None 
;; Output:   AX 
;;	   bit 0    =	PCI_RESET_Support 
;;	   bit 1    =   Switch_USB_SMI 
;;	   bit 2-15 =	Reserved  must be 0 
;;=======================================================================* 
Aflash_report_fun	=	0  
ifdef 	PCI_RESET_SUPPORT 
	Aflash_report_fun = Aflash_report_fun + 1 
endif;	PCI_RESET_SUPPORT 
 
 
ifdef	USB_SUPPORT 
	Aflash_report_fun = Aflash_report_fun + 2 
endif;	USB_SUPPORT 
 
ifdef	NT_FLASH		;Support Win_NT update Flash ROM  
	Aflash_report_fun = Aflash_report_fun + 16		  
endif;	NT_FLASH						  
 
 
		ALIGN	8 
;OEM02 FLASH_ROUTINE_HEAD	db	'$@AWDFLASH'			 
;OEM02 start 
ifndef	OEM_FLASH_ROUTINE_HEAD 
OEM_FLASH_ROUTINE_HEAD	EQU	'$@AWDFLASH' 
endif	;OEM_FLASH_ROUTINE_HEAD 
FLASH_ROUTINE_HEAD	db	OEM_FLASH_ROUTINE_HEAD 
;OEM02 end 
		DW	Offset	DGROUP:KBC_12V_Control 
		DW	Offset	DGROUP:Ct_ROM_Write_Enable 
		DW	Offset	DGROUP:Ct_ROM_Write_Disable 
		DW	Offset	DGROUP:Ct_Enable_ROM_Decode 
		DW	Offset	DGROUP:Ct_Init 
		DW	Offset	DGROUP:CT_Disable_ROM_Shadow 
		DW	Offset	DGROUP:CT_Enable_ROM_Shadow 
		DW	Offset	DGROUP:Ct_Special_REG_Save 
		DW	Offset	DGROUP:Ct_After_Program 
		DW	Offset	DGROUP:CT_Disable_CD_Shadow	 
		DW	Offset	DGROUP:CT_Enable_CD_Shadow	 
		DW	Aflash_Report_Fun      			 
		DW	Offset  DGROUP:Issue_System_Reset      	 
ifdef	USB_SUPPORT						 
		DW	Offset  DGROUP:Switch_USB_SMI         	 
else;	USB_SUPPORT						 
		DW	?					 
endif;	USB_SUPPORT						 
		DW	?		;Offset	DGROUP:AMP_16_PowerOff_fun 
		DW	?		;Offset  DGROUP:Check_ACPower 
		DW	SMI_IO_Port	;Software SMI IO port 
 
PUBLIC	FLASH_ROUTINE_START					 
FLASH_ROUTINE_START:   
;;=======================================================================* 
;; KBC_12V_Control: 
;; 	ROM Write Vpp (12V) Control By Keyboard Pin 29/30 
;; Input : None 
;; Output: BL : Bit 0 Set	1 => Enable Control By Keyboard 
;;		Bit 1 Set 	1 => Pin 29 Active 
;; 		Bit 2 Set	1 => Pin 30 Active 
;;=======================================================================* 
		Public	KBC_12V_Control 
KBC_12V_Control	proc	near 
		xor	bl,bl 
		retf	      
KBC_12V_Control	endp 
 
;;=======================================================================* 
;; Ct_ROM_Write_Enable: 
;; Input : None 
;; Output: None 
;; Note  : This routine is OEM dependent 
;;=======================================================================* 
		Public	Ct_ROM_Write_Enable 
Ct_ROM_Write_Enable	proc	near 
		pusha 
		mov	cx,VT586 + 40h 
		call	Get_Ct 
		or	al,01h 
		call	Set_Ct 
 
ifNdef Utility_Support_GPO_Ctrl					;OEM02 
 	;-------------------------------; 
 	;  Control 12V	(Low => Enable)	; 
 	;-------------------------------; 
   IFDEF	Flash_12V_Enable_By_GPO_Low 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		and    	al,not (01 shl Flash_12V_Enable_By_GPO_Low) 
 		call	Set_PMIO 
     endif;Flash_12V_Enable_By_GPO_Low LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 15 
       IF    Flash_12V_Enable_By_GPO_Low GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_12V_Enable_By_GPO_Low-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_Low GE 8 
     endif;Flash_12V_Enable_By_GPO_Low LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 23 
       IF    Flash_12V_Enable_By_GPO_Low GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_12V_Enable_By_GPO_Low-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_Low GE 16 
     endif;Flash_12V_Enable_By_GPO_Low LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 30 
       IF    Flash_12V_Enable_By_GPO_Low GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_12V_Enable_By_GPO_Low-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_Low GE 24 
     endif;Flash_12V_Enable_By_GPO_Low LE 30 
   ENDIF;	Flash_12V_Enable_By_GPO_Low 
  
  
 	;-------------------------------; 
 	; Control 12V  (High => Enable)	; 
 	;-------------------------------; 
   IFDEF	Flash_12V_Enable_By_GPO_High 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		or    	al, (01 shl Flash_12V_Enable_By_GPO_High) 
 		call	Set_PMIO 
     endif;Flash_12V_Enable_By_GPO_High LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 15 
       IF    Flash_12V_Enable_By_GPO_High GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_12V_Enable_By_GPO_High-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_High GE 8 
     endif;Flash_12V_Enable_By_GPO_High LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 23 
       IF    Flash_12V_Enable_By_GPO_High GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_12V_Enable_By_GPO_High-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_High GE 16 
     endif;Flash_12V_Enable_By_GPO_High LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 30 
       IF    Flash_12V_Enable_By_GPO_High GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_12V_Enable_By_GPO_High-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_High GE 24 
     endif;Flash_12V_Enable_By_GPO_High LE 30 
   ENDIF;	Flash_12V_Enable_By_GPO_High 
  
 	;-------------------------------; 
 	;  ROM Writable	(Low => Enable)	; 
 	;-------------------------------; 
   IFDEF	Flash_W_By_GPO_Low 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		and    	al,not (01 shl Flash_W_By_GPO_Low) 
 		call	Set_PMIO 
     endif;Flash_W_By_GPO_Low LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 15 
       IF    Flash_W_By_GPO_Low GE 8 
 		mov	cx,VT686 + 76h			;OEM01 
 		call	Get_Ct				;OEM01 
 		mov	[si+4],al			;OEM01 
 		or	al,02h				;OEM01 
 		call	Set_Ct				;OEM01 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_W_By_GPO_Low-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_Low GE 8 
     endif;Flash_W_By_GPO_Low LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 23 
       IF    Flash_W_By_GPO_Low GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_W_By_GPO_Low-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_Low GE 16 
     endif;Flash_W_By_GPO_Low LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 30 
       IF    Flash_W_By_GPO_Low GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_W_By_GPO_Low-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_Low GE 24 
     endif;Flash_W_By_GPO_Low LE 30 
   ENDIF;	Flash_W_By_GPO_Low 
  
  
 	;-------------------------------; 
 	; ROM Writable (High => Enable)	; 
 	;-------------------------------; 
   IFDEF	Flash_W_By_GPO_High 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		or    	al, (01 shl Flash_W_By_GPO_High) 
 		call	Set_PMIO 
     endif;Flash_W_By_GPO_High LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 15 
       IF    Flash_W_By_GPO_High GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_W_By_GPO_High-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_High GE 8 
     endif;Flash_W_By_GPO_High LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 23 
       IF    Flash_W_By_GPO_High GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_W_By_GPO_High-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_High GE 16 
     endif;Flash_W_By_GPO_High LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 30 
       IF    Flash_W_By_GPO_High GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_W_By_GPO_High-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_High GE 24 
     endif;Flash_W_By_GPO_High LE 30 
   ENDIF;	Flash_W_By_GPO_High 
endif; Utility_Support_GPO_Ctrl					;OEM02 
		popa 
		retf 
Ct_ROM_Write_Enable	endp 
 
;;=======================================================================* 
;; Ct_ROM_Write_Disable: 
;; Input : None 
;; Output: None 
;; Note  : This routine is OEM dependent 
;;=======================================================================* 
		Public	Ct_ROM_Write_Disable 
Ct_ROM_Write_Disable	proc	near 
		pusha 
		mov	cx,VT586 + 40h 
		call	Get_Ct 
		and	al,not 01h 
		call	Set_Ct 
 
ifNdef Utility_Support_GPO_Ctrl					;OEM02 
 	;-------------------------------; 
 	; Control 12V (High => Disable)	; 
 	;-------------------------------; 
   IFDEF	Flash_12V_Enable_By_GPO_Low 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		or    	al, (01 shl Flash_12V_Enable_By_GPO_Low) 
 		call	Set_PMIO 
     endif;Flash_12V_Enable_By_GPO_Low LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 15 
       IF    Flash_12V_Enable_By_GPO_Low GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_12V_Enable_By_GPO_Low-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_Low GE 8 
     endif;Flash_12V_Enable_By_GPO_Low LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 23 
       IF    Flash_12V_Enable_By_GPO_Low GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_12V_Enable_By_GPO_Low-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_Low GE 16 
     endif;Flash_12V_Enable_By_GPO_Low LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_Low LE 30 
       IF    Flash_12V_Enable_By_GPO_Low GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_12V_Enable_By_GPO_Low-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_Low GE 24 
     endif;Flash_12V_Enable_By_GPO_Low LE 30 
   ENDIF;Flash_12V_Enable_By_GPO_Low 
  
  
 	;-------------------------------; 
 	; Control 12V  (Low => Disable)	; 
 	;-------------------------------; 
   IFDEF	Flash_12V_Enable_By_GPO_High 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		and    	al,not (01 shl Flash_12V_Enable_By_GPO_High) 
 		call	Set_PMIO 
     endif;Flash_12V_Enable_By_GPO_High LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 15 
       IF    Flash_12V_Enable_By_GPO_High GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_12V_Enable_By_GPO_High-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_High GE 8 
     endif;Flash_12V_Enable_By_GPO_High LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 23 
       IF    Flash_12V_Enable_By_GPO_High GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_12V_Enable_By_GPO_High-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_High GE 16 
     endif;Flash_12V_Enable_By_GPO_High LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_12V_Enable_By_GPO_High LE 30 
       IF    Flash_12V_Enable_By_GPO_High GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_12V_Enable_By_GPO_High-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_12V_Enable_By_GPO_High GE 24 
     endif;Flash_12V_Enable_By_GPO_High LE 30 
   ENDIF;Flash_12V_Enable_By_GPO_High 
  
  
 	;-------------------------------; 
 	; ROM Writable (High => Disable); 
 	;-------------------------------; 
   IFDEF	Flash_W_By_GPO_Low 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		or    	al, (01 shl Flash_W_By_GPO_Low) 
 		call	Set_PMIO 
     endif;Flash_W_By_GPO_Low LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 15 
       IF    Flash_W_By_GPO_Low GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_W_By_GPO_Low-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_Low GE 8 
     endif;Flash_W_By_GPO_Low LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 23 
       IF    Flash_W_By_GPO_Low GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_W_By_GPO_Low-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_Low GE 16 
     endif;Flash_W_By_GPO_Low LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_W_By_GPO_Low LE 30 
       IF    Flash_W_By_GPO_Low GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		or    	al, (01 shl (Flash_W_By_GPO_Low-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_Low GE 24 
     endif;Flash_W_By_GPO_Low LE 30 
   ENDIF;Flash_W_By_GPO_Low 
  
  
 	;-------------------------------; 
 	; ROM Writable (Low => Disable)	; 
 	;-------------------------------; 
   IFDEF	Flash_W_By_GPO_High 
 		;***************; 
 		;   GPO 0-7	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 7 
 		mov	cl,4ch 
 		call	Get_PMIO 
 		and    	al,not (01 shl Flash_W_By_GPO_High) 
 		call	Set_PMIO 
     endif;Flash_W_By_GPO_High LE 7 
 		;***************; 
 		;   GPO 8-15	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 15 
       IF    Flash_W_By_GPO_High GE 8 
 		mov	cl,4dh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_W_By_GPO_High-8)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_High GE 8 
     endif;Flash_W_By_GPO_High LE 15 
 		;***************; 
 		;   GPO 16-23	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 23 
       IF    Flash_W_By_GPO_High GE 16 
 		mov	cl,4eh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_W_By_GPO_High-16)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_High GE 16 
     endif;Flash_W_By_GPO_High LE 23 
 		;***************; 
 		;   GPO 24-30	; 
 		;***************; 
     if	  Flash_W_By_GPO_High LE 30 
       IF    Flash_W_By_GPO_High GE 24 
 		mov	cl,4fh 
 		call	Get_PMIO 
 		and    	al,not (01 shl (Flash_W_By_GPO_High-24)) 
 		call	Set_PMIO 
       ENDIF;Flash_W_By_GPO_High GE 24 
     endif;Flash_W_By_GPO_High LE 30 
   ENDIF;Flash_W_By_GPO_High 
endif; Utility_Support_GPO_Ctrl					;OEM02 
 		popa 
		retf 
Ct_ROM_Write_Disable	endp 
;;=======================================================================* 
;; Enable Flash ROM decode for special motherboard 
;; Input : None 
;; Output: None 
;; Note  : This routine is OEM dependent 
;;=======================================================================* 
		Public	Ct_Enable_ROM_Decode 
Ct_Enable_ROM_Decode	proc	near 
		pusha 
		mov	cx,VT586 + 43h 
		call	Get_Ct 
		or	al,0B0h 
		call	Set_Ct 
ifdef	Enable_Flash_ROM_By_Low_GPIO 
		;---------------------------------------; 
		; Set GPIO to Low for Enabled Flash ROM	; 
		;---------------------------------------; 
		mov	cl,40 
		call	Get_PMIO 
		or	al,(01h shl Enable_Flash_ROM_By_Low_GPIO) 
		call	Set_PMIO 
 
		mov	cl,42 
		call	Get_PMIO 
		and	al,not (01h shl Enable_Flash_ROM_By_Low_GPIO) 
		call	Set_PMIO 
endif;	Enable_Flash_ROM_By_Low_GPIO 
ifdef	Enable_Flash_ROM_By_High_GPIO 
		;----------------------------------------; 
		; Set GPIO to High for Enabled Flash ROM ; 
		;----------------------------------------; 
		mov	cl,40 
		call	Get_PMIO 
		or	al,(01h shl Enable_Flash_ROM_By_High_GPIO) 
		call	Set_PMIO 
 
		mov	cl,42 
		call	Get_PMIO 
		or	al,(01h shl Enable_Flash_ROM_By_High_GPIO) 
		call	Set_PMIO 
endif;	Enable_Flash_ROM_By_High_GPIO 
		popa 
		retf 
Ct_Enable_ROM_Decode	endp 
 
;;=======================================================================* 
;; Initialize motherboard to desired status 
;; Input : None 
;; Output: None 
;; Note  : This routine is OEM dependent 
;;=======================================================================* 
		Public	Ct_Init 
Ct_Init		proc	near 
		pushad 
		mov	cl, 2ch			 
		call	Get_PMIO		 
		and	al, NOT 01h		 
		call	Set_PMIO		 
ifdef P6_BIOS_ONLY 
;disable F-segment cacheability 
		xor	eax, eax		; CPUID level 0 
	        db      0fh, 0a2h		; Op code CPUID 
		cmp	ebx, 'iryC'		; 
		jz	short Cyrix_CPU_	; 
 
		xor	eax,eax		;disable F-segment cacheability 
		xor	edx,edx		 
 		mov	ecx,26EH       	;address(26EH) for F0000-F7FFF 
 		WRMSR 
 		mov	cx,26FH		;address(26FH) for F8000-FFFFF 
 		WRMSR  
	Cyrix_CPU_:			 
endif; P6_BIOS_ONLY 
		popad 
		retf 
Ct_Init		endp 
 
;;=======================================================================* 
;; Disable ROM Shadow 
;; Input	: None 
;; Output	: None 
;;=======================================================================* 
		Public	CT_Disable_ROM_Shadow 
CT_Disable_ROM_Shadow	proc	near 
		pusha 
 
		mov	cx,VT8605 + 63h 
		call	Get_Ct 
		and	al,not 0f0h			;Disable E/F Shadow 
		call	Set_Ct 
 
		popa 
		retf 
CT_Disable_ROM_Shadow	endp 
;;=======================================================================* 
;; Enable ROM Shadow 
;; Input	: None 
;; Output	: None 
;;=======================================================================* 
		Public	CT_Enable_ROM_Shadow 
CT_Enable_ROM_Shadow	proc	near 
		pusha 
		mov	cx,VT8605 + 63h 
		call	Get_Ct 
		or	al, 0f0h			;Enable E/F Shadow 
		call	Set_Ct 
 
		popa 
		retf 
CT_Enable_ROM_Shadow	endp 
 
;;=======================================================================* 
;; Ct_After_Program: 
;; 	Set system into certain state after flash memory fininsh program 
;; 	Normally, enable flash write protect 
;; Input  : None 
;; Output : None 
;;=======================================================================* 
		Public	Ct_After_Program 
Ct_After_Program	proc	near 
		pusha 
 
		mov	al,[si] 
		mov	cx,VT586 + 43h 
		call	Set_Ct 
 
		mov	al,[si+3] 
		mov	cx,VT8605 + 63h 
		call	Set_Ct 
ifdef	VT686 
	ifndef	NO_XDIR 
		mov	cx,VT686 + 76h 
		mov	al, [si+4] 
		call	Set_Ct 
	endif;	NO_XDIR 
endif;	VT686 
		popa 
		retf 
Ct_After_Program	endp 
;;=======================================================================* 
;; Ct_Special_REG_Save: 
;;	For register call by two hook or more, save register value here. 
;; 
;;		Ex: 	MOV	CX,XXXX 
;;			CALL	GET_CT 
;;			MOV	[SI],AX		; save word value 
;;		 	MOV	CX,XXXX 
;;			CALL	GET_CT 
;;			MOV	[SI+2],AL	; save byte value 
;;		 	MOV	CX,XXXX 
;;			CALL	GET_CT 
;;			MOV	[SI+3],AL 
;;		MAX Length => 30 Bytes 
;; Input : DS:SI 
;; Output: None 
;; Save	 : DS,ES 
;;=======================================================================* 
		Public	Ct_Special_REG_Save 
Ct_Special_REG_Save	proc	near 
		pusha 
 
		mov	cx,VT586 + 43h 
		call	Get_Ct 
		mov	[si],al 
 
		mov	cx,VT8605 + 63h 
		call	Get_Ct 
		mov	[si+3],al 
 
ifdef	VT686 
	ifndef	NO_XDIR 
		mov	cx,VT686 + 76h 
		call	Get_Ct 
		mov	[si+4],al 
		and	al, not 02h 
		call	Set_Ct 
	endif;	NO_XDIR 
endif;	VT686 
		popa 
 
		retf 
Ct_Special_REG_Save	endp 
 
;;=======================================================================* 
;; Disable C/D ROM Shadow 
;; Input	: None 
;; Output	: None 
;;=======================================================================* 
		Public	CT_Disable_ROM_Shadow 
CT_Disable_CD_Shadow	proc	near 
 
		retf 
CT_Disable_CD_Shadow	endp 
;;=======================================================================* 
;; Enable C/D ROM Shadow 
;; Input	: None 
;; Output	: None 
;;=======================================================================* 
		Public	CT_Enable_ROM_Shadow 
CT_Enable_CD_Shadow	proc	near 
 
		retf 
CT_Enable_CD_Shadow	endp 
 
;;=======================================================================* 
;; Switch_USB_SMI 
;; Input	: al=0 disable USB SMI 
;;		    =1 Enable  USB SMI 
;; Output	: None 
;;=======================================================================* 
 
ifdef	USB_SUPPORT 
		Public	Switch_USB_SMI 
Switch_USB_SMI	proc	near 
 
		pusha 
		mov	bl,al 
		mov	cx,2ch		;usb address 
		call	Get_PMIO 
		and	al,not 01	;2C bit [0] : 0 => Disable USB SMI 
		or	al,bl		;	      1 => Enaable USB SMI	 
		call	Set_PMIO 
		popa 
		retf 
 
Switch_USB_SMI	endp 
endif;	USB_SUPPORT 
 
FLASH_ROUTINE_END: 
PUBLIC	FLASH_ROUTINE_LEN 
FLASH_ROUTINE_LEN	DW	offset FLASH_ROUTINE_END - offset FLASH_ROUTINE_START 
 
FCODE		ENDS 
		END