◇ 關於 PC 鍵盤控制 利用8042控制命令將鍵盤禁能 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
◇ 關於 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 發送簡訊給我 |
哇!* 青衫詩客 -- 小邱 *
這位先覺已經隱遁八九年了,以前業餘網路BBS常見到他的蹤跡,現在這篇文章在win系列下不知是還可以Run!不知有試過嗎? 網路志工聯盟----Visita網站http://www.vista.org.tw
---[ 發問前請先找找舊文章 ]---
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |