;	[]===========================================================[]
;
;	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
;----------------------------------------------------------------------------
;R01	11/27/98 GAR	Remove code for volt0 calculating
;R00	10/23/98 GAR	Init. Ver.

                extrn   DISP_Byte_INT2:far
                extrn   DISP_WORD_INT5:far
                extrn   DISP_WORD_INT4:far

ifdef	COMPILE_FOR_SENSOR_ASM
IF	COMPILE_FOR_SENSOR_ASM EQ 2
;[]==============================================================[]
;Input	: AH - Register Index
;Output : AL - Value Read
;[]==============================================================[]
Sensor_Port	EQU	0295h

		public	Get_Sensor
		public	Set_Sensor
Get_Sensor	Proc	Near
		push	dx
                mov     dx, Sensor_Port
                mov     al, ah
                out     dx, al
                inc     dx
                in      al,dx
		pop	dx
		ret
Get_Sensor	Endp

;[]==============================================================[]
;Input : AH - Register Index
;	 AL - Value to Write
;Output: none
;[]==============================================================[]
Set_Sensor	Proc	Near
		push	dx
                mov     dx, Sensor_Port
		xchg	ah, al
                out     dx, al
                inc     dx
		xchg	ah, al
                out     dx, al
		pop	dx
		ret
Set_Sensor	Endp


;***************************************************************************
;**** SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM ****
;**** SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM ****
;**** SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM ****
;**** SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM SENSOR.ASM ****
;***************************************************************************
		extrn	F000_Shadow_W:near
		extrn	F000_Shadow_R:near
		extrn	F000_call_proc:near

ifdef	ACPI_Support
		extrn	SENSOR_FLAG:near
endif	;ACPI_Support

		Public	Prg_Sensor_Chip	
Prg_Sensor_Chip	Proc	Near
		assume	ds:DGROUP
		push	ds
		mov	ax,0f000h
		mov	ds,ax
		f000_call	DGROUP:F000_Shadow_W

		mov	ah, 40h
		call	Get_Sensor
		cmp	al, 1
		je	short @F

;Sensor doesn't exist or enable.
ifdef	ACPI_Support
		and	word ptr DGROUP:[SENSOR_FLAG],not 01h
endif	;ACPI_Support
		call	Hide_Sensor_Items
		jmp	Prg_Sensor_Chip_Exit

@@:
;Sensor exists or enables.
;enable MVIN1 - MVIN3, VIN0 - VIN4 and THIN1 - THIN3
ifdef	ACPI_Support
		or	word ptr DGROUP:[SENSOR_FLAG], 1
endif	;ACPI_Support
                mov     ax, 507Fh
		call	Set_Sensor

Prg_Sensor_Chip_Exit:

		f000_call	DGROUP:F000_Shadow_R
		pop	ds

		ret
Prg_Sensor_Chip	Endp

		extrn	Volt0_Item:near
		extrn	Volt1_Item:near
		extrn	Volt2_Item:near
		extrn	Volt3_Item:near
		extrn	Volt4_Item:near
		extrn	Volt5_Item:near
		extrn	Volt6_Item:near
		extrn	VoltB_Item:near
		extrn	Temp1_Item:near
		extrn	Temp2_Item:near
;		extrn	Temp3_Item:near

