跳转到内容

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
华夏公益教科书