跳轉到內容

NEC PC 程式設計師參考/PC-98xx 系列程式設計師參考/中斷 0x18 - 鍵盤

來自華夏公益教科書,開放的書籍,為開放的世界

當按鍵被按下時,鍵盤 BIOS 會發出中斷 0x9。可以透過呼叫 INT 0x18 來處理鍵盤資料。

BIOS 如何管理按鍵

[編輯 | 編輯原始碼]

BIOS 保持一個數據陣列(“鍵盤狀態表”),每個按鍵對應一個位。當按鍵按下時,位為 1;當鬆開時,位為 0。當按鍵被按下時,輸入狀態陣列中按鍵的索引與 SHIFT 狀態的程式碼相結合,生成按鍵掃描碼(這是程式識別按鍵的方式)。

PC-98 鍵盤 BIOS 相容 IBM。

按鍵訪問命令列表

[編輯 | 編輯原始碼]
AH 命令 目的 使用
0x1 檢測第一個按鍵 查詢鍵盤是否有按鍵按下。返回緩衝區末尾的按鍵。 返回
  • 按鍵掃描碼到 AH
  • 按鍵的 JIS 程式碼到 AL
  • BX = 0 如果緩衝區為空;1 如果有按鍵排隊。
0x2 檢查修飾鍵 返回修飾鍵(SHIFT,CTRL,GRPH,CAPSLOCK,KANA)的狀態 在 AL 中返回修飾鍵狀態位元組
  • SHIFT 按下 = b0
  • CAPS = b1
  • KANA = b2
  • GRPH = b3
  • CTRL = b4
0x3 初始化鍵盤 安裝內建鍵盤驅動程式介面。為 BIOS 使用鍵盤分配記憶體;重置 uPD8251A。
0x4 獲取按鍵組狀態 查詢鍵盤狀態表以獲取一組按鍵的即時狀態。返回請求的按鍵組的位元組,然後可以與邏輯 AND 掩碼以查詢單個按鍵的狀態。
  • 按鍵組編號到 AL

返回

  • 按鍵組狀態位元組到 AH
0x5 檢測最後一個按鍵 查詢鍵盤是否有按鍵按下。返回緩衝區開頭的按鍵。 返回
  • 按鍵掃描碼到 AH
  • 按鍵的 JIS 程式碼到 AL
  • BX = 0 如果緩衝區為空;1 如果有按鍵排隊。
0x6 初始化鍵盤緩衝區/清除待處理按鍵 設定鍵盤緩衝區。呼叫此函式將清除緩衝區。
0x7 處理第一個按鍵 獲取第一個未處理的按鍵,並將其從緩衝區中刪除。

返回

  • AH = 按鍵掃描碼
  • AL = 按鍵的 JIS 程式碼
  • BL = 按鍵修飾鍵位元組
0x8 處理最後一個按鍵 獲取最後一個按鍵,並將其從緩衝區中刪除。

返回

  • AH = 按鍵掃描碼
  • AL = 按鍵的 JIS 程式碼
  • BL = 按鍵修飾鍵位元組
0x9 模擬按鍵按下 透過用指定資料填充鍵盤緩衝區來建立模擬按鍵按下。
  • AL = 期望的按鍵程式碼
  • BL = 修飾鍵狀態位元組

返回

  • 按鍵掃描碼到 AH
  • 按鍵的 JIS 程式碼到 AL
華夏公益教科書