;	[]===========================================================[]
;
;	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.
;
; 	[]===========================================================[]
;
		PAGE	60,132
		TITLE	PNPCHIP  -- Plug and Play Chipset Interface
;----------------------------------------------------------------------------
;Rev	Date	 Name	Description
;----------------------------------------------------------------------------
;R04	03/31/99 PAL	Add ESS1869 onboard PNP sound chip Disable function
;R03	11/30/98 BAR	Update ESCD DMI use SMM mode.
;			define switch "Flash_IN_SMBASE"
;R02A	11/16/98 RIC	Remove R02 code and Recover old code.(see chiprun(R03))
;R02	11/06/98 TNY	Fix that Trend Anti-Virus replace F0000-F4800 area
;			so, call this area's hook will cause system hang.
;R01	08/19/98 RIC	Add "Flash_W_By_GPO_Low","Flash_W_By_GPO_High" define.
;			"Flash_12V_Enable_By_GPO_Low/Flash_12V_Enable_By_GPO_High"
;R00	05/13/98 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
;
;===========================================================================
.386P

.XLIST
;[]========================================================================[]
;
;	Include file definition
;
;[]========================================================================[]

		INCLUDE BIOS.CFG
		INCLUDE	COMMON.EQU
		INCLUDE	COMMON.MAC
		INCLUDE	PNP.EQU
SKIP_108_10F	=	0
SKIP_250_257	=	0

 ifdef	UMC_8663
SKIP_108_10F	=	1
 endif;	UMC_8663
 ifdef	UMC_8669
SKIP_108_10F	=	1
 endif;	UMC_8669
 ifdef	SMC669_N_UMC_8669		
SKIP_108_10F	=	1		
 endif;	SMC669_N_UMC_8669		

 ifdef	W83787F
SKIP_250_257	=	1
 endif;	W83787F
 ifdef	W83877F
  ifndef	W83877F_USE_3f0H		
SKIP_250_257	=	1
  endif;	W83877F_USE_3f0H		
 endif;	W83877F

.LIST

;[]========================================================================[]
;
;	External label definition
;
;[]========================================================================[]

ifdef	PNP_BIOS
		EXTRN	SYSTEM4_BYTE:byte	
		EXTRN	Dummy_Set_Node:near	
		extrn	Record_IO_Map:near	
ifdef	PCI_BUS
ifdef	NEW_PCI_KERNEL
		extrn	LMEM_RESOURCE:ABS
		extrn	LMEM_BEFORE_ROM:ABS
		extrn	PCI_IRQ_ASSIGNED:ABS
else	;NEW_PCI_KERNEL
		EXTRN	Get_CfgSpace_Word:near	;PCI1A.ASM
		EXTRN	Get_CfgSpace_Byte:near	;PCI1A.ASM
		EXTRN	Record_IRQ_Map:near	;PNPPOST.ASM
endif	;NEW_PCI_KERNEL
endif	;PCI_BUS
		extrn	Record_1st_Ide:near	
		extrn	Record_2nd_Ide:near	
		extrn	Get_PMIO:near
		extrn	Set_PMIO:near

;R04 - start
ifdef	PROC_SPECIAL_ISAPNP
		extrn	Set_Wake_CSN:near
		extrn	ESS1869_Item:near
endif	;PROC_SPECIAL_ISAPNP
;R04 - end
ifdef	COMPRESS_CODE				
		extrn	Get_Cmos:near		
		extrn	Set_Cmos:near		
		extrn	Get_Ct:near		
		extrn	Set_Ct:near		
		extrn	Get_Set_Ct:near		
;R02		extrn	Get_Set_Ct_OR:near		
;R02		extrn	Get_Set_Ct_AND:near		
		extrn	Get_Set_Ct_OR:near			;R02A
		extrn	Get_Set_Ct_AND:near			;R02A
endif;	COMPRESS_CODE				

endif	;PNP_BIOS

;[]========================================================================[]
;
;	Low memory init (1st 64k)
;
;[]========================================================================[]

G_RAM		SEGMENT	USE16 AT 0

		ORG	04H*4
		INCLUDE	SEG_0.INC

		ORG	400H
		INCLUDE	G_RAM.INC

		ORG	2000h
		INCLUDE	PNPDATA.INC

		ORG	7C00H
BOOT		LABEL	FAR

G_RAM		ENDS

ifdef	COMPRESS_CODE
		extrn	Post_call_proc:near
DGROUP		GROUP	FCODE
FCODE		SEGMENT	USE16 PARA PUBLIC 'CODE'
		ASSUME	CS:DGROUP,DS:NOTHING
else	;COMPRESS_CODE
		extrn	F000_func_end:Near
		extrn	F000_VECT:Near
EGROUP		GROUP	ECODE
ECODE		SEGMENT	USE16 PARA PUBLIC 'ECODE'
		ASSUME	CS:EGROUP,DS:NOTHING
endif	;COMPRESS_CODE


IFDEF	PNP_BIOS

;[]========================================================================[]
;
;	Plug and Play BIOS customize definition
;
;[]========================================================================[]

;[]========================================================================[]
;
;	Default System Resource Map
;
;[]========================================================================[]

		public	DEF_IRQ_MAP
		public	DEF_DMA_MAP
		public	DEF_IO_MAP
		public	DEF_IO_MAP_L
DEF_IRQ_MAP	dw	1101111011111000b	
DEF_DMA_MAP	db	11101111b
DEF_IO_MAP	label	byte
		dwb	3B0h, 30h		;3B0-3DF
	IF	SKIP_108_10F
		dwb	108h, 08h		;108-10F
	ENDIF	;SKIP_108_10F
	IF	SKIP_250_257
		dwb	250h, 08h		;250-257
	ENDIF	;SKIP_250_257
DEF_IO_MAP_L	equ	($ - DEF_IO_MAP)/3

;[]========================================================================[]
;
;	READ_DATA port available, these values can be modified by MODBIN
;
;[]========================================================================[]

;[]========================================================================[]
;
;	CHIPSET DEVICE NODES DEFINITION
;
;[]========================================================================[]

		PUBLIC	CHIP_NODE
CHIP_NODE	LABEL	BYTE

ifdef	NO_RELEASE_IRQ12		
DEV_NODE	41D0H, 0C02H, 088000H, 00000011B, MB_NODE
MB_IRQ:
	IRQ_DSP      0000000000000000B
	END_DSP
	END_DSP
	END_DSP
DEV_NODE_END
endif;	NO_RELEASE_IRQ12		
ifdef	CARDBUS_USE_LAGECY
AT_PCMCIA_NODE	LABEL	NEAR
DEV_NODE	41D0H, 0E03H, 060500H, 000000011B, PCMCIA_NODE
	DB		82h, 09h, 00
	DB		"AT PCMCIA"
	FIO_DSP		3E0h,02h
	END_DSP

	END_DSP
	db	1Ch,41h,0D0h,0Eh,00h
	END_DSP
DEV_NODE_END
endif	;CARDBUS_USE_LAGECY

		PUBLIC	CHIP_NODE_INDEX
CHIP_NODE_INDEX	LABEL	BYTE
		DB	CHIP_NODES_NUM			
ifdef	CARDBUS_USE_LAGECY				
 		SET_NODE_INDEX	PCMCIA_NODE, 00001000B	
endif	;CARDBUS_USE_LAGECY				
ifdef	NO_RELEASE_IRQ12		
 		SET_NODE_INDEX	MB_NODE, 00001000B	
endif;	NO_RELEASE_IRQ12		
CHIP_NODES_NUM	EQU	($ - CHIP_NODE_INDEX - 1)/3	

		PUBLIC	CHIP_NODE_PROC
CHIP_NODE_PROC	LABEL	BYTE
ifdef	CARDBUS_USE_LAGECY						
 	NODE_PROC	PCMCIA_NODE, Dummy_Set_Node, Dummy_Set_Node, Ct_PCMCIA_Node
endif	;CARDBUS_USE_LAGECY
ifdef	NO_RELEASE_IRQ12		
 	NODE_PROC	MB_NODE, Dummy_Set_Node, Dummy_Set_Node, Ct_Mb_Node	
endif;	NO_RELEASE_IRQ12		
		DB	0FFh

		CHK_ATTR	%NODE_NUM		

;[]========================================================================[]
;Duplicate codes 
;[]========================================================================[]

;[]===========================[]
;[]===========================[]
		Public	Get_CMOS1
Get_CMOS1	Proc	Near
ifdef	COMPRESS_CODE			
		call	Get_Cmos	
else	;COMPRESS_CODE			
		out	70h, al
		NEWIODELAY
		in	al, 71h
		NEWIODELAY
endif	;COMPRESS_CODE			
		ret
Get_CMOS1	Endp

;[]===========================[]
;[]===========================[]
		Public	Set_CMOS1
Set_CMOS1	Proc	Near
ifdef	COMPRESS_CODE			
		call	Set_Cmos	
else	;COMPRESS_CODE			
		out	70h, al
		NEWIODELAY
		mov	al, ah
		out	71h, al
		NEWIODELAY
endif	;COMPRESS_CODE			
		ret
Set_CMOS1	Endp

;[]===========================[]
;[]===========================[]
Get_Ct1		Proc	Near
ifdef	COMPRESS_CODE			
		call	Get_Ct		
else	;COMPRESS_CODE			
CONFIG_ADDR	EQU	0cf8h
		mov	ax,8000H	;enable PCI config.
		shl	eax,16
		mov	ax,cx
		and	al,NOT 03h	;32 bit access for PCI
		mov	dx,CONFIG_ADDR	;index is 0cf8h
		out	dx,eax
		mov	dl,0fch		;start from 0cfch
		mov	al,cl
		and	al,03h
		add	dl,al	  	;byte index to read
		in	al,dx
endif	;COMPRESS_CODE			
		ret
Get_Ct1		Endp

;[]===========================[]
;[]===========================[]
SET_CT1		PROC	NEAR
ifdef	COMPRESS_CODE			
		call	Set_Ct		
else	;COMPRESS_CODE			
		xchg	ax,cx
		shl	ecx,16		;save value
		xchg	ax,cx		;restore cx
		mov	ax,8000H	;enable PCI config.
		shl	eax,16
		mov	ax,cx
		and	al,NOT 03h	;32 bit access for PCI
		mov	dx,CONFIG_ADDR	;index is 0cf8h
		out	dx,eax
		mov	dl,0fch		;start from 0cfch
		mov	al,cl
		and	al,03h
		add	dl,al	  	;byte index to read
		shr	ecx,16		;restore value
		mov	ax,cx
		out	dx,al
endif	;COMPRESS_CODE			
		ret
SET_CT1		ENDP
ifdef	CARDBUS_USE_LAGECY
Ct_PCMCIA_Node	Proc	Near
		clc			
		ret
Ct_PCMCIA_Node	Endp
endif	;CARDBUS_USE_LAGECY

;[]========================================================================[]
;Procedure:	Ct_PNP_Early_Init
;Function :
;Input    :	None
;Output   :	None
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_PNP_Early_Init
Ct_PNP_Early_Init	proc	near
		ret
Ct_PNP_Early_Init	endp

;[]========================================================================[]
;Procedure:	Ct_ReAlloc_Resource
;Function :	Modify system resource map for OEM usage. (e.g. PCI, EISA...)
;Input    :	DS:SI = pointer of system resource map
;		BP = stack data pointer at POST
;Output   :	None
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_ReAlloc_Resource
Ct_ReAlloc_Resource	proc	near

ifdef	PCI_BUS

ifdef	NEW_PCI_KERNEL

		mov	ax, PCI_IRQ_ASSIGNED[bp]	;each bit: 1=assigned
		not	ax
		and	ds:IRQ_MAP, ax				

		mov	eax, dword ptr LMEM_RESOURCE[bp]	
		not	eax					
		shl	eax, 8					
		and	dword ptr ds:UMB_MAP, eax		

else	;NEW_PCI_KERNEL

		mov	ch, 0
Scan_PCI_IRQ:
		xor	cl,cl			;Vendor ID
		F000_call Get_CfgSpace_Word

		cmp	ax, -1
		je	short Next_PCI_Slot

		mov	cl,3CH
		F000_call Get_CfgSpace_Byte	;AL = IRQ level

		call	Record_IRQ_Map		;DS:SI=point to resource map
						;AL=IRQ level

		test	ch,07h			;already a multi-function space?
		jnz	short @F		;yes, go point to next function

		mov	cl,0Eh			;read header type
		F000_call Get_CfgSpace_Byte	;read header type

		test	al,80H			;multi-function support?
		jnz	short @F		;yes, multi-function card!
Next_PCI_Slot:
		add	ch,7			;point to next device!
@@:
		add	ch,1			;point to next function space
		jnc	short Scan_PCI_IRQ	;scan slot 0-31

endif	;NEW_PCI_KERNEL

endif	;PCI_BUS

ifdef	PC87332
ifdef	PC87332_PORT
		mov	ax, PC87332_PORT
endif	;PC87332_PORT
ifdef	PC87332_ADDR_PORT
		mov	ax, PC87332_ADDR_PORT
endif	;PC87332_ADDR_PORT
		mov	dx, 4
ifdef	COMPRESS_CODE
		POST_func_call	Record_IO_Map
else	;COMPRESS_CODE
		call	Record_IO_Map
endif	;COMPRESS_CODE
endif	;PC87332

                mov     cx,VT586_IDE + 40h		;ide first channel
		call	Get_Ct1
		test	al, 02h				;enable/disable?
		jz	short @f			;skip if disable
		POST_func_call	Record_1st_Ide		;record ide1 resource

                mov     cx,VT586_IDE + 40h		;ide first channel
		call	Get_Ct1
		test	al, 01h				;enable/disable?
		jz	short @f			;skip if disable
		POST_func_call	Record_2nd_Ide		;record ide2 resource
@@:

		ret

Ct_ReAlloc_Resource	endp

;[]========================================================================[]
;Procedure:	Ct_Record_Resource
;Function :	Let OEM record current resource information
;Input    :	DS:SI = pointer of system resource map
;		BP = stack data pointer at POST
;Output   :	None
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_Record_Resource
Ct_Record_Resource	proc	near

ifdef	PCI_BUS
ifdef	NEW_PCI_KERNEL

		push	eax
		push	G_RAM
		pop	ds

		mov	edx, ds:PNPROM_MAP			
		not	edx
		mov	eax, 0000000Fh
		mov	edi, 00000F00h
	_KK_:
		test	edx, edi
		jz	_II_
		or	dword ptr LMEM_RESOURCE[bp], eax
		or	dword ptr LMEM_BEFORE_ROM[bp], eax	
	_II_:
		shl	eax, 4
		shl	edi, 4
		or	edi, edi
		jnz	short _KK_
		pop	eax

endif	;NEW_PCI_KERNEL
endif	;PCI_BUS

		ret
Ct_Record_Resource	endp

;[]========================================================================[]
;Procedure:	Ct_Get_Resource_Map
;Function :	Get system resource information in storage
;Input    :	DS:SI = pointer of memory buffer for system resource map
;Output   :	CF = 1 no storage support
;		CF = 0 storage support
;			ZF = 1 valid checksum
;			ZF = 0 invalid checksum
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_Get_Resource_Map
Ct_Get_Resource_Map	proc	near

ifndef	ESCD_SUPPORT
ifdef	CMOS_RAM_SUPPORT

		push	si
		xor	dl, dl
		mov	dh, CMOS_RESOURCE
		mov	cx, RESOURCE_LENGTH
	@@:
		mov	al, dh
		call	Get_CMOS1
		mov	ds:[si], al
		add	dl, al
		inc	dh
		inc	si
		loop	short @b
		or	dl, dl
		pop	si
		clc
		jz	short @f
		stc
@@:
		clc
		ret

endif	;CMOS_RAM_SUPPORT
else	;ESCD_SUPPORT

		stc
		ret

endif	;ESCD_SUPPORT

Ct_Get_Resource_Map	endp

;[]========================================================================[]
;Procedure:	Ct_Set_Resource_Map
;Function :	Set system resource information to storage
;Input    :	ES:DI = pointer of memory buffer for system resource map
;Output   :	CF = 1 no storage support
;		CF = 0 storage support
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_Set_Resource_Map
Ct_Set_Resource_Map	proc	near

ifndef	ESCD_SUPPORT
ifdef	CMOS_RAM_SUPPORT
		push	di
		xor	dl, dl
		mov	dh, CMOS_RESOURCE
		mov	cx, RESOURCE_LENGTH - 1
@@:
		mov	ah, es:[di]
		add	dl, ah
		mov	al, dh
		call	Set_CMOS1
		inc	dh
		inc	di
		loop	short @b
		neg	dl
		mov	ah, dl
		mov	al, dh
		call	Set_CMOS1
		pop	di
		clc
		ret
endif	;CMOS_RAM_SUPPORT
else	;ESCD_SUPPORT

		stc
		ret

endif	;ESCD_SUPPORT

Ct_Set_Resource_Map	endp
;R04 - start
ifdef	PROC_SPECIAL_ISAPNP
;[]========================================================================[]
;Procedure:	Ct_Check_Special_IsaPnp
;Function :	Check this IsaPnp , do we want ?
;Input	  :	DS, ES = G_RAM
;Output   :	CF = 1 Special IsaPNP
;		CF = 0 Not Special IsaPNP
;[]========================================================================[]

ESS1869_PNP_Header	db	016h,073h,000h,003h
			db	0FFh,0FFh,0FFh,0FFh

		public	Ct_Check_Special_IsaPnp
Ct_Check_Special_IsaPnp	proc	near

		extrn	GetItem_Value:near
		mov	si,offset cs:ESS1869_Item
		push	ds			
		call	GetItem_Value
		pop	ds			
		cmp	al,0			; Disable ?
		jne	No_Serial_ID_Match	; NO


		mov	ax,cs			; ES:DI
		mov	es,ax
		mov	di,offset cs:ESS1869_PNP_Header

		mov	si,offset ds:SERIAL_ID	; DS:SI
		mov	cx,8
		rep	cmpsb
		jne	short No_Serial_ID_Match

		stc	
		ret
				
	No_Serial_ID_Match:

		clc
		ret

Ct_Check_Special_IsaPnp	endp

;[]========================================================================[]
;Procedure:	Ct_Proc_Special_IsaPnp
;Function :	Program IsaPNP card register
;Input	  :	DS, ES = G_RAM
;Output   :	None
;[]========================================================================[]
		public	Ct_Proc_Special_IsaPnp

Ct_Proc_Special_IsaPnp	proc	near

		mov	al,29h
		mov	dx,279h
		out	dx,al

		mov	al,0
		mov	dx,0A79h
		out 	dx,al
		ret			

Ct_Proc_Special_IsaPnp	endp
endif	;PROC_SPECIAL_ISAPNP
;R04 - end


;****************************************************************
;*								*
;*	CHIPSET DEPENDENT MODULE TO SUPPORT FLASH ROM		*
;*								*
;****************************************************************

;[]========================================================================[]
;Procedure:	Ct_Buffer_Request
;Function :	Return buffer size request for Ct_Save_Shadow and
;		Ct_Restore_Shadow
;Input    :	none
;Output   :	AX = size request (word unit)
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_Buffer_Request
Ct_Buffer_Request	proc	near
		mov	ax, 2			;2 words request
		ret
Ct_Buffer_Request	endp

;[]========================================================================[]
;Procedure:	Ct_Save_Shadow
;Function :	Save shadow or cache status for restore
;Input    :	SS:EBP = pointer to stack for saving shadow status
;Output   :	none
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_Save_Shadow
Ct_Save_Shadow	proc	near
		pusha			

		mov	cx,VT692 + 63h	;E000-FFFF shadow reg.
		call	Get_Ct1
		mov	[ebp], al

		mov	cx,VT692 + 52h	;E000h-FFFFh Cacheable & Write protect
		call	Get_Ct1
		mov	[ebp+1], al

		mov	cx,VT586 + 40h	;Flash ROM write
		call	Get_Ct1
		mov	[ebp+2], al

		popa			
		ret
Ct_Save_Shadow	endp

;[]========================================================================[]
;Procedure:	Ct_Restore_Shadow
;Function :	Restore Shadow, cache status
;Input    :	SS:EBP = pointer to stack for restore shadow status
;			these data are saved by Ct_Save_Shadow
;Output   :	none
;Registers:
;Note	  :
;[]========================================================================[]
		public	Ct_Restore_Shadow
Ct_Restore_Shadow	Proc	near
		pusha				

		mov	al, [ebp]
		mov	cx, VT692 + 63h		;E000-FFFF shadow reg.
		call	Set_Ct1

		mov	al, [ebp+1]		;E000h-FFFFh Cacheable & Write protect
		mov	cx, VT692 + 52h
		call	Set_Ct1

		mov	al, [ebp+2]		;Flash ROM write
		mov	cx, VT586 + 40h		
		call	Set_Ct1

;R01 - starts
	;-------------------------------;
	; 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
;R01 - ends
		popa
		ret
Ct_Restore_Shadow	endp

;[]========================================================================[]
;Procedure:	Ct_Enable_Flash
;Function :	Disable F000 shadow, cache for directory ROM access
;		Enable flash ROM write
;Input    :	none
;Output   :	none
;Registers:
;Note	  :	Just disable F000h shadow RAM, and E000h shadow RAM must be
;		enabled.
;		If F000h segment shadow can't disable independently, must
;		implement Ct_Set_Flash and Ct_Get_Flash
;[]========================================================================[]
		public	Ct_Enable_Flash
