键盘操作

参考:http://www.computer-engineering.org/index.html
读取键盘输入:

kbRead:
WaitLoop:    in     al, 64h     ; Read Status byte
             and    al, 10b     ; Test IBF flag (Status<1>)
             jz     WaitLoop    ; Wait for IBF = 1
             in     al, 60h     ; Read input buffer

输出到键盘:

kbWrite:
WaitLoop:    in     al, 64h     ; Read Status byte
             and    al, 01b     ; Test OBF flag (Status<0>)
             jnz    WaitLoop    ; Wait for OBF = 0
             out    60h, cl     ; Write data to output buffer

输出到键盘是初始化键盘和更改键盘的属性,这里在OS中没有用到。

键盘的和主机之间的通信使用的编码称为Scan Code Set,分为:

按键码分为MAKE和BREAK,分别表示按下和释放按键。在bochs虚拟机中的默认的是Scan Code Set 1。OS在此主要负责的是分析按键码并转换为ascii码。
具体实现$JOS_DIR/kern/console.c
#define NO        0

#define SHIFT        (1<<0)
#define CTL        (1<<1)
#define ALT        (1<<2)

#define CAPSLOCK    (1<<3)
#define NUMLOCK        (1<<4)
#define SCROLLLOCK    (1<<5)

#define E0ESC        (1<<6)

static uint8_t shiftcode[256] =
{
    [0x1D] CTL,
    [0x2A] SHIFT,
    [0x36] SHIFT,
    [0x38] ALT,
    [0x9D] CTL,
    [0xB8] ALT
};
这个数组定义表示的是shiftcode[0x1D]的值是CTL。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值