?? isd1420.asm
字號:
;FUNCTION CODE
PCI_FUNCTION_ID = 0B1H
PCI_BIOS_PRESENT = 01H
FIND_PCI_DEVICE = 02H
READ_CONFIG_DWORD = 0AH
BADR2 = 18H ;5933 18H
DEVICE_ID = 5933H ;設備ID
VENDOR_ID = 1018H ;供應商ID
MY_STACK SEGMENT PARA 'STACK'
DB 100 DUP(?)
MY_STACK ENDS
MY_DATA SEGMENT PARA 'DATA'
P8255_A DW 0000H
P8255_B DW 0001H
P8255_C DW 0002H
P8255_MODE DW 0003H
MES DB ' PCI CARD NOT FOUND! $'
MES0 DB '***********************PCI CONFIG INFO*****************************',13,10,'$'
MES1 DB 'PCI BIOS NOT FOUND!',10,13,'$'
MES2 DB ' PCI CONFIG READ ERROR! $'
DIS1 DB 'PCI ADDRESS 0 $';
DIS5 DB 'BIOS NOT SUPPER!$'
DIS6 DB 'READ PCI BOARD FAIL!$'
;-------PCI Configuration Space Registers-------------------------------
BN DB ? ;BUS NUMBER
DN_FN DB ? ;Device Number and Function Number
MY_DATA ENDs
MY_CODE SEGMENT PARA 'CODE'
MY_PROC PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
START: MOV AX,MY_DATA
MOV DS,AX
MOV AH,PCI_FUNCTION_ID ;查找PCI BIOS
MOV AL,PCI_BIOS_PRESENT
INT 1AH
JNC JUDGE1 ;如果CF被置位,則PCI BIOS不存在
MOV DX,OFFSET MES1
MOV AH,09H
INT 21H
JMP EXIT
JUDGE1: CMP AH,00H
JZ JUDGE2 ;如果不等,則PCI BIOS 不存在
MOV DX,OFFSET MES1
MOV AH,09H
INT 21H
JMP EXIT
JUDGE2: CMP DX,'CP' ;如果EDX中放的是"PCI "則說明PCI BIOS存在
JZ FIND
MOV DX,OFFSET MES1
MOV AH,09H
INT 21H
JMP EXIT
FIND: MOV AH,PCI_FUNCTION_ID ;找到了PCI BIOS,再查找指定PCI設備
MOV AL,FIND_PCI_DEVICE
MOV CX,DEVICE_ID ;板卡的DID
MOV DX,VENDOR_ID ;板卡的VID
MOV SI,0 ;索引
INT 1AH
JNC READ
MOV DX,OFFSET MES
MOV AH,09H
INT 21H
JMP EXIT
READ: MOV BN,BH ;保存BUS NUMBER
MOV DN_FN,BL ;保存Device Number and Function Number
MOV AH,PCI_FUNCTION_ID
MOV AL,READ_CONFIG_DWORD
MOV BH,BN
MOV BL,DN_FN
MOV DI,BADR2
INT 1AH
JC ERROR
ADD P8255_A,CX
ADD P8255_B,CX
ADD P8255_C,CX
ADD P8255_MODE,CX
START1: MOV DX,P8255_MODE ;設置控制字
MOV AL,80H ;全部輸出
OUT DX,AL
MOV AL,00H
MOV DX,P8255_A ;輸出0
OUT DX,AL
WAI: CALL BREAK
JMP WAI
ERROR: MOV DX,OFFSET MES2 ;顯示讀錯誤信息
MOV AH,09H
INT 21H
EXIT: MOV AX,4C00H
INT 21H
MY_PROC ENDp
BREAK PROC NEAR ;按任意鍵退出
PUSHF
PUSH AX
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN: POP DX
POP AX
POPF
RET
BREAK ENDP
MY_CODE ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -