|
|
本帖最后由 ravenyuanye 于 2010-2-9 21:31 编辑
键盘控制器运行在主机内。是主机和键盘通讯的渠道。现在的键盘控制器完成相当多的功能。早先它是一块独立的8042芯片,现在已经被集成到Super I/O芯片或者主板芯片组的南桥内。在XT时代,IBM使用8255作为键盘控制器,这是一片并口芯片,CPU接到8255的C口。当CPU需要键盘数据的时候,就去读8255的C口。8255不做扫描码转换,于是在XT系统上,CPU直接读的就是键盘发来的原始数据,也叫XT扫描码。后来,更先进AT系统发布了,AT键盘不知道为什么选择了另一套完全不同的扫描码,现在也叫AT扫描码。如此带来一个严重的问题:所有为XT编写的软件,主要是BIOS和操作系统将面临一个有趣的挑战,他们将无法正确的识别键盘发来的数据。举个简单的例子吧,早先的XT键盘把A键编码为1E发送。而在AT键盘上,1E代表的是数字键2。于是一个为XT设计的软件就会将按下2的动作解释为按下了A。这明显是不可接受的。聪明的IBM的工程师们于是决定屏弃掉8255,选用了当时比较先进的一款MCU8042来重新实现键盘控制器。他们为8042编写了从AT码到XT码的转换。并且由于8042有两个8位的双向I/O口,于是他们又利用余下的I/O口完成了一些别的工作。总之,现在是8042取代了8255。以后的所有设计都保持了与此的兼容性。现在的情形是,AT键盘仍然发送AT码,但是系统软件看到的则转换过的XT码了。
扫描码(Scan Code)就是当你按下一个键或者释放一个键的时候,键盘发给主机的数据。或者说,是用来标识一个键的状态的的数据。事实上一共有三套扫描码,我们前面已经介绍了XT扫描码,它又被叫做Scan Code Set 1,而AT蟆的另一个名字是Scan Code Set 2,PS2码又叫Scan Code Set 3。
ps:csdn粘的,非原创 |
|