📄 pci.inc
字号:
GetPCIDeviceInfo:
pusha
;;; KenWang [041602] >>>>>>
lea di,SubFuncSelect
mov al,ds:[di]
cmp al,70h
jnz ReGetPCIInfo
mov al,0ffh
mov ds:[di],al
jmp short PCIFoundDislplay
;;; KenWang [041602] <<<<<<
ReGetPCIInfo:
lea si,SearchFlag
mov al,ds:[si]
cmp al,KeyF3
jz PCIKeyF3
lea si,SubFuncSelect
mov al,ds:[si]
cmp al,0e0h
jz PCIFoundDislplay
call EnterPCIAddress
jnc PCIFoundDislplay
cmp ah,KeyPgDn
jz GetPCIInfoNext
cmp ah,KeyPgUp
jz GetPCIInfoPrev
jmp GetPCIInfoFuncRet
PCIFoundDislplay:
call DisplayFoundPCIDevToAddress
call DisplaySelectedFunctionData
jc GetPCIInfoFuncRet
lea si,SearchFlag
mov ah,ds:[si]
cmp ah,KeyF3
jz PCIFoundDislplay
cmp ah,KeyF8
jz PCIFoundDislplay
cmp ah,KeyF7
jnz ReGetPCIInfoNotF7
call F7ChangeAccessMethod
jmp PCIFoundDislplay
PCIKeyF3:
call DisplayFixedPCIAddress
jmp PCIFoundDislplay
ReGetPCIInfoNotF7:
cmp ah,KeyF6
jnz ReGetPCIInfoNotF6
call ListPCIDevice
jmp PCIFoundDislplay
ReGetPCIInfoNotF6:
cmp ah,KeyF10
jz ReGetPCIInfo
cmp ah,KeyPgDn
jz GetPCIInfoNext
cmp ah,KeyPgUp
jz GetPCIInfoPrev
GetPCIInfoFuncRet:
popa
ret
;;Find Next PCI Device
GetPCIInfoNext:
lea si,PCIBusNo
mov bl,ds:[si]
lea si,PCIDevFuncNo
mov al,ds:[si]
inc al
lea si,PCIDevFuncNoBuf
mov ds:[si],al
cmp al,0
jnz NextCurBus
inc bl
NextCurBus:
and bl,0fh
lea di,PCIBusNoBuf
mov ds:[di],bl
LoopNextFunc:
xor eax,eax
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
lea di,PCIBusNoBuf
mov ah,ds:[di]
shl eax,8
mov bh,1
call ReadPciReg
cmp ax,00000h
jz PCINextFunc
cmp ax,0ffffh
jz PCINextFunc
call CheckMultiFunction
jnc PCINextDevFound
PCINextFunc:
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
mov ah,al
and al,07h
cmp al,7
jz PCINextDev
inc ah
mov ds:[di],ah
jmp LoopNextFunc
PCINextDev:
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
inc al
mov ds:[di],al
cmp al,0
jz PCINextBus
jmp LoopNextFunc
PCINextBus:
lea di,PCIBusNoBuf
mov al,ds:[di]
inc al
and al,PCIMaxBusNo
mov ds:[di],al
jmp LoopNextFunc
ReNextBus:
mov al,0
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],al
jmp LoopNextFunc
;;Find Prev. PCI Device
GetPCIInfoPrev:
lea si,PCIBusNo
mov bl,ds:[si]
lea si,PCIDevFuncNo
mov al,ds:[si]
dec al
lea di,PCIDevFuncNoBuf
mov ds:[di],al
cmp al,0ffh
jnz PrevCurBus
dec bl
and bl,0fh
PrevCurBus:
lea di,PCIBusNoBuf
mov ds:[di],bl
LoopPrevFunc:
xor eax,eax
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
lea di,PCIBusNoBuf
mov ah,ds:[di]
shl eax,8
mov bh,1
call ReadPciReg
cmp ax,00000h
jz PCIPrevFunc
cmp ax,0ffffh
jz PCIPrevFunc
call CheckMultiFunction
jnc PCINextDevFound
PCIPrevFunc:
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
dec al
mov ds:[di],al
cmp al,0ffh
jz PCIPrevBus
jmp LoopPrevFunc
PCIPrevBus:
lea di,PCIBusNoBuf
mov al,ds:[di]
dec al
and al,PCIMaxBusNo
mov ds:[di],al
jmp LoopPrevFunc
;;Show Found PCI device
PCINextDevFound:
call PCIAddressBufToNo
call DisplayFoundPCIDevToAddress
jmp PCIFoundDislplay
;----------------------------;
PCIAddressBufToNo:
lea si,PCIBusNoBuf
mov al,ds:[si]
lea di,PCIBusNo
mov ds:[di],al
lea si,PCIDevFuncNoBuf
mov al,ds:[si]
lea di,PCIDevFuncNo
mov ds:[di],al
ret
;----------------------------;
DisplayFoundPCIDevToAddress:
mov dx,PCIBusNoPosn-1
call SetCursor
lea di,PCIBusNo
mov al,ds:[di]
call DisplayHex
mov dx,PCIDevNoPosn-1
call SetCursor
lea di,PCIDevFuncNo
mov al,ds:[di]
shr al,3
call DisplayHex
mov dx,PCIFuncNoPosn-1
call SetCursor
lea di,PCIDevFuncNo
mov al,ds:[di]
and al,07h
call DisplayHex
ret
;----------------------------;
EnterPCIAddress:
;;Empty PCI address
mov dx,PCIBusNoPosn
mov cx,2
call EmptyAddress
mov dx,PCIDevNoPosn
mov cx,2
call EmptyAddress
mov dx,PCIFuncNoPosn
mov cx,2
call EmptyAddress
;;Enter Port
mov dx,PCIBusNoPosn
mov cx,3
call EnterPortAddress
jc EnterPCIAddressFail
mov dx,PCIDevNoPosn
mov cx,3
call EnterPortAddress
jc EnterPCIAddressFail
mov dx,PCIFuncNoPosn
mov cx,3
call EnterPortAddress
jc EnterPCIAddressFail
call GetPciAddressFromScreen
clc
ret
EnterPCIAddressFail:
cmp ah,KeyF10 ; F10
jz PCIF10Exit
cmp ah,KeyF6 ; F6
jz PCIListKey
cmp ah,KeyF7 ; F7
jz PCICHGAccsssMethod
NoPCIListKey:
stc
ret
PCIF10Exit:
lea di,SubFuncSelect
mov al,0ffh
mov ds:[di],al
stc
ret
PCICHGAccsssMethod:
call F7ChangeAccessMethod
jmp EnterPCIAddress
PCIListKey:
call ListPCIDevice
jc EnterPCIAddress
clc
ret
;---------------------------;
ListPCIDevice:
call StoreScreenB
;Hide Cursor
mov cx,200eh
call SetCursorType
mov cx,PCIListHeadPosn
mov dx,cx
add dx,030dh
mov bh,PCIListWindowColor
call SetWindowsAttribute
mov dx,PCIListHeadPosn
lea si,PCIListULine
mov cx,3
LoopPCIListWindows:
push cx
call SetCursor
push si
call DisplayString
pop si
add si,15
inc dh
pop cx
loop LoopPCIListWindows
mov dx,PCIListHeadPosn+0200h
call SetCursor
call SearchPCIDevice
call PCIListSelectMenu
pushf
call ReStoreScreenB
popf
; jc OkPCIListExit
;; call DisplayFoundPCIDevToAddress
; clc
;OkPCIListExit:
ret
;-------------------------------;
PCIListSelectMenu:
mov dx,PCIListHeadPosn+0301h
LoopPCIListSelectMenu:
mov cl,PCIListTextColor
mov ch,12
call ChangeBarAttribute
push dx
add dl,14
mov cl,Red+LightColor
mov ch,50
call ChangeBarAttribute
pop dx
PCIListWaitKey:
;;>>>K.W. Thu 01-31-2002 11:42:54
push dx
mov dx,PCIListHeadPosn+0301h
call GetSelectBusDevFuncToBuffer
pop dx
;;<<<K.W. Thu 01-31-2002 11:42:56
call WaitOneKey
cmp al,KeyEsc
jz ExitPCIListSelectMenu
cmp ah,KeyLeft
jz ExitPCIListSelectMenu
cmp ah,KeyUp
jz PCIPrevListDev
cmp ah,KeyDown
jz PCINextListDev
cmp al,KeyEnter
jz PCINextListSelected
jmp short PCIListWaitKey
PCIPrevListDev:
mov cl,PCIListWindowColor
mov ch,12
call ChangeBarAttribute
push dx
add dl,14
mov cl,Cyan+LightColor
mov ch,50
call ChangeBarAttribute
pop dx
cmp dx,PCIListHeadPosn+0301h
jz PCIUpToBottem
dec dh
jmp LoopPCIListSelectMenu
PCIUpToBottem:
;;>>>K.W. Thu 01-31-2002 13:02:28
push dx
call CheckPrevDevFuncPresent
pop dx
jc NoPrevPCIDevice
push dx
mov dx,PCIListHeadPosn+0200h
call SetCursor
call LoopSearchPCIDevice
pop dx
jmp LoopPCIListSelectMenu
NoPrevPCIDevice:
mov dx,MaxPCIDeviceWindown
lea si,LasPCIListDev
mov ax,ds:[si]
cmp ax,dx
jae MaxLastPCIPrev
mov dx,ax
MaxLastPCIPrev:
;;<<<K.W. Thu 01-31-2002 13:02:35
jmp LoopPCIListSelectMenu
;;;;
PCINextListDev:
mov cl,PCIListWindowColor
mov ch,12
call ChangeBarAttribute
push dx
add dl,14
mov cl,Cyan+LightColor
mov ch,50
call ChangeBarAttribute
pop dx
mov bx,MaxPCIDeviceWindown
lea si,LasPCIListDev
mov ax,ds:[si]
cmp ax,MaxPCIDeviceWindown
jae MaxPCINext
mov bx,ax
MaxPCINext:
cmp dx,bx
jz PCIDnBottom
inc dh
jmp LoopPCIListSelectMenu
PCIDnBottom:
;;>>>K.W. Thu 01-31-2002 11:52:37
push dx
call CheckNextDevFuncPresent
pop dx
jc NotNextPCIDevices
push dx
mov dx,PCIListHeadPosn+0200h
call SetCursor
call LoopSearchPCIDevice
pop dx
jmp LoopPCIListSelectMenu
NotNextPCIDevices:
;;<<<K.W. Thu 01-31-2002 11:52:35
mov dx,PCIListHeadPosn+0301h
jmp LoopPCIListSelectMenu
PCINextListSelected:
call GetSelectBusDevFuncToBuffer
lea si,PCIBusNoBuf
mov al,ds:[si]
lea si,PCIBusNo
mov ds:[si],al
lea si,PCIDevFuncNoBuf
mov al,ds:[si]
lea si,PCIDevFuncNo
mov ds:[si],al
clc
ret
ExitPCIListSelectMenu:
lea si,PCIBusNo
mov al,ds:[si]
lea si,PCIBusNoBuf
mov ds:[si],al
lea si,PCIDevFuncNo
mov al,ds:[si]
lea si,PCIDevFuncNoBuf
mov ds:[si],al
stc
ret
;;>>>K.W. Thu 01-31-2002 13:01:49 ---------------------;
CheckPrevDevFuncPresent:
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
lea di,PCIBusNoBuf
mov ah,ds:[di]
push ax
call GetSelectBusDevFuncToBuffer
xor eax,eax
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
lea di,PCIBusNoBuf
mov ah,ds:[di]
shl eax,8
cmp eax,0
jz PCIListPrevFuncNotPresent
CheckBackwardPCI:
sub eax,00000100h
ror eax,8
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],ah
rol eax,8
push eax
mov bh,1
call ReadPciReg
cmp ax,00000h
jz PCIListBackwardNext
cmp ax,0ffffh
jz PCIListBackwardNext
call CheckMultiFunction
pop eax
jnc PCIBackwardFound
push eax
PCIListBackwardNext:
pop eax
cmp eax,0
jz PCIListPrevFuncNotPresent
jmp short CheckBackwardPCI
PCIBackwardFound:
shr eax,8
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],ah
pop ax
clc
jmp CheckPrevDevFuncPresentEnd
PCIListPrevFuncNotPresent:
pop ax
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],ah
stc
CheckPrevDevFuncPresentEnd:
ret
;;<<<K.W. Thu 01-31-2002 13:01:51 ---------------------;
;;>>>K.W. Thu 01-31-2002 11:52:58 ---------------------;
CheckNextDevFuncPresent:
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
lea di,PCIBusNoBuf
mov ah,ds:[di]
push ax
call GetSelectBusDevFuncToBuffer
xor eax,eax
lea di,PCIDevFuncNoBuf
mov al,ds:[di]
inc al
lea di,PCIBusNoBuf
mov ah,ds:[di]
shl eax,8
CheckForwardPCI:
ror eax,8
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],ah
rol eax,8
push eax
mov bh,1
call ReadPciReg
cmp ax,00000h
jz PCIListForwaordNext
cmp ax,0ffffh
jz PCIListForwaordNext
call CheckMultiFunction
pop eax
jnc PCIForwardFound
push eax
PCIListForwaordNext:
pop eax
cmp eax,000fff00h
jae PCIListNextFuncNotPresent
add eax,00000100h
jmp short CheckForwardPCI
PCIForwardFound:
pop ax
add ax,01h
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],ah
clc
jmp CheckNextDevFuncPresentEnd
PCIListNextFuncNotPresent:
pop ax
lea di,PCIDevFuncNoBuf
mov ds:[di],al
lea di,PCIBusNoBuf
mov ds:[di],ah
stc
CheckNextDevFuncPresentEnd:
ret
;;<<<K.W. Thu 01-31-2002 11:53:02 ---------------------;
GetSelectBusDevFuncToBuffer:
mov dl,HeaderPosCol+27h-17h
call CalaFixedCursorposn ; Ouput=ax
call GetFixCursorValue ; BL=value
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -