如何從QB45
I中的BIOS讀取comm port addresses一直使用以下代碼從QB45中的BIOS獲取comm port addresses:PRINTH400+x*2 p=PEEK(z)q=PEEK(z+1)a=q*quot;COMquot;
解答動態(tài)
這是意料之中的;BIOS數(shù)據(jù)區(qū)只有四個插槽用于串行端口的I/O地址,緊接著是并行端口的插槽。在內(nèi)存.LST拉爾夫·布朗的檔案,我們可以找到以下條目0:
MEM 0040h:0000h-第一個串行I/O端口MEM的基本I/O地址0040h:0002h-第二個串行I/O端口MEM的基本I/O地址0040h:0004h-第三個串行I/O端口MEM的基本I/O地址0040h:0006h-第四個串行I/O端口MEM的基本I/O地址0040h:0008h-第一個并行I/O端口MEM的基本I/O地址0040h:000Ah-第二個并行I/O端口的基本I/O地址MEM 0040h:000Ch-第三個并行I/O端口的基本I/O地址MEM 0040h:000Eh-第四個并行I/O端口(PS/2之前)的基本I/O地址MEM 0040h:000Eh-擴展BIOS數(shù)據(jù)段(PS/2,較新的BIOS)的段
如果機器的串行端口多于BDA所能容納的數(shù)量,則基本I/O端口地址必須以其他方式獲得。1或者根本不可能:可以通過DOS驅(qū)動程序(通過打開COM設(shè)備文件的句柄并使用DOS系統(tǒng)調(diào)用與之交互)或中斷&h14(盡管在基本情況下,只有通過調(diào)用匯編代碼(例如,通過絕對調(diào)用)訪問此類端口。如果不知道提供端口的具體設(shè)備,就不可能說得更多,也不可能解釋W(xué)indows是如何發(fā)現(xiàn)這些端口的。然而,這個問題似乎意味著基本程序是在Windows下的DOS框中運行的。如果是這樣的話,值得記住的是DOS盒是虛擬化環(huán)境,無論如何都不能直接訪問硬件:I/O端口通信由DOS虛擬機處理,并傳遞給相應(yīng)的Windows驅(qū)動程序,該驅(qū)動程序可能會將其映射到完全不同的設(shè)備。這意味著DOS框中可用的I/O端口不必對應(yīng)于主機系統(tǒng)本機使用的相同I/O端口。但它也為我們提供了另一種選擇:只需將串行端口號重新分配到一個較低的端口號,就可以在DOS框中使用預(yù)期的設(shè)備名和I/O地址。(實際上我自己并沒有嘗試過,但我知道至少可以為某些設(shè)備重新分配端口號。)
0清單使用了段0040h的偏移量,而不是段0,但這只是相同物理地址的不同表示法。
1假設(shè)它是通過ISA/LPC總線訪問的8520兼容UART首先,比方說,USB上的RS-232適配器必須以完全不同的方式操作。
BIOS列表只包含引導(dǎo)時在標(biāo)準(zhǔn)地址處找到的最多四個標(biāo)準(zhǔn)8250型COM端口的地址。
它將不包含四個以上的端口,它將不包含任何非8250型COM端口,以及非標(biāo)準(zhǔn)地址的COM端口,例如PCIE COM端口,以及沒有IO地址的USB COM端口。它將不包含僅由Windows驅(qū)動程序等找到的端口。
BIOS數(shù)據(jù)區(qū)僅為40:00到40:07的四個com端口的地址留出空間。
更多串行端口將由某個設(shè)備驅(qū)動程序驅(qū)動,并在其他位置存儲地址和IRQ。- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項,請咨詢專業(yè)人士處理。