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

📄 smbus.inc

📁 super io 监控程序
💻 INC
📖 第 1 页 / 共 2 页
字号:
I2CDeviceAbsent:
	popa
	stc
	ret
;-------------------------------
EnterSlaveAddress:
	push	si
	push	bx
	push	cx
BackSlaveAddress:
        lea     si,AddressValue
	mov	cx,2
WkeySlaveAddress:
	push	si
	lea	si,SearchFlag
	mov	ah,ds:[si]
	pop	si
        cmp     ah,KeyPgDn
	jz	KeyForAnotherDevice
        cmp     ah,KeyPgUp
	jz	KeyForAnotherDevice
	call	KeySlaveAddress
KeyForAnotherDevice:
;;>>> K.W. Thu 03-15-2001 15:10:30  
        cmp     al,KeyEsc 
	jz	EnterBaseAddress   
;; K.W. Thu 03-15-2001 15:10:33 <<<
	cmp	ah,KeyF5   		;F5
        jz      ExitProgramF5
	cmp	ah,KeyF10  
        jz      ExitProgram
 	cmp	ah,KeyPgDn 
        jnz     CheckNextAvailableKey 
	push	ax
	call	FindDeviceDown
	pop	ax
        jc      CheckNextAvailableKey1
;;; KenWang [050702] >>>>>>
	push	si
        lea     si,KeyF10Search
	cmp	byte ptr ds:[si],KeyF10
	mov	byte ptr ds:[si],00h
	pop     si
        jz      ExitProgram
;;; KenWang [050702] <<<<<<
        mov     dx,SlavePosition
	call	SetCursor
	mov	al,bl
	call	DisplayHex
        jmp     short SlaveAddressToBuffer
CheckNextAvailableKey:
 	cmp	ah,KeyPgUp 
        jnz     CheckNextAvailableKey1
	push	ax
	call	FindDeviceUp  
	pop	ax
        jc      CheckNextAvailableKey1
;;; KenWang [050702] >>>>>>
	push	si
        lea     si,KeyF10Search
	cmp	byte ptr ds:[si],KeyF10
	mov	byte ptr ds:[si],00h
	pop     si
        jz      ExitProgram
;;; KenWang [050702] <<<<<<
        mov     dx,SlavePosition
	call	SetCursor
	mov	al,bl
	call	DisplayHex
        jmp     short SlaveAddressToBuffer
CheckNextAvailableKey1:
	mov	ds:[si],al
ExitEnterSlaveAddress:
	inc	si
        loop    WkeySlaveAddress
        lea     si,AddressValue
	mov	bh,ds:[si]
	mov	bl,ds:[si+1]
	call	CharToHex		; BL=slave address
SlaveAddressToBuffer:
        lea     si,SlaveAddress
	and	bl,0feh
	mov	ds:[si],bl
	or	sp,sp
ExitProgram:
        lea     di,SubFuncSelect
	mov	al,0ffh
	mov	ds:[di],al
ExitSMbusProgram:
	pop 	cx
	pop 	bx
	pop 	si
	ret
ExitProgramF5:
 	call	StoreScreenC
        call    MainMenuSelect
	call	RestoreScreenC
	cmp     sp,sp
        jmp     ExitSMbusProgram
;-------------------------------
EnterBaseAddress:
        mov     dx,SmbusPosition+03h
	mov	cx,4
	call	EmptyAddress
;;
        mov     dx,SmbusPosition+03h
	mov	cx,5
        call    EnterPortAddress
        jc      EnterSMBaseAddressFail
        mov     dx,SmbusPosition+03h
        call    CalaFixedCursorposn	;Ouput=AX
	mov	cx,4
        call    GetPortAddressFromScreen
        lea     si,SmbusAddress
	mov	word ptr ds:[si],ax
	xchg	ah,al
EnterSMBaseAddressFail:
        mov     dx,SmbusPosition
	call	SetCursor
        lea     si,SmbusAddress
	mov	ax,ds:[si]
	xchg	ah,al
	call	DisplayHex
	xchg	ah,al
	call	DisplayHex
        mov     dx,SlavePosition
	call	SetCursor
        jmp     BackSlaveAddress
;	ret
;-------------------------------
KeySlaveAddress:
	push	cx
WWait:
	call	WaitOneKey
	cmp	al,KeyEsc 
	jz	ExitWWait
	cmp	ah,KeyF5  
	jz	ExitWWait
	cmp	ah,KeyF10 
	jz	ExitWWait
 	cmp	ah,KeyPgDn 
 	jz	ExitWWait
 	cmp	ah,KeyPgUp 
 	jz	ExitWWait
        call    DisplayKeyinValue
 	jc	WWait
ExitWWait:
	pop	cx
	ret
;---------------------------------------
OpenSMbusController:
	pusha
	call	OpenSMBusNeeded
	popa
	ret
;---------------------------------------
OpenSMBusNeeded:
	mov	eax,80000000h
	and	al,00h			;Check Vendor
	mov	bh,2			;BH=0/1/2 byte/word/dword
        call    ReadPciReg      	;eax=Value
        lea     si,OpenSMBUSDevice
CheckOpenSMBUSLoop:
        mov     ebx,ds:[si] 
	cmp	ebx,0
	jz	SMBUSOpenNoNeed
	push	ebx
	and	ebx,0ffff0000h
	pop	ebx
	jz	CompareVendor
        jmp     short CompareGo
CompareVendor:
	and	eax,0000ffffh
CompareGo:
	cmp	eax,ebx      
	jz	SMBUSDeviceFound
	add	si,8
	jmp	CheckOpenSMBUSLoop
SMBUSDeviceFound :
	mov	ax,ds:[si+4]
	and	al,0
	or 	eax,80000000h
	mov	bh,2			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;eax=Value
	cmp     eax,0h    
        jz      SMBUSOpenNoNeed
	cmp     eax,0ffffffffh
        jz      SMBUSOpenNoNeed
;;; KenWang [040802] >>>>>>
;;; Read other pci device for this devcie ready ???
	mov	eax,80000000h
	and	al,00h			;Check Vendor
	mov	bh,1			;BH=0/1/2 byte/word/dword
        call    ReadPciReg      	;eax=Value
;;; KenWang [040802] <<<<<<
	mov	ax,ds:[si+4]
	or 	eax,80000000h
	mov	bh,0			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;eax=Value
	push	si
        lea     si,ICH2FunctionStatus
        mov     ds:[si],al
	pop	si
        lea     di,ChipsetVendorOffset
        mov     bx,ds:[si+4]
        mov     ds:[di],bx
	mov    	bl,ds:[si+6]
        and     al,bl
	mov    	bl,ds:[si+7]
        or      al,bl
	mov	cl,al
        mov     ax,ds:[si+4] 
	or 	eax,80000000h
	mov	bh,0			;BH=0/1/2 byte/word/dword
        call    WritePciReg
	clc
	ret
SMBUSOpenNoNeed:
	stc
	ret
;---------------------------------------
CloseICH2Smbus:
	pusha
        lea     si,ChipsetVendorOffset
        mov	ax,ds:[si]
	cmp	ax,0
        jz      SMBUSAlreadyClose
	or 	eax,80000000h
        lea     si,ICH2FunctionStatus
        mov     cl,ds:[si]
	mov	bh,0			;BH=0/1/2 byte/word/dword
        call    WritePciReg
SMBUSAlreadyClose:
	popa
	ret
;---------------------------------------
comment \
CloseIntelSMBus:
	mov	eax,8000f800h
	and	al,00h			;Check Vendor
	mov	bh,2			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;eax=Value
	and	eax,24008086h
	cmp	eax,24008086h
        jnz     CloseIntelSMBusExit
        lea     si,ICH2FunctionStatus
        mov     cl,ds:[si]
	mov	eax,8000f8f2h
	mov	bh,0			;BH=0/1/2 byte/word/dword
        call    WritePciReg
	clc
	ret
CloseIntelSMBusExit:
	stc
	ret
;---------------------------------------
CloseSISSMBus:
	mov	eax,80001000h
	and	al,00h			;Check Vendor
	mov	bh,2			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;eax=Value
	and	eax,00001039h
	cmp	eax,00001039h
	jnz	CloseSMbusSISExit
        lea     si,ICH2FunctionStatus
        mov     cl,ds:[si]
	mov	eax,80001077h
	mov	bh,0			;BH=0/1/2 byte/word/dword
        call    WritePciReg
	clc
	ret
CloseSMbusSISExit:
	stc
	ret
\
;---------------------------------------
GetSMBUSAddress:
	push	eax
	push	bx
	push	si
; Get SMBUS Address
	xor	bx,bx             
        lea     di,SmbusDeviceNo
LoopCheckSmbus:
	mov	eax,ds:[di+bx]
	cmp	eax,00000000h
        jz      smbus_absent
	push	bx
	and	al,00h			;Check Vendor
	mov	bh,1			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;ax=Value
	pop	bx
	push	bx
	mov	bx,ds:[di+bx+4]
	cmp	ax,bx			; Compare Vendor ID
	pop	bx
        jnz     LoopCheckSmbusE
;;; KenWang [050602] >>>>>>
	push	si
        lea     si,CurrentVendorID
	mov	ds:[si],ax
	pop	si
;;; KenWang [050602] <<<<<<
	mov	ax,ds:[di+bx+6]
	cmp	ax,0ffffh
	jz	DonotCareDeviceID
	push	bx
	mov	eax,ds:[di+bx]
	mov	al,02h
	mov	bh,1			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;ax=Value
	pop	bx
	push	bx
	mov	bx,ds:[di+bx+6]
	cmp	ax,bx			; Compare Device ID
	pop	bx
        jnz     LoopCheckSmbusE
DonotCareDeviceID:
;;<<<K.W. Tue 11-27-2001 12:01:35 
;;; KenWang [050602] >>>>>>
	push	si
	push	eax
	push	ebx
	shl	eax,16
        lea     si,CurrentVendorID
	mov	ebx,ds:[si]
	or	ebx,eax
	mov	ds:[si],ebx
	pop	ebx
	pop	eax
	pop	si
;;; KenWang [050602] <<<<<<
	push	si
	mov	ax,ds:[di+bx+4]
	lea	si,SMBUSVendorM
CheckNextMethod:
	cmp	ax,ds:[si]		;SIS
	jz      DecideMethod
	add	si,4
	jmp  	short CheckNextMethod
DecideMethod:
	mov	al,ds:[si+2]
        lea     si,I2CProgramMethod
	mov	ds:[si],al
	pop	si
;;>>>K.W. Tue 11-27-2001 12:01:33
	push	bx
	mov	eax,ds:[di+bx]
	mov	al,04h
	mov	bh,0			;BH=0/1/2 byte/word/dword
	mov	cl,01h
        call    WritePciReg		;ax=Value
	mov	eax,ds:[di+bx]
	mov	bh,1			;BH=0/1/2 byte/word/dword
        call    ReadPciReg		;ax=Value
	pop	bx
LoopCheckSmbusE:
	add	bx,8
	cmp	ax,0ffffh
        jz      LoopCheckSmbus
	cmp	ax,0000h
        jz      LoopCheckSmbus
	mov	dx,ax
	and	dl,0feh
        lea     si,SmbusAddress
	mov	ds:[si],dx
	pop	si
	pop	bx
	pop	eax
	clc
	ret
smbus_absent:
	pop	si
	pop	bx
	pop	eax
	stc
	ret
;---------------------------------------
GetSMBAddressFromScreen:
        mov     dx,SmbusPosition+3
        call    CalaFixedCursorposn	;Ouput=AX
	mov	cx,4
        call    GetPortAddressFromScreen
        lea     si,SmbusAddress
	mov	ds:[si],ax
        mov     dx,SlavePosition+1
        call    CalaFixedCursorposn	;Ouput=AX
	mov	cx,2
        call    GetPortAddressFromScreen
        lea     si,SlaveAddress
	and	al,0feh
	mov	ds:[si],al
	ret
;---------------------------------------
GetBlockSendCounts:
	mov	cx,128
        mov     dx,(ValueStartCol+ValueStartRow)+072Dh
LoopCountBlockBytes:
	push	cx
        call    CalaFixedCursorposn	;AX= offset B segment
        call    GetFixCursorValue
	pop	cx
	push	es
	mov	bx,ax
	mov	ax,0b800h
	mov	es,ax
	xor	si,si
	add	si,bx
	mov	al,es:[si+1]
	mov	ah,es:[si+3]
	pop	es
	cmp	al,Red+LightColor
	jz	GetBlockBytesOK
	cmp	ah,Red+LightColor
	jz      GetBlockBytesOK
	sub	dl,3
        cmp     dl,ValueStartCol
	jae	NextDifferentValue
        mov     dl,ValueStartCol+2dh
	dec	dh
NextDifferentValue:
        loop    LoopCountBlockBytes
	mov	al,0
	ret
GetBlockBytesOK:
	mov	ax,cx 
	ret
;---------------------------------------
DisplaySMBusInformation:
	ret
;---------------------------------------
DisplayFixedSMbusAddress:
        mov     dx,SmbusPosition
	call	SetCursor
        lea     si,SmbusAddress
	mov	ax,ds:[si]
	xchg	ah,al
	call	DisplayHex
	xchg	ah,al
	call	DisplayHex
        mov     dx,SlavePosition
	call	SetCursor
        lea     si,SlaveAddress
	mov	ax,ds:[si]
;	xchg	ah,al
;	call	DisplayHex
;	xchg	ah,al
	call	DisplayHex
	ret
;---------------------------------------
SMBUSAccessMethod:
;;Intel/VIA
	dw	read_i2c_data_byte
	dw	write_i2c_data_byte
	dw	read_i2c_data_block
	dw	write_i2c_data_block
;;SIS
        dw      SISread_i2c_data_byte
        dw      SISwrite_i2c_data_byte
        dw      sis_read_i2c_data_block
        dw      sis_write_i2c_data_block
;---------------------------------------
include	i2c.inc
include	sisi2c.inc

⌨️ 快捷键说明

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