Ct_Enable_Flash	proc	near
		pusha				

;R02		mov	cx,VT692 + 52h
;R02		mov	bl,not 10h		
;R02		call	Get_Set_Ct_AND		

;R02A		mov	cx,VT692 + 52h			;R02
;R02A		call	Get_Ct				;R02
;R02A		and	al,not 10h			;R02
;R02A		call	Set_Ct				;R02
		mov	cx,VT692 + 52h			;R02A
		mov	bl,not 10h			;R02A
		call	Get_Set_Ct_AND			;R02A

ifndef FLASH_IN_SMBASE				;Rbbb
		mov	cx,VT692 + 63h
		mov	bx, 0010000011101111b	
		call	Get_Set_Ct		
endif; FLASH_IN_SMBASE				;Rbbb

;R02		mov	cx,VT586 + 40h
;R02		mov	bl, 00000001b		
;R02		call	Get_Set_Ct_OR		

;R02A		mov	cx,VT586 + 40h			;R02
;R02A		call	Get_Ct				;R02
;R02A		or	al, 00000001b			;R02
;R02A		call	Set_Ct				;R02
		mov	cx,VT586 + 40h			;R02A
		mov	bl, 00000001b			;R02A
		call	Get_Set_Ct_OR			;R02A

;R01 - starts
	;-------------------------------;
	;  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	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
;R01 - ends
		popa				
		ret
Ct_Enable_Flash	endp

;[]========================================================================[]
;Procedure:	Ct_Set_Flash
;Function :	Write one byte (data/command) to Flash ROM
;Input    :	ES:DI = address pointer
;		AL = value to write
;Output   :	none
;Registers:
;Note	  :	Don't destroy any registers
;[]========================================================================[]
		public	Ct_Set_Flash
Ct_Set_Flash	proc	near
		mov	es:[di], al
		ret
Ct_Set_Flash	endp

;[]========================================================================[]
;Procedure:	Ct_Get_Flash
;Function :	Read one byte (data/status) from Flash ROM
;Input    :	ES:DI = address pointer
;Output   :	AL = value
;Registers:
;Note	  :	Don't destroy any registers
;[]========================================================================[]
ifndef	ESCD_M2						
		public	Ct_Get_Flash
endif;	ESCD_M2						
Ct_Get_Flash	proc	near

ifndef	ESCD_M2
		pusha				

		mov	dx, CONFIG_ADDR		
		mov	eax, (80000000h+((VT692 + 63h) AND 0FFFCh))
		out	dx, eax
		mov	dx, (CONFIG_ADDR+4+((VT692 + 63h) AND 03))
		in	al, dx

		push	ax		;restore value
		and	al, NOT 30h	;disable shadow read/write

;******************************************************************************
; The code size of this block must be less than 16 bytes
; and must start at 16 bytes boundary
		align	16
@@:
		out	dx, al
		NEWIODELAY
		mov	cl, es:[di]
		pop	ax		;restore value
		out	dx, al
if ($ - @b) GT 16
.ERR
%OUT	ERROR: Set Flash code is more than 16 bytes
endif
;******************************************************************************

		mov	al, cl
		popa					
endif;	ESCD_M2		




		ret
Ct_Get_Flash	endp

;[]========================================================================[]
;Procedure:	Ct_GetAll_Flash
;Function :	Read a block data in Flash ROM
;Input    :	ES:DI = address pointer
;		DS:SI = address of buffer
;Output   :	AL = value
;Registers:
;Note	  :	Don't destroy any registers
;[]========================================================================[]
		public	Ct_GetAll_Flash
Ct_GetAll_Flash	proc	near

ifndef	ESCD_M2				
		push	dx

		mov	dx, CONFIG_ADDR
		mov	eax, (80000000h+((VT692 + 63h) AND 0FFFCh))
		out	dx, eax
		mov	dx, (CONFIG_ADDR+4+((VT692 + 63h) AND 03))
		in	al, dx

		push	ax		;restore value
		and	al, NOT 30h	;disable shadow read/write

;******************************************************************************
; The code size of this block must be less than 16 bytes
; and must start at 16 bytes boundary
		align	16
@@:
		out	dx, al
		rep	movsb	
		pop	ax		;restore value
		out	dx, al
if ($ - @b) GT 16
.ERR
%OUT	ERROR: Set Flash code is more than 16 bytes
endif
;******************************************************************************

		pop	dx
endif;	ESCD_M2			


		ret
Ct_GetAll_Flash	endp

;[]========================================================================[]
;Procedure:	Ct_Shadow_Write
;Function :	Enable segment E000h, F000h shadow RAM write
;Input    :	none
;Output   :	none
;Registers:
;Note	  :	If "Enable shadow RAM write" cause "Read from ROM", then
;		must implement Ct_Set_Shadow
;[]========================================================================[]
		public	Ct_Shadow_Write
Ct_Shadow_Write	proc	near
		pusha				

;R02		mov	cx,VT692 + 52h
;R02		mov	bl,not 10h		
;R02		call	Get_Set_Ct_AND		

;R02A		mov	cx,VT692 + 52h		;R02
;R02A		call	Get_Ct			;R02
;R02A		and	al, not 10h		;R02
;R02A		call	Set_Ct			;R02
		mov	cx,VT692 + 52h		;R02A
		mov	bl,not 10h		;R02A
		call	Get_Set_Ct_AND		;R02A

;R02		mov	cx,VT692 + 63h
;R02		mov	bl, 00110000b		
;R02		call	Get_Set_Ct_OR		

;R02A		mov	cx,VT692 + 63h		;R02
;R02A		call	Get_Ct			;R02
;R02A		or	al, 00110000b		;R02
;R02A		call	Set_Ct			;R02
		mov	cx,VT692 + 63h		;R02A
		mov	bl, 00110000b		;R02A
		call	Get_Set_Ct_OR		;R02A

		popa				
		ret
Ct_Shadow_Write	endp

;[]========================================================================[]
;Procedure:	Ct_Shadow_Read
;Function :	To prg F000h shadow RAM to be write protected
;Input    :	none
;Output   :	none
;[]========================================================================[]
		public	Ct_Shadow_Read
Ct_Shadow_Read	proc	near

		pusha				

		mov	cx,VT692 + 63h
		mov	bx,0010000011001111b	
		call	Get_Set_Ct		

		popa				

		ret

Ct_Shadow_Read	endp


;[]========================================================================[]
;Procedure:	Ct_Set_Shadow
;Function :	Write one byte (data) to Shadow RAM
;Input    :	ES:DI = address pointer
;		AL = value to write
;Output   :	none
;Registers:
;Note	  :	Don't destroy any registers
;[]========================================================================[]
		public	Ct_Set_Shadow
Ct_Set_Shadow	proc	near
		mov	es:[di], al
		ret
Ct_Set_Shadow	endp

;****************************************************************
;*								*
;*	CHIPSET DEVICE NODES PROCESS ROUTINES			*
;*								*
;****************************************************************

;[]========================================================================[]
; Input:	ES:DI = Device node structure pointer
; Output:	CF = 0 Device node structure modified successful
;		CF = 1 Device disabled
;[]========================================================================[]
ifdef	NO_RELEASE_IRQ12		
Ct_Mb_Node	proc	near

		push	ds
		mov	ax, G_RAM
		mov	ds, ax
		test	byte ptr ds:Hardware, 00000100b	;PS/2 installed ?
		pop	ds
		stc
		jnz	short @F		;PS2 mouse installed

		push	si
		mov	si, (offset MB_IRQ)+2
		or	byte ptr cs:[si], 00010000b	;report IRQ 12
		pop	si
		clc
@@:

		clc

		ret

Ct_Mb_Node	endp
endif;	NO_RELEASE_IRQ12		

;[]=============================================================[]
; If use MB IRQ routing 0 --> no define
; If use MB IRQ routing 1 --> define LPT_USE_PIRQ1
; If use MB DMA routing 0 --> no define
; If use MB DMA routing 1 --> define ECP_DMA_USE_MBDMA1
;[]=============================================================[]

	LPT_IRQ_ROUTING_MBIRQ	=	VT586 + 55h
ifdef	LPT_USE_PIRQ1
	LPT_IRQ_ROUTING_MBIRQ	=	VT586 + 57h
endif	;LPT_USE_PIRQ1

;[]=============================================================[]
;Procedure :	Ct_Get_LPT_IRQ_Routing
;
;Input	:	None
;
;Output	:	AL = 5 : LPT IRQ routed to IRQ 5
;		     7 : LPT IRQ routed to IRQ 7
;		    -1 : LPT IRQ routing disabled	
;
;Registers :	Please save all registers except AL
;
;[]=============================================================[]
		Public	Ct_Get_LPT_IRQ_Routing
Ct_Get_LPT_IRQ_Routing	Proc	Near

		push	cx

		mov	cx,LPT_IRQ_ROUTING_MBIRQ

		call	Get_Ct1
		and	al,0Fh
		or	al,al
		jnz	short @F
		mov	al,-1
	@@:
		pop	cx

		ret

Ct_Get_LPT_IRQ_Routing	Endp

;[]=============================================================[]
;Procedure :	Ct_Set_LPT_IRQ_Routing
;
;Input	:	AL = 5 : LPT IRQ routed to IRQ 5
;		     7 : LPT IRQ routed to IRQ 7
;		    -1 : Disable LPT IRQ routing
;
;Output	:	None
;
;Registers :	Please save all registers
;
;[]=============================================================[]
		Public	Ct_Set_LPT_IRQ_Routing
Ct_Set_LPT_IRQ_Routing	Proc	Near

		pusha
		cmp	al,-1
		jne	short @F
		xor	al,al
	@@:
		mov	ah,al

		mov	cx,LPT_IRQ_ROUTING_MBIRQ

		mov	bl,not 0Fh		
		mov	bh,ah			
		call	Get_Set_Ct		
		popa

		ret

Ct_Set_LPT_IRQ_Routing	Endp
				
;[]=============================================================[]
;Procedure :	Ct_Get_Ecp_DMA_Routing
;
;Input	:	None
;
;Output	:	AL = 0 to 7
;
;		    -1 : ECP DMA routing disabled
;		     0 : ECP DMA routed to DMA 0
;		     1 : ECP DMA routed to DMA 1
;				  .
;				  .
;		     7 : ECP DMA routed to DMA 7
;
;Registers :	Please save all registers except AL
;
;[]=============================================================[]
		Public	Ct_Get_Ecp_DMA_Routing
Ct_Get_Ecp_DMA_Routing	Proc	Near

		push	cx
		mov	cx,VT586 + 50h
		call	Get_Ct1

ifndef	ECP_DMA_USE_MBDMA1
		and	al,00000111b
else	;ECP_DMA_USE_MBDMA1
		and	al,00111000b
		shr	al,3
endif	;ECP_DMA_USE_MBDMA1

		cmp	al,100b
		jne	short @F
		mov	al,-1
	@@:
		pop	cx

		ret

Ct_Get_Ecp_DMA_Routing	Endp

;[]=============================================================[]
;Procedure :	Ct_Set_Ecp_DMA_Routing
;
;Input	:	AL = 0 to 7, -1
;
;		    -1 : Disable DMA routing
;		     0 : ECP DMA routed to DMA 0
;		     1 : ECP DMA routed to DMA 1
;				  .
;				  .
;		     7 : ECP DMA routed to DMA 7
;
;Output	:	None
;
;Registers :	Please save all registers
;
;[]=============================================================[]
		Public	Ct_Set_Ecp_DMA_Routing
Ct_Set_Ecp_DMA_Routing	Proc	Near

		pusha
		cmp	al,-1
		jne	short @F
		mov	al,100b
	@@:
		mov	bl,al

		mov	cx,VT586 + 50h
		call	Get_Ct1

ifndef	ECP_DMA_USE_MBDMA1
		and	al,00111000b
else	;ECP_DMA_USE_MBDMA1
		and	al,00000111b
		shl	bl,3
endif	;ECP_DMA_USE_MBDMA1

		or	al,bl
		call	Set_Ct1
		popa

		ret

Ct_Set_Ecp_DMA_Routing	Endp

ifdef	IRQ12_CHIPSET_QUALIFY
;Input  : none
;Output : carry clear - IRQ 12 is available for PCI/ISA
;	  carry set   - IRQ 12 is not available for PCI/ISA
		public	Ct_Irq12_Chk
Ct_Irq12_Chk	proc	near

		clc
		ret

Ct_Irq12_Chk	endp
endif;	IRQ12_CHIPSET_QUALIFY

ENDIF	;PNP_BIOS

ifdef	COMPRESS_CODE
FCODE		ENDS
else	;COMPRESS_CODE
ECODE		ENDS
endif	;COMPRESS_CODE
		END
