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

📄 smbus.inc

📁 super io 监控程序
💻 INC
📖 第 1 页 / 共 2 页
字号:
GetSMBusInfo:
        call    OpenSMbusController
        call    GetSMBUSAddress			; dx=smbus address
	jc      ErrorChipset
;;; KenWang [041602] >>>>>>
        lea     di,SubFuncSelect
	mov	al,ds:[di]
	cmp	al,70h
        jnz     AnotherAddress
	mov	al,0ffh
	mov     ds:[di],al
	call	DisplayFixedSMbusAddress
        jmp     short ReGetSMBUS
;;; KenWang [041602] <<<<<<
AnotherAddress:
	mov	cx,000eh
        call    SetCursorType
        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
	call	EnterSlaveAddress
        jz      smbus_exit
ReGetSMBUS:
	call	DisplayI2CData
        jc      smbus_exit
        jmp     AnotherAddress
ErrorChipset:
        mov     dx,MainMenuRow+MainMenuCol+0101h+((FunctionNo+1) shl 8)
	mov	dl,14h
        call    SetCursor    
        lea     si,ChipErrMsg
        call    DisplayString
	call	WaitOneKey
	mov	al,0f3h
        lea     di,SubFuncSelect
	mov	ds:[di],al
	stc
	ret
smbus_exit:
;;Clear Screen
	call	ClearScreen
	mov	cx,0d0eh
        call    SetCursorType
	call	CloseICH2Smbus
	clc
	ret
SmbusGenernalExit:
        lea     di,SubFuncSelect
	mov	al,0ffh
	mov	ds:[di],al
	call	CloseICH2Smbus
	stc
	ret
;========================================================
DisplayI2CData:
	pusha	
        lea     si,ReadDataRow
	mov	al,ds:[si]
	call	SetSMbusHeadAttrib
	popa
	call	DisplayI2CData1
CheckKeyin:
        call    CheckKeybuffer
        jnc     GetKeyinOK  
        lea     si,SlaveAddress
	mov 	al,ds:[si]
;	cmp	al,0a0h
;       jae     CheckKeyin    
        jmp	short DisplayI2CData
GetKeyinOK:
;;; KenWang [050802] >>>>>>
	push	ax
;	call	WaitOneKey
	pop	ax
;;; KenWang [050802] <<<<<<
	push	si
	lea	si,SearchFlag
	mov	ds:[si],ah
	pop	si
	cmp	ah,KeyF10   	             
        jz      ReturnMainMenu
	cmp	ah,KeyF2    	             
	jz 	SMBKeyF2_1
	cmp	ah,KeyF5    	             
	jz 	SMBKeyF5_1
	cmp	ah,KeyF4             
        jz      EditI2CAgain
	cmp	ah,KeyUp             
        jz      EditI2CAgain
	cmp	ah,KeyDown           
        jz      EditI2CAgain
	cmp	ah,KeyPgDn           
        jz      ReturnMainMenu
	cmp	ah,KeyPgUp           
        jz      ReturnMainMenu
        jmp     CheckKeyin
EditI2CAgain:
	call	EditScreen
	cmp	al,KeyEnter
        jnz     ReturnMainMenuc
	call    I2cWriteData
	call	DisplayI2CData1
;        jmp     short EditI2CAgain
        jmp     short DisplayI2CData
ReturnMainMenuc:
        lea     di,SubFuncSelect
	mov	al,ds:[di]
	cmp	al,0ffh
        jz      ReturnMainMenu
	cmp	al,0efh
        jz      ReturnMainMenu
	stc
	ret
ReturnMainMenu:
	clc
	ret
SMBKeyF5_1:
 	call	StoreScreenC
        call    MainMenuSelect
 	call	ReStoreScreenC
        lea     di,SubFuncSelect
	mov	al,ds:[di]
	cmp	al,0efh
        jz      CheckKeyin
	stc
	ret
SMBKeyF2_1:
	call	InputFileName
        jmp     CheckKeyin
;-------------------------------
SetSMbusHeadAttrib:
	cmp	al,08h
	jz	SetHalfData
        mov     cx,HeaderPosition+0a00h
	mov	dx,cx
	add	dh,7
	add	dl,02
        mov     bh,(Blue shl 4)+LightColor+Red
        call    ChangeWindowsAttribute
        call    ShowKeyDefineString
	ret
SetHalfData:
        mov     cx,HeaderPosition+0a00h
	mov	dx,cx
	add	dh,7
	add	dl,50
	mov	bh,07h
        call    SetWindowsAttribute
	ret
;-------------------------------
DisplayI2CData1:
	call	SetCommandLineBlank
	mov	cx,200eh
        call    SetCursorType
        lea     si,SlaveAddress
	mov	ah,ds:[si]
	and	ah,0feh
	cmp	ah,0d2h
        jnz     LoopDisplaySmbusbyteData1
        lea     si,BlockReadFlag
	mov	al,ds:[si]
	cmp	al,1
        jz      BlockReadConfime
	cmp	al,2
        jz      LoopDisplaySmbusbyteData1
        mov     dx,HeaderPosition+0510h
	call	SetCursor
        mov     bh,Red+LightColor+FlashChar
        mov     cx,HeaderPosition+040fh
	mov	dx,cx
	add	dx,0217h
        call    SetWindowsAttribute
        lea     si,BlockReadWarn
	call	DisplayString
WaitconfirmKey:
	call	WaitOneKey
	cmp	al,'N'
        jz      ByteReadConfime
	cmp	al,'n'
        jz      ByteReadConfime
	cmp	al,'Y'
        jz      BlockReadConfime
	cmp	al,'y'
        jz      BlockReadConfime
	jmp	short WaitconfirmKey   
ByteReadConfime:
        lea     si,BlockReadFlag
	mov	al,02h
	mov	ds:[si],al
        jmp     short LoopDisplaySmbusbyteData1
BlockReadConfime:
	call	I2cBlockRW
        lea     si,BlockReadFlag
	mov	al,01h
	mov	ds:[si],al
        jmp     short CheckKeyin1
LoopDisplaySmbusbyteData1:
        mov     dx,(ValueStartCol+ValueStartRow)
	dec	dh
	call	SetCursor
	xor     al,al
        lea     si,ReadDataRow
        mov     cl,ds:[si]      
        movzx   cx,cl           
ReadDataLoop11:
	push	cx
        lea     si,crlf
	call    DisplayString
	push	cx
	call	GetCursor
	pop	cx
        mov     dl,ValueStartCol
	call	SetCursor
        lea     si,ReadDataRow
        mov     ax,ds:[si]      
	sub	ax,cx
	mov	cx,16
	mul	cx
	call	ReadData16
	pop	cx
        loop    ReadDataLoop11
CheckKeyin1:
	ret
;-------------------------------
;Input: AL=start reg.
ReadData16:
	mov	cx,16 
ReadDataLoop:
	push	ax
	push	cx
        lea     si,SlaveAddress
	mov	ah,ds:[si]

	push	bx
	lea	si,I2CProgramMethod
	mov	bx,ds:[si]
	shl	bx,3
        lea     si,cs:SMBUSAccessMethod
	call	word ptr cs:[si+bx]		;Byte read
	pop	bx

	mov     al,cl
	call	DisplayDataAttribute
	mov	al,' '
	call 	DisplayChar
	pop	cx
	pop	ax
	inc	al
	loop	ReadDataLoop
	ret
;-------------------------------
I2cBlockRW:
        mov     dx,(ValueStartCol+ValueStartRow)
	mov	ax,dx
	call	SetCursor
	push	bx
	lea	si,I2CProgramMethod
	mov	bx,ds:[si]
	shl	bx,3
        lea     si,cs:SMBUSAccessMethod
	call	word ptr cs:[si+bx+4]		;Block read
	pop	bx
	ret
;-------------------------------
I2cWriteData:
	pusha
	lea	si,SlaveAddress
	mov	al,ds:[si]
	cmp	al,0d2h
	jz      BolckWriteSupport
ByteAccressProc:
	call	write_i2c_data_byte_m
        jmp     ExitI2cWriteData
BolckWriteSupport:
        lea     si,BlockReadFlag
	mov	al,ds:[si]
	cmp	al,02h
        jz      ByteAccressProc
	push	bx
	lea	si,I2CProgramMethod
	mov	bx,ds:[si]
	shl	bx,3
        lea     si,cs:SMBUSAccessMethod
	call	word ptr cs:[si+bx+6]		;Block write
	pop	bx
ExitI2cWriteData:
	popa
	ret
;-------------------------------
write_i2c_data_byte_m:
        mov     dx,(ValueStartCol+ValueStartRow)
        lea     si,ReadDataRow
        mov     cl,ds:[si]      
        movzx   cx,cl           
WriteI2cByteLoop1:
	push	cx
	mov	cx,16 
WriteI2cByteLoop2:
	push	cx
	push	dx
        call    CalaFixedCursorposn		; Output:AX
	call	CheckCursorArrtibuteData     
	jnz	SkipWriteI2cByte
	mov	ax,dx
        sub     ax,(ValueStartCol+ValueStartRow)
	mov	bh,ah
	shl	bh,4
	xor	ah,ah
	mov	cl,3
	div	cl
	add	al,bh
	mov	cl,bl
        lea     si,SlaveAddress
	mov 	ah,ds:[si]
	push	bx
	lea	si,I2CProgramMethod
	mov	bx,ds:[si]
	shl	bx,3
        lea     si,cs:SMBUSAccessMethod
	call	word ptr cs:[si+bx+2]		;Byte write
	pop	bx
SkipWriteI2cByte:
	pop	dx
	add	dl,3
	pop	cx
	loop	WriteI2cByteLoop2
        mov     dl,ValueStartCol
	inc	dh
	pop	cx
	loop	WriteI2cByteLoop1
	ret
;-------------------------------
FindDeviceUp:
	push	di
        lea     di,SlaveAddress
	mov 	ah,ds:[di]
	sub	ah,2
FindUpDeviceAgain:
	and	ah,0feh
	cmp	ah,0d2h
	jz	SkipClockGenU
        call    CheckI2CDevicePresent
	jnc     UpDevicePresent
;;; KenWang [050702] >>>>>>
	push	si
        lea     si,KeyF10Search
	cmp	byte ptr ds:[si],KeyF10
	pop     si
        jnz     SkipClockGenU
	clc
        jmp     short UpDevicePresent
;;; KenWang [050702] <<<<<<
SkipClockGenU:
	dec	ah
	dec	ah
        jmp     short FindUpDeviceAgain
UpDevicePresent:
	mov	bl,ah
	pop	di
	ret
;-------------------------------
FindDeviceDown:
	push	di
        lea     di,SlaveAddress
	mov 	ah,ds:[di]
	add	ah,2
FindDownDeviceAgain:
	and	ah,0feh
	cmp	ah,0d2h
	jz	SkipClockGen
        call    CheckI2CDevicePresent
	jnc	DownDevicePresent
;;; KenWang [050702] >>>>>>
 	push	si
        lea     si,KeyF10Search
	cmp	byte ptr ds:[si],KeyF10
	pop     si
        jnz     SkipClockGen      
	clc
        jmp     short DownDevicePresent
;;; KenWang [050702] <<<<<<
SkipClockGen:
	inc	ah
	inc	ah
        jmp     short FindDownDeviceAgain
DownDevicePresent:
	mov	bl,ah
	pop	di
	ret
;-------------------------------
;Input : AH=Slave address
CheckI2CDevicePresent:
	pusha
 	push	ax
        mov     dx,SlavePosition
	call	SetCursor
	mov	al,ah
	call	DisplayHex
InputKeyboardBuffer1:
        call    CheckKeybuffer
        jc      BufferEmpty1
	push	ax
;	call	WaitOneKey
	pop	ax
	cmp	ah,KeyF10  
        jz      ExitLoopCheckDevice
        jmp     InputKeyboardBuffer1 
ExitLoopCheckDevice:
BufferEmpty:
	cmp	ah,KeyF10  
 	pop	ax
        jz      I2CDeviceAbsent1
	push	ax

BufferEmpty1:
 	pop	ax
	xor	al,al
CheckI2CDevLoop:
	push	ax
        call    CheckKeybuffer
        jc      I2CDeviceCont
	cmp	ah,KeyF10  
;;; KenWang [050802] >>>>>>
	push	ax
	pushf
;        call	WaitOneKey
	popf
	pop	ax
;;; KenWang [050802] <<<<<<
        jnz     I2CDeviceCont
	pop	ax
        jmp     short I2CDeviceAbsent1
I2CDeviceCont:
	pop	ax
	push	ax
	push	bx
	lea	si,I2CProgramMethod
	mov	bx,ds:[si]
	shl	bx,3
        lea     si,cs:SMBUSAccessMethod
	call	word ptr cs:[si+bx]		;Byte read
	pop	bx
	pop	ax
        jnz     I2CDeviceAbsent
	cmp	cl,0ffh
        jnz     CheckI2CDevDone
        cmp     al,07fh
        ja      I2CDeviceAbsent
	inc	al
        jmp     CheckI2CDevLoop
CheckI2CDevDone:
	popa
	clc
	ret
I2CDeviceAbsent1:
	push	si
        lea     si,KeyF10Search
	mov	ds:[si],ah
	pop	si

⌨️ 快捷键说明

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