2017-12-27 811 views
2

根據這個網頁:http://stanislavs.org/helppc/8042.html鍵盤控制器維護它自己的內部16字節的make/break代碼緩衝區。是否可以訪問鍵盤控制器的內部製作/中斷代碼緩衝區?

「鍵盤的內部控制器最多可緩衝16個字節的製造/中斷代碼信息,這在所有PC系統中都很常見,不應與BIOS維護的(32字節)鍵盤緩衝區混淆。

能夠訪問此緩衝區對我來說在我的8086彙編語言程序中非常有用(假設更新速度比BIOS維護的32字節緩衝區更快)。

除了輪詢端口60h之外,還有辦法從內部緩衝區中獲取這些製造/中斷代碼嗎?

+1

那麼最簡單的方法就是正常讀取掃描碼,不必輪詢,可以使用中斷處理程序將代碼放入RAM中的緩衝區,就像BIOS一樣。有文件記錄的控制器命令可以讓你讀取8042的RAM,在真實的8042上,它可能會在某處包含緩衝的掃描碼,但我不認爲標準的確切位置。現代的鍵盤控制器可能無法模擬這一點。 –

+0

但在內存中的其他地方使用它有什麼用處?你的意思是訪問掃描代碼會更快,而無需加載不同的段?我同意這一點。我只是真的希望將最後一個break/make代碼作爲輸入到我的程序中,這就是爲什麼我使用端口60h,但訪問緩衝區會很有用,因爲人爲錯誤通常會導致我的程序出現問題。通常,我會在讓前一個鍵覆蓋我的程序需要的代碼之前一秒鐘敲一個鍵,並用我希望忽略的中斷代碼。訪問緩衝區將允許我確定丟失的代碼。 –

+0

我已經忽略了與最後接受的make代碼不一致的中斷代碼,但我仍經常遇到與先前遇到的代碼相對應的亂序中斷代碼。例如,在我的遊戲中導致不希望的停止移動精靈。我應該提到的是,BIOS中的32字節緩衝區有時會錯過分割的第二個make代碼。我想象一個非常高頻率的中斷可以解決這個問題,但我仍然不知道如何編程這兩個PIC。我在業餘時間一直在研究它的最近幾天。 –

回答

3

沒有任何記錄的方式。我的意思並不是暗示有一種已知的但沒有記錄的方式來做到這一點;我根本不願意說沒有任何無證的方法。

使用port工具訪問的設備通常會維護自己的離散存儲器和邏輯,因此您不應該期望在系統的任何其他位置看到存儲器空間。這有例外;內存區域的DMA傳輸,甚至是內存映射到物理地址空間。但對於鍵盤來說,不,你看不到那個記憶。

+1

是的,我知道它不會映射到系統內存或類似的東西,但我希望有一種方法可以通過與控制器通信來請求緩衝區中的字節。 –

+2

@Mylifeisabug .:是的,不要問,可能有某種遠程調試接口,但在這種情況下看起來答案是否定的。 –

+1

如果您可以找到實際控制器的一些低級別文檔,但請注意,與其中一個可能不起作用的另一個可能不適用於該級別。 –

相關問題