線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4034
推到 Plurk!
推到 Facebook!

◇ 關於 PC 鍵盤控制 利用8042控制命令將鍵盤禁能

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-07 18:38:06 IP:61.221.xxx.xxx 未訂閱
◇ 關於 PC 鍵盤 --------------------------------------------------------------------------------發信人: dv.bbs@csie.nctu (皮皮), 信區: programming 標 題: 優良信件轉載 發信站: 交大資工鳳凰城資訊站 (Sat Mar 18 16:18:40 1995) 轉信站: cis_nctu!news.cis.nctu!news.cc.nctu!news.csie.nctu!bbsroute!phoenix 以下信件, 原載於 90-assembly, 是關於 PC 鍵盤, 並非我寫的, 我作的只有轉載的工作. 希望對您有幫助. --------------------------------------------------------------- 90-ASSEMBLY - Msg : 63 of 72 From : Chi'u I-Nan 90:1013/622 16 Mar 95 19:56:00 To : All Subj : 關於鍵盤 ----------------------------------------------------------------------------- 近來看了看許多網友討論鍵盤的控制,並不是非常熟悉, 故將我寫好關於鍵盤方面的資料上傳給諸位參考, 希望對各位有所助益. 這些資料原是我準備寫"軟體保護技術研究" 一書中的文章,但因工作忙碌,一直無法順利寫完 (寫了半年多才寫 這麼一點...). 除了鍵盤資料外,我也將一些硬體控制方面的資料 一併上傳,其中關於146818 (CMOS控制)以前已上傳過,因此不再重 複上傳. 8237 (DMA控制) 尚未完全寫完,以後再說. 所有上傳的資料都是我參考多本書籍,並親自寫程式測試過的, 正確性應極高. 當然,若文中有錯誤的地方,也請指正一下,免得 我繼續"誤"人. 如果有進一步興趣的話,以下是一些參考書籍, 可供進一步研究. 7.PC系統程式設計, 吳宗穎&賴明宏譯, 格致, 1990. 8.DOS技術手冊(二)徹底研究篇, 施威銘著, 旗標, 1987. 9.BIOS系統呼叫, 林鴻明編譯, 格致, 1989. 10.IBM PC介面技術與週邊設備實習, 謝聿婷編著, 全欣, 1989. 11.IBM PC BIOS程式剖析, 林書華著, 儒林, 1985. 12.IBM PC/XT硬體線路精解, 劉紹漢編著, 全華, 1991. 13.IBM PC/AT硬體技術手冊, 趙健雄譯, 儒林, 1986. 14.386/AT硬體徹底剖析, 陳柏村編著, 全華, 1991. 15.Intel Total Solution Component & Development Tool Handbook, Intel, 1987. 16.Microsystem Components Handbook, Microprocessors and Peripherals, Volume I, II, Intel, 1985. 17.The TTL Data Book, Volume I,II,III, TEXAS Instruments, 1984. [7,8,9]為介紹PC系統的相關書籍,[7]的內容幾乎涵蓋了所有的PC系統相 關知識,但介紹並不是很深入,頗適合技術參考使用。[8]及[9]則分別對 於DOS及BIOS有更詳細的介紹,較適合初學者閱讀。[10,11,12,13,14,15, 16,17]則是介紹PC硬體控制的書籍,[10]的介紹頗詳細,但硬體的種類也 較少,頗適合初學者閱讀;[11]為解析BIOS的書籍,所涵蓋的硬體較多, 但介紹也較不深入;[12]則對PC的線路設計加以說明,以上三本都是針對 PC/XT的架構做說明的。[13,14]則以PC/AT為主做說明,[13]主要是針對 286/AT的硬體線路及控制部份加以說明,其中還附有完整的AT BIOS程式, 頗適合程式設計師閱讀。[14]則是針對386/AT的元件加以詳細說明,主要 的內容為電路的設計,對純學軟體的人來說,看來會比較吃力些,但是其 中一些關於軟體控制方式仍頗具參考價值。至於[15,16,17]則是以零件的 觀點說明該零件的控制方式,頗適合搭配上述的書籍參考使用。[15,16] 均為INTEL的80系列零件,其中[16]較偏重於AT的機器,[17]則為TTL零件 的參考手冊。 * 青衫詩客 -- 小邱 * - - Via 中文銀版快信 V2.28C Origin: 檔案貨櫃, 歡迎您來挖寶, 28800 BPS, 04-230-2080; (90:1013/622) --------------------------------------------------------------- 90-ASSEMBLY - Msg : 64 of 72 From : Chi'u I-Nan 90:1013/622 16 Mar 95 19:46:00 To : All Subj : 鍵盤1 ----------------------------------------------------------------------------- 一.鍵盤 想要中斷鍵盤與追蹤者的連繫,首先我們必須完全了解鍵盤的輸入到 追蹤者取得的整個過程,如此我們才能從這個過程中找到中斷的地方。在 早期的XT上,鍵盤控制器是使用8048,當鍵盤有任何按鍵按下時,首先由 8048取得該按鍵的掃描碼(Scan Code)後,將掃描碼傳給8255(8255同 時也控制著是否允許鍵盤工作),然後送出岔斷訊號給8259,由8259發出 IRQ1岔斷訊號給CPU,然後跳入INT 9h的岔斷處理程式執行。而在AT上, 鍵盤控制器改用了功能較強的8042,同時也取消了8255這個週邊界面元件, 因此掃描碼便不經由8255傳送,而直接由8042傳送。雖然XT和AT有這些差 異,但事實上各I/O Port的功能大致上仍頗相容,因此大部份的XT程式還 是可以在AT上正確的執行。 INT 9h的岔斷處理程式主要是從8255取得Scan Code,然後將之換算 成ASCII碼,最後再將兩者放到鍵盤緩衝區內(鍵盤緩衝區的位址由BIOS 的一些參數決定)。這之中當然還處理了一些特殊的按鍵,如Ctrl-Alt-Del、 Caps Lock等等。而電腦的執行程式便經由岔斷INT 16h來偵測及取得在鍵 盤緩衝區內的按鍵資料,最後依照所得到的按鍵資料進行指定的工作。整 個連繫的過程大致是這樣子。如果你對於前面所說的過程中,關於硬體部 份如8255、8042、8259等不是很了解的話,請你隨時參閱附錄一中的說明 後再繼續往下閱讀。 由這個連繫的過程,我們大概可推出下類幾種截斷鍵盤輸入的方式: 1.控制8042,使得鍵盤無法輸入或不可輸入。 2.控制8255,阻止鍵盤的輸入。 3.控制8259,阻止鍵盤岔斷的產生或進入鍵盤岔斷處理程式。 4.破壞或截斷鍵盤岔斷處理程式。 5.破壞、改變或檢查鍵盤緩衝區內的資料及其輸入指標值。 6.破壞或截斷鍵盤資料輸入岔斷處理程式。 以下我們便仔細說明這些截斷鍵盤輸入的方法。 技術一 利用8042控制命令將鍵盤禁能 在說明如何利用8042控制命令將鍵盤禁能之前,我們先說明8042控制 命令的下達方式: ; ; ======================================================== ; 以下為8042界面函數之內部呼叫函數 ; ======================================================== ; Flush8042 PROC ; 清除所有的輸出緩衝器資料 push ax FlushOBF: in al,64h test al,1 jz NotOBF in al,60h jmp short FlushOBF NotOBF: pop ax retn Flush8042 ENDP ; WaitIBF PROC ; 等待8042輸入緩衝器有空 WaitIBFLoop: push ax in al,64h test al,2 pop ax jnz WaitIBFLoop retn WaitIBF ENDP ; WaitOBF PROC ; 等待8042輸出緩衝器有資料送來 WaitOBFLoop: push ax in al,64h test al,1 pop ax jz WaitOBFLoop retn WaitOBF ENDP ; Read8042Data PROC ; 讀取8042回應資料 ; 傳回: AL = 回應資料 call WaitOBF ; 等待資料回庄 in al,60h retn Read8042Data ENDP ; Write8042Data PROC ; 送出資料給8042 ; 參數: AL = 8042系統命令或資料 ; 備註: 本函數亦為送出系統命令或資料的函數 call WaitIBF ; 等待輸入緩衝區有空 out 60h,al ; 送出資料 call WaitIBF ; 確認8042收到 retn Write8042Data ENDP ; RealSend8042Cmd PROC ; 送出一般命令碼給8042 ; 參數: AL = 8042一般控制命令 ; 備註: 8042命令之參數或傳回值由外界處理 call WaitIBF ; 等待輸入緩衝區有空 out 64h,al ; 送出命令 call WaitIBF ; 確認8042收到 retn RealSend8042Cmd ENDP ; RealSend8042Sys PROC ; 送出系統命令碼或參數給8042 ; 參數: AL = 8042系統控制命令或參數 ; 傳回: AL = 8042回應值 ; 備註: 除回音外,其餘命令或參數應檢查是否傳回ACK call Flush8042 call Write8042Data call Read8042Data retn RealSend8042Sys ENDP ; ; ======================================================== ; 以下為8042界面函數,使用前必須使用CLI將岔斷禁能 ; ======================================================== ; Send8042Cmd PROC ; 送出一般命令碼給8042 ; 參數: AL = 8042一般控制命令 call RealSend8042Cmd retn Send8042Cmd ENDP ; Read8042Cmd PROC ; 送出讀取命令給8042 ; 參數: AL = 8042讀取命令 ; 傳回: AL = 讀取值 call Flush8042 call RealSend8042Cmd call Read8042Data retn Read8042Cmd ENDP ; Write8042Cmd PROC ; 送出寫入命令給8042 ; 參數: AL = 8042寫入命令 ; AH = 寫入資料 ; 備註: AX值會被破壞 call RealSend8042Cmd xchg al,ah call Write8042Data retn Write8042Cmd ENDP ; Echo8042 PROC ; 送出8042回音命令 ; 傳回: AL = EEh mov al,0EEh ; 回音命令 call RealSend8042Sys retn Echo8042 ENDP ; Send8042Sys PROC ; 送出系統命令碼或參數給8042 ; 參數: AL = 8042系統控制命令或參數 ; 備註
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-08 16:15:42 IP:61.228.xxx.xxx 未訂閱
哇!* 青衫詩客 -- 小邱 * 這位先覺已經隱遁八九年了,以前業餘網路BBS常見到他的蹤跡,現在這篇文章在win系列下不知是還可以Run!不知有試過嗎?    聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]---
系統時間:2017-10-20 2:21:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!