PDA

View Full Version : Gấp gấp gấp ,lập trình bàn phím



bambiz
23-12-2003, 13:18
hiện mình đang gặp vấn đề , sửa int9 : nhấn Ctrl-alt-ins-del để khởi động lại máy tính thay cho ctrl-alt-del . Sư huynh nào biết chỉ dùm đệ. Have a best week !!!!!!!!!

Riddle
23-12-2003, 22:56
Nếu mà bambiz muốn làm kiểu đó thì e là phải viết lại cả hàm bàn phím. phải viết lại hàm bàn phím dùng bộ đệm bàn phím (keyboardbuffer) riêng của mình, dùng hàm đọc phím, hàm nhập giữ liệu ... tự làm, khá mất thời gian đó. Tuy nhiên, tui đoán là bạn muốn làm game hoặc ứng dụng không phải loại giao diện dòng lệnh, cho nên cũng không đến nỗi phải viết lại các hàm quá phức tạp (như hàm nhập sâu).

Bạn có thể làm 1 thư viện có 1 bộ đệm bàn phím riêng của bạn,các mảng bit ứng với các phím bạn muốn kiết hợp để làm các nhiệm vụ đặc biệt (Ctrl,Alt,Ins,Del.v.v..), 1 hàm đọc phím là đủ (cả hàm khởi tạo bộ đệm của mình, và hàm trả lại ngắt int9 cũ).

Tư tưởng chính như sau:
:: mỗi phím đều có 1 mã scancode riêng, khi nhấn 1 phím, ngắt cứng của bàn phím sẽ gửi qua cổng 60h 1 byte mã scancode của phím đó và gọi ngắt int9. Tương tự, khi nhả 1 phím ra, cổng 60h cũng nhận được 1 byte = scancode+128. Tiếp tục ngắt int9 sẽ đọc từ port 60h, để sử lý ... Vậy chỉ cần chặn ngắt int9, thao tác đọc từ port 60h ta phải tự làm, nhận biết phím nào được nhấn, thả, gửi chúng vào bộ đệm riêng của mình, để sau đó ta sẽ xây dựng hàm đọc phím lấy từ bộ đệm này ra.
Còn dùng tổ hợp phím để thực hiện các chức năng đặc biệt thì phải có 1 mảng bit tương ứng. Khi nhận được mã nhấn 1 trong những phím quan tâm, thì bật bit tương ứng lên, nếu nhân được mã nhả thì tắt bit đó đi. Sự kiện sẽ sảy ra khi tất cả các bit trong mảng được bật. Trong trường hợp boot lại máy, thì gọi ngắt khởi động lại.

*Chú ý:Các phím điều khiển (Enter,Ctrl,Alt...) có thể có các cách đưa mã vào cổng 60h khác các phím khác, thường là thêm các mã nhận dạng khác, bạn nên đặt lại cho chúng các mã đơn mà phím khác chưa sử dụng, để tiện làm việc. Tui vẫn chưa giải thích được tại sao các nhà sản xuất lại chọn cách gửi mã kép, rất khó hiểu để nhận dạng các phím điều khiển trong khi các mã đơn còn lại vẫn chưa dùng. (Ai biết thì chỉ giùm)

Trong chương trình, bạn vẫn có thể chuyển đỗi giữa ngắt bàn phím của Bios và của bạn. Khi cần nhập dòng lệnh, hoặc nhập sâu thì dùng ngắt của Bios, còn khi cần các thao tác đắc biệt với bàn phím, (như làm nhân vật game, vừa đi chéo, vừa nhảy, vừa đấm đá...) thì dùng ngắt của bạn.

hiepsi4rum
25-12-2003, 20:26
thì bạn cứ xét thêm mã qúet của phím Ins
nếu ok, thì restart

bambiz
29-12-2003, 16:25
cám ơn 2 bạn ngen .

thì mình cũng đã xét thêm mã quét phím Ins đó . Nếu đúng là mã quết của Ins thì làm sao nữa . đến đây mình bí