|
原帖由 neo4026 于 2008-4-12 21:38 发表
to chenall:
完工后拿去编译 突然想起dos有640k限制 编译不了 要修改算法
(现在的是读入整个txtsetup.sif)
要改成读一个扔一个 可能要下周回家才能给你
>640K@_@
有理由相信10K以内可以搞定这还包括2K的堆栈(PCI BIOS功能调用里面有说明需要不少于1K的堆栈)和4K数据库,不依靠其他文件*^_^*,设备字串处理和输出还在思考中...
;FileName:SCANHD.ASM
.model tiny
.386
code segment
assume cs:code,ds:code,es:code
start: mov ax,cs
mov ds,ax
mov es,ax
;检测PCI 2.0
mov ax,0B101H
int 1AH
jc pcierr
cmp ah,0
jne pcierr
cmp edx.' ICP'
jne pcierror
mov numbus,cl
mov bh,cl
xor bl,bl
readpci:shl bl,3
mov si,offset hwlst
xor di,di
mov ax,0B10AH
int 1AH
mov [si],ECX;取VID&DID
add si,4
mov bh,numbus
mov bl,numdev
mov di,8
mov ax,0B10AH
int 1AH
mov [si],ecx;取CLASS&REV
add si,4
mov bh,numbus
mov bl,numdev
mov di,2CH
mov ax,0B10AH
int 1AH
mov [si],ecx;取SUBSYS(不一定有效)
add si,4
mov bh,numbus
mov bl,numdev
mov di,0EH
mov ax,0B108H
int 1AH
mov [si],cl;00为SUBSYS有效
mov si,offset hwlst
;硬件匹配和字符串输出处理,正在调试中...
mov bh,numbus
mov bl,numdev
inc bl
mov numdev,bl
cmp bl,20H
jb readpci;设备号没读完
cmp bh,0
jz exit;已经读到总线0了
dec bh
mov numbus,bh
xor bl,bl;设备号回0
mov numdev,bl
jmp readpci
pcierr: mov ax,4C01H;非PCI2.0以上版本返回ERRORLEVEL=1
int 21H
exit: mov ax,4C00H;没问题不返回ERRORLEVEL
int 21H
numbus db 0
numdev db 0
hwlst db 13dup(0)
msg db 'PCI\VEN_0000&DEV_0000&SUBSYS_00000000&CC_000000&REV_00= $'
hwdatasig db 'hwDataBase:'
hwdatabase db 4096 dup(0);4K的自定义硬件库,格式和txtsetup.sif相同
;但不要回车和换行,每字串以ASC(0)结尾,长度不超过msg长度,用UltraEdit改。
code ends
end start
[ 本帖最后由 netwinxp 于 2008-4-23 09:15 AM 编辑 ] |
|