Hide_Sensor_Items	Proc	Near
		or	word ptr ds:[Volt0_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Volt1_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Volt2_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Volt3_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Volt4_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Volt5_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Volt6_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[VoltB_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Temp1_Item].ITEMSTAT,ITEMDISABLE
		or	word ptr ds:[Temp2_Item].ITEMSTAT,ITEMDISABLE
;		or	word ptr ds:[Temp3_Item].ITEMSTAT,ITEMDISABLE
		ret
Hide_Sensor_Items	Endp

ENDIF	;COMPILE_FOR_SENSOR_ASM EQ 2	
endif	;COMPILE_FOR_SENSOR_ASM

ifdef	COMPILE_FOR_SENSOR_MNU 
;***************************************************************************
;***** Special_Show Special_Show Special_Show Special_Show Special_Show ****
;***** Special_Show Special_Show Special_Show Special_Show Special_Show ****
;***** Special_Show Special_Show Special_Show Special_Show Special_Show ****
;***************************************************************************
IF	COMPILE_FOR_SENSOR_MNU EQ 2
     	dw      offset Volt0_Item, offset Show_Volt0_Item  
	dw      offset Volt1_Item, offset Show_Volt1_Item  
	dw      offset Volt2_Item, offset Show_Volt2_Item  
	dw      offset Volt3_Item, offset Show_Volt3_Item  
	dw      offset Volt4_Item, offset Show_Volt4_Item  
	dw      offset Volt5_Item, offset Show_Volt5_Item  
	dw      offset Volt6_Item, offset Show_Volt6_Item  
	dw      offset VoltB_Item, offset Show_VoltB_Item  
	dw      offset Temp1_Item, offset Show_Temp1_Item  
	dw      offset Temp2_Item, offset Show_Temp2_Item  
;	dw      offset Temp3_Item, offset Show_Temp3_Item  
ENDIF	;COMPILE_FOR_SENSOR_MNU 

;***************************************************************************
;**** SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU ****
;**** SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU ****
;**** SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU ****
;**** SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU SENSOR.MNU ****
;***************************************************************************
IF	COMPILE_FOR_SENSOR_MNU EQ 1

		Public	First_Superio_SSR_Item
First_Superio_SSR_Item	Label	Near

DEFINE_ITEM     Volt0_Item
DEFINE_MENUITEM	, GROUP_HEALTH, 0, 10
menuitem <SHOWONLY,\
offset Volt0_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Volt1_Item
menuitem <SHOWONLY,\
offset Volt1_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Volt2_Item
menuitem <SHOWONLY,\
offset Volt2_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Volt3_Item
menuitem <SHOWONLY,\
offset Volt3_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Volt4_Item
menuitem <SHOWONLY,\
offset Volt4_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Volt5_Item
menuitem <SHOWONLY,\
offset Volt5_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Volt6_Item
menuitem <SHOWONLY,\
offset Volt6_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     VoltB_Item
menuitem <SHOWONLY,\
offset VoltB_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Temp1_Item
menuitem <SHOWONLY,\
offset Temp1_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

DEFINE_ITEM     Temp2_Item
menuitem <SHOWONLY,\
offset Temp2_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

;DEFINE_ITEM     Temp3_Item
;menuitem <SHOWONLY,\
;offset Temp3_Str           ,NOCT,0,KERNAL_CONTROL,00000001b,\
;offset NullStr,0,0,Xaxis,Yaxis,0,0, offset NullStr>

		Public	Last_Superio_SSR_Item
Last_Superio_SSR_Item	Label	Near

ENDIF	;COMPILE_FOR_SENSOR_MNU 

;***************************************************************************
;**** SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR ****
;**** SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR ****
;**** SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR ****
;**** SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR SENSOR.STR ****
;***************************************************************************
IF	COMPILE_FOR_SENSOR_MNU EQ 0
Volt0_Str               db      'Voltage 0'
                        db      (COLLON_LOC - ($-(offset Volt0_Str))) dup (" ")
                        db      ': ',0

Volt1_Str               db      'Voltage 1'
                        db      (COLLON_LOC - ($-(offset Volt1_Str))) dup (" ")
                        db      ': ',0

Volt2_Str               db      'Voltage 2'
                        db      (COLLON_LOC - ($-(offset Volt2_Str))) dup (" ")
                        db      ': ',0

Volt3_Str               db      'Voltage 3'
                        db      (COLLON_LOC - ($-(offset Volt3_Str))) dup (" ")
                        db      ': ',0

Volt4_Str               db      'Voltage 4'
                        db      (COLLON_LOC - ($-(offset Volt4_Str))) dup (" ")
                        db      ': ',0

Volt5_Str               db      'Voltage 5'
                        db      (COLLON_LOC - ($-(offset Volt5_Str))) dup (" ")
                        db      ': ',0

Volt6_Str               db      'Voltage 6'
                        db      (COLLON_LOC - ($-(offset Volt6_Str))) dup (" ")
                        db      ': ',0

VoltB_Str               db      'Voltage Battery'
                        db      (COLLON_LOC - ($-(offset VoltB_Str))) dup (" ")
                        db      ': ',0

Temp1_Str               db      'Temperature 1'
                        db      (COLLON_LOC - ($-(offset Temp1_Str))) dup (" ")
                        db      ': ',0

Temp2_Str               db      'Temperature 2'
                        db      (COLLON_LOC - ($-(offset Temp2_Str))) dup (" ")
                        db      ': ',0

;Temp3_Str               db      'Temperature 3'
;                        db      (COLLON_LOC - ($-(offset Temp3_Str))) dup (" ")
;                        db      ': ',0
;

Show_Volt0_Item   Proc    Near
                mov     bl, 020h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt0_Item   Endp

Show_Volt1_Item   Proc    Near
                mov     bl, 021h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt1_Item   Endp

Show_Volt2_Item   Proc    Near
                mov     bl, 022h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt2_Item   Endp

Show_Volt3_Item   Proc    Near
                mov     bl, 023h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt3_Item   Endp

Show_Volt4_Item   Proc    Near
                mov     bl, 024h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt4_Item   Endp

Show_Volt5_Item   Proc    Near
                mov     bl, 025h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt5_Item   Endp

Show_Volt6_Item   Proc    Near
                mov     bl, 026h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Volt6_Item   Endp

Show_VoltB_Item   Proc    Near
                mov     bl, 04ah
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_VoltB_Item   Endp

Show_Temp1_Item   Proc    Near
                mov     bl, 027h
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Temp1_Item   Endp

Show_Temp2_Item   Proc    Near
                mov     bl, 03Eh
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Temp2_Item   Endp

Show_Temp3_Item   Proc    Near
                mov     bl, 03Fh
                call    far ptr E000_Show_Volt_Item
        @@:                                                     ;R30A
                ret
Show_Temp3_Item   Endp

ENDIF	;COMPILE_FOR_SENSOR_MNU

;***************************************************************************
;**** SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  ****
;**** SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  ****
;**** SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  ****
;**** SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  SENSOR.E8  ****
;***************************************************************************
IF	COMPILE_FOR_SENSOR_MNU EQ 3
ifndef	BIOS60						      
		Public	Update_Superio_Sensor_Screen
Update_Superio_Sensor_Screen	Proc	near
		pusha
ifdef	Update_Sensor_in_CPUFEAT
		cmp	byte ptr CUR_PAGE[bp], PAGE_CPU
else;	Update_Sensor_in_CPUFEAT
ifdef	Update_Sensor_in_IOFEAT				      
		cmp	byte ptr CUR_PAGE[bp], PAGE_IO	      
else;	Update_Sensor_in_IOFEAT				      
		cmp	byte ptr CUR_PAGE[bp], PAGE_CFEATURE
endif;	Update_Sensor_in_IOFEAT				      
endif;	Update_Sensor_in_CPUFEAT			      
		jne	short Update_Superio_Sensor_end

		mov	si, offset Superio_Sensor_Item_List

Update_Superio_Sensor_Start:

		mov	bx, cs:[si]
		cmp	bx, -1
		je	short Update_Superio_Sensor_end
		push	si
		F000_call	Display_Whole_Item
		pop	si
		inc	si
		inc	si
		jmp	short Update_Superio_Sensor_Start
	;----------------------------------------
	F000_call	Show_Volt0_Item
Update_Superio_Sensor_end:

		popa
		ret

Update_Superio_Sensor_Screen	Endp
endif	;BIOS60

ifdef	BIOS60							;R03
	db	'$SpeRT'					;R03
endif	;BIOS60							;R03

Superio_Sensor_Item_List	Label	Word
ifdef	BIOS60							;R03
	dw	Superio_Sensor_Runtime_No				;R03
endif	;BIOS60							;R03
     	dw      offset Volt0_Item
	dw      offset Volt1_Item  
	dw      offset Volt2_Item  
	dw      offset Volt3_Item  
	dw      offset Volt4_Item  
	dw      offset Volt5_Item  
	dw      offset Volt6_Item  
	dw      offset VoltB_Item  
	dw      offset Temp1_Item  
	dw      offset Temp2_Item  
;	dw      offset Temp3_Item  
Superio_Sensor_Item_No	EQU	(($ - offset Superio_Sensor_Item_List) - 2) / 2
	dw	-1

                Public  E000_Show_Volt_Item
E000_Show_Volt_Item      Proc    near
                pusha
                push    word ptr ATTRIBUTE[bp]
                push    word ptr Cursor_X[bp]
                mov     ax, word ptr ATTRIBUTE[bp]

                call    Get_Volt_Val
                cmp     bl, 04ah
                je      Volt_bat

                cmp     bl, 027h
                jge     Temp_123

                cmp     bl, 023h
                je      Volt_3

                cmp     bl, 024h
                je      Volt_4

                cmp     bl, 025h
                je      Volt_5

                cmp     bl, 026h
                je      Volt_6
                jmp     Volt_0_2

Volt_bat:
;R01                xor     al,0ffh
Volt_0_2:
                call    ShowV0_2_bat
                jmp     Show_Volt_Exit

Volt_3:
                call    ShowV3
                jmp     Show_Volt_Exit

Volt_4:
                call    ShowV4
                jmp     Show_Volt_Exit

Volt_5:
                call    ShowV5
                jmp     Show_Volt_Exit

Volt_6:
                call    ShowV6
                jmp     Show_Volt_Exit

Temp_123:
                test    al,80h
                jz      Temp_p
Temp_m:
                push    ax
                call    Show_m
                pop     ax
                xor     al,0ffh
                inc     al
                jmp     Temp_ok
Temp_p:
                push    ax
                call    Show_b
                pop     ax
Temp_ok:
                F000_Call       DISP_WORD_INT4
                mov     al, 248
                F000_Call       DISPLAY_CHAR
                mov     al, 'C'
                F000_Call       DISPLAY_CHAR

Show_Volt_Exit:
                pop     word ptr Cursor_X[bp]
                pop     word ptr ATTRIBUTE[bp]
                popa
                retf
E000_Show_Volt_Item      Endp

Show_f          proc    near
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                call    show_m
                ret
Show_f          endp

Show_m          proc    near
                dec     word ptr Cursor_X[bp]
                mov     al, '('
                F000_Call       DISPLAY_CHAR
                mov     al, '-'
                F000_Call       DISPLAY_CHAR
                mov     al, ')'
                F000_Call       DISPLAY_CHAR
                inc     word ptr Cursor_X[bp]
                ret
Show_m          endp

Show_b          proc    near
                dec     word ptr Cursor_X[bp]
                mov     al, ' '
                F000_Call       DISPLAY_CHAR
                mov     al, ' '
                F000_Call       DISPLAY_CHAR
                mov     al, ' '
                F000_Call       DISPLAY_CHAR
                inc     word ptr Cursor_X[bp]
                ret
Show_b          endp

ShowV0_2_bat    proc    near
                mov     cx, 16
                mul     cx
                call    Show_Digital
                ret
ShowV0_2_bat    endp

ShowV3  proc    near
                mov     cx, 2688
                mul     cx
                mov     cx,100
                div     cx
                call    Show_Digital
                ret
ShowV3  endp

ShowV4  proc    near
                mov     cx, 64
                mul     cx
                call    Show_Digital
                ret
ShowV4  endp

ShowV5  proc    near
                mov     cx,8228
                mul     cx
                mov     cx,100
                div     cx
                mov     cx,ax
                mov     ax,16969
                sub     ax,cx
                call    Show_Digital
                call    Show_f
                ret
ShowV5  endp

ShowV6  proc    near
                mov     cx,5028
                mul     cx
                mov     cx,100
                div     cx
                mov     cx,ax
                mov     ax,8777
                sub     ax,cx
                call    Show_Digital
                call    Show_f
                ret
ShowV6  endp

Get_Volt_Val    proc    near

                mov     dx, 295h
                mov     al, bl
                out     dx, al
                inc     dx
                in      al, dx
                xor     ah, ah

                ret
Get_Volt_Val    endp

;
; Input : AX
;
Show_Digital    proc    near
                push    ax
                inc     word ptr Cursor_X[bp]
                inc     word ptr Cursor_X[bp]
                inc     word ptr Cursor_X[bp]
                F000_Call       DISP_WORD_INT5
                mov     al, 'V'
                F000_Call       DISPLAY_CHAR
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                dec     word ptr Cursor_X[bp]
                pop     ax
                xor     dx,dx
                mov     cx,1000
                div     cx
                F000_Call       DISP_BYTE_INT2
                mov     al, '.'
                F000_Call       DISPLAY_CHAR
                ret
Show_Digital    endp

ENDIF	;COMPILE_FOR_SENSOR_MNU

IF	COMPILE_FOR_SENSOR_MNU EQ 4
	dw	offset First_Superio_SSR_Item, offset Last_Superio_SSR_Item
	dw	SEG Prg_Sensor_Chip, offset Prg_Sensor_Chip
ENDIF	;COMPILE_FOR_SENSOR_MNU

IF	COMPILE_FOR_SENSOR_MNU EQ 5
	extrn	First_Superio_SSR_Item:near
	extrn	Last_Superio_SSR_Item:near
	extrn	Prg_Sensor_Chip:near
ENDIF	;COMPILE_FOR_SENSOR_MNU

endif	;COMPILE_FOR_SENSOR_MNU 


