📄 isaio.inc
字号:
cmp al,2 ; WinbondLPC only
jnz NotWinbondLPCDeviceExit
;Select DEV:0B H/W Monitor
lea si,CtrlFlag
mov al,ds:[si]
cmp al,08h
jz JustDisplayHWM
mov bl,07h ;Reg
call ISAIORead
push ax ; Store Device No.
call GetWinLPCHWMAddress
jc NotWinbondLPCDevice
call CheckWinbondLPCHWMPresent
jc NotWinbondLPCDevice
GoDIsplayHWM:
call DisplayWinHWMInfo
NotWinbondLPCDevice:
pop ax ;Restore Device No.
mov ch,07h ;Reg
mov bl,al
call ISAIOWrite
ret
NotWinbondLPCDeviceExit:
call ClearMoreInfoArea
ret
JustDisplayHWM:
push ax
jmp short GoDIsplayHWM
;-------------
GetWinLPCHWMAddress:
;;; [KenWang] 04/06/2002 --->>>>>>
lea si,HWMIndexPort
mov ax,ds:[si]
cmp ax,0
jnz FindWinboardHWM
;;; [KenWang] 04/06/2002 <<<<<<---
mov ch,07h ;Reg
mov bl,0bh
call ISAIOWrite
mov bl,30h ;Reg
call ISAIORead
test al,01h
jz NotWinbondLPCHWM
mov bl,60h ;Reg
call ISAIORead
mov bh,al
mov bl,61h ;Reg
call ISAIORead
mov ah,bh
add ax,05h
lea si,HWMIndexPort
mov ds:[si],ax
inc ax
mov ds:[si+2],ax
FindWinboardHWM:
clc
ret
NotWinbondLPCHWM:
stc
ret
;-------------
CheckWinbondLPCHWMPresent:
;;; [KenWang] 04/06/2002 --->>>>>>
mov ah,4eh
call ReadWinHWM
push ax
;;; [KenWang] 04/06/2002 <<<<<<---
mov ah,48h
call ReadWinHWM
cmp al,2dh
pop ax
jnz WinHWMAbsent
mov ah,4eh
call WriteWinHWM
clc
ret
WinHWMAbsent:
stc
ret
;-------------
;Input : ah=reg
ReadWinHWM:
push dx
lea si,HWMIndexPort
mov dx,ds:[si] ;295
mov al,ah
out dx,al
inc dx
in al,dx
pop dx
ret
;-------------
;Input : ah=reg, al=data
WriteWinHWM:
push dx
lea si,HWMIndexPort
mov dx,ds:[si] ;295
xchg ah,al
out dx,al
xchg ah,al
inc dx
out dx,al
pop dx
ret
;-------------
DisplayWinHWMInfo:
mov cx,HWMonitorTiltePosn
mov dx,cx
add dl,17
mov bh,(Cyan shl 4)+Red
call ChangeWindowsAttribute
mov dx,HWMonitorTiltePosn
call SetCursor
lea si,HWMonitorTitle
call DisplayString
mov cx,HWMonitorTiltePosn+0100h
mov dx,cx
add dx,1011h
mov bh,(Blue shl 4)+White
call ChangeWindowsAttribute
mov dx,HWMonitorTiltePosn+0100h
lea si,HWMSensor1
mov cx,17
LoopDisplayWinHWMList:
push cx
call SetCursor
push si
call DisplayString
call DisplayHWMinfoValue
pop si
inc dh
add si,9
pop cx
loop LoopDisplayWinHWMList
ret
;-------------------------------
; Input : DH
DisplayHWMinfoValue:
pusha
mov ah,4eh
call ReadWinHWM ; al=data
mov bx,ax
push bx
mov bx,HWMonitorTiltePosn+0100h
sub dh,bh
movzx bx,dh
shl bx,1
lea si,cs:HWMFunctionTBL
call word ptr cs:[si+bx]
pop bx
push ax
mov al,bl
mov ah,4eh
call WriteWinHWM ; Change Bank
pop ax
popa
ret
;--------------------
HWMFunctionTBL label byte
dw WHWMSeneor1
dw WHWMSeneor2
dw WHWMSeneor3
dw WHWMFan1
dw WHWMFan2
dw WHWMFan3
dw WHWMVID
dw WHWMVcore
dw WHWMVtt
dw WHWMVio
dw WHWMP5V
dw WHWMP12V
dw WHWMM12V
dw WHWMM5V
dw WHWMBattery
dw WHWM5VSB
dw WHWMChassis
;===============================================
ISADeviceSelectTBL label byte
dw CMOSIndex
dw UCMOSIndex
dw WinbondLPCIndex ;WinbondLPC
dw Winbond977Index ;Winbond977
dw SmscLPCIndex ;SmscLPC
dw Gm803cIndex ;GM803c
dw Gm803cIndex ;Gm803b
dw IT8712Index ;IT8712
;------------
ISADeviceUnlock label byte
dw GenericUnLock
dw WinbondUnLock ;WinbondLPC
dw WinbondUnLock ;Winbond977
dw SmscUnLock ;SmscLPC
dw Gm803cUnLock ;GM803c
dw Gm803cUnLock ;Gm803b
dw IT8712UnLock ;IT8712
;------------
ISADevicelock label byte
dw GenericLock
dw WinbondLock ;WinbondLPC
dw WinbondLock ;Winbond977
dw WinbondLock ;SmscLPC
dw Gm803cLock ;GM803c
dw Gm803bLock ;Gm803b
dw IT8712Lock ;IT8712
;-------------------------------
CMOSIndex:
mov ax,070h
CUCMOSIndexData:
lea si,ISAIndexPort
mov ds:[si],ax
lea si,ISADataPort
inc ax
mov ds:[si],ax
ret
;-------------------------------
UCMOSIndex:
mov ax,072h
jmp short CUCMOSIndexData
;-------------------------------
IT8712Index:
mov dx,2eh
call ITETryIndexPort
jmp short CUCMOSIndexData
;-------------------------------
WinbondLPCIndex:
mov dx,2eh
call WinbondTryIndexPort
jmp short CUCMOSIndexData
;-------------------------------
Winbond977Index:
mov dx,3f0h
call WinbondTryIndexPort
jmp short CUCMOSIndexData
;-------------------------------
;Output:ax=Index port
SmscLPCIndex:
;;; [KenWang] 04082002 >>>>>>
lea si,ISAIndexPort
mov ax,ds:[si]
cmp ax,0
jnz SmscUnlockExit
;;; [KenWang] 04082002 <<<<<<
mov al,055h
out dx,al
mov cx,0ffh
xor ah,ah
SLoopReadNonZero:
mov al,ah
out dx,al
inc dx
in al,dx
cmp al,00h
jz NextSmscByte
cmp al,0ffh
jnz SmscUnlockValueOK
NextSmscByte:
inc ah
dec dx
loop SLoopReadNonZero
mov dx,4eh
SmscUnlockExit:
mov ax,dx
jmp short CUCMOSIndexData
SmscUnlockValueOK:
mov dx,2eh
jmp short SmscUnlockExit
;-------------------------------
Gm803cIndex:
mov dx,398h
jmp short SmscUnlockExit
;-------------------------------
;Input: dx=Index(2eh/3f0h)
;Output:ax=Index Port
ITETryIndexPort:
;;; [KenWang] 04082002 >>>>>>
lea si,ISAIndexPort
mov ax,ds:[si]
cmp ax,0
jnz ITUnlockExit
;;; [KenWang] 04082002 <<<<<<
mov al,087h
out dx,al
jmp $+2
jmp $+2
mov al,01h
out dx,al
jmp $+2
jmp $+2
mov al,55h
out dx,al
jmp $+2
jmp $+2
mov cx,0ffh
xor ah,ah
ITLoopReadNonZero:
mov al,ah
out dx,al
inc dx
in al,dx
cmp al,00h
jz NetITByte
cmp al,0ffh
jnz ITUnlockValueOK
NetITByte:
inc ah
dec dx
loop ITLoopReadNonZero
test dh,03h
jz it8712_1
mov dx,0370h
jmp short ITUnlockExit
it8712_1:
mov dx,4eh
ITUnlockExit:
mov ax,dx
ret
ITUnlockValueOK:
test dh,03h
jz it8712_2
mov dx,3f0h
jmp short ITUnlockExit
IT8712_2:
mov dx,2eh
jmp short ITUnlockExit
ret
;-------------------------------
;Input: dx=Index(2eh/3f0h)
;Output:ax=Index Port
WinbondTryIndexPort:
;;; [KenWang] 04082002 >>>>>>
lea si,ISAIndexPort
mov ax,ds:[si]
cmp ax,0
jnz WinbondUnlockExit
;;; [KenWang] 04082002 <<<<<<
mov al,087h
out dx,al
out dx,al
mov cx,0ffh
xor ah,ah
LoopReadNonZero:
mov al,ah
out dx,al
inc dx
in al,dx
cmp al,00h
jz NextWinbondByte
cmp al,0ffh
jnz UnlockValueOK
NextWinbondByte:
inc ah
dec dx
loop LoopReadNonZero
test dh,03h
jz w627_1
mov dx,0370h
jmp short WinbondUnlockExit
w627_1:
mov dx,4eh
WinbondUnlockExit:
mov ax,dx
ret
UnlockValueOK:
test dh,03h
jz w627_2
mov dx,3f0h
jmp short WinbondUnlockExit
w627_2:
mov dx,2eh
jmp short WinbondUnlockExit
;-------------------------------
GenericLock:
ret
;-------------------------------
IT8712Lock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,002h
out dx,al
ret
;-------------------------------
WinbondLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,0aah
out dx,al
ret
;-------------------------------
SmscUnLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,055h
out dx,al
ret
;-------------------------------
Gm803cUnLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,033h
out dx,al
ret
;-------------------------------
Gm803cLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,055h
out dx,al
ret
;-------------------------------
Gm803bLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,0cch
out dx,al
ret
;-------------------------------
GenericUnlock:
lea si,UnlockPort
mov dx,ds:[si]
lea si,UnlockValue0
UnlockISAIO:
push cx
mov al,ds:[si]
cmp al,0
jz UnlockOk
out dx,al
jmp $+2
jmp $+2
inc si
inc si
pop cx
jmp short UnlockISAIO
ret
UnlockOk:
pop cx
ret
;-------------------------------
IT8712UnLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,087h
out dx,al
jmp $+2
jmp $+2
mov al,01h
out dx,al
jmp $+2
jmp $+2
mov al,55h
cmp dx,2eh
jz It87122E
mov al,0aah
It87122E:
out dx,al
jmp $+2
jmp $+2
ret
;-------------------------------
WinbondUnLock:
lea si,ISAIndexPort
mov dx,ds:[si]
mov al,87h
out dx,al
jmp $+2
jmp $+2
out dx,al
ret
;=========================================
GetISAAddressFromScreen:
mov dx,ISAIOIndexPortPosn
call CalaFixedCursorposn ;Ouput=AX
mov cx,4
call GetPortAddressFromScreen
lea si,ISAIndexPort
mov word ptr ds:[si],ax
mov dx,ISAIODataPortPosn
call CalaFixedCursorposn ;Ouput=AX
mov cx,4
call GetPortAddressFromScreen
lea si,ISADataPort
mov word ptr ds:[si],ax
ret
;=========================================
ChangeWinbondLPCAddress:
call GetWinLPCHWMAddress
jc NotWinLPCDevice
call CheckWinbondLPCHWMPresent
jc NotWinLPCDevice
lea di,ISAIndexPort
lea si,HWMIndexPort
mov ax,ds:[si]
mov word ptr ds:[di],ax
mov ax,ds:[si+2]
mov word ptr ds:[di+2],ax
call DisplayFixedISAPort
clc
ret
NotWinLPCDevice:
stc
ret
;-----------------------------------------------
include winlpchw.inc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -