这同样是自己三年前写的一点不成器的文字。不过由于是讲PC键盘的历史,所以什么时候发表都不算晚,哈哈,请分享:
大家每天都面对键盘敲击,我的生活可以说是键盘的受难史 ^_^ 那么你想不想知道当你按下一个键的时候,都发生了些什么事情呢?以及操作系统或者BIOS是如何处理这些事情的呢?如果你有这些想法,那么就来看看本文吧:1)A brief history of keyboard 键盘简史首先让我们来回顾一下PC机键盘的历史。最早的个人计算机的键盘随着IBM在1981年正式发表IBM-PC以及随后的PC/XT而一起出现了,那是一个只有83个键的小型键盘,我们不妨把它叫做XT键盘。XT键盘使用一种简单的串行协议和主机通讯。最初的设计所有的通讯都是单向的,所以XT键盘只能发送数据到主机,却不能从主机接收数据。XT键盘使用5-pin DIN接头,也就是我们后来俗称大头的,流行于AT结构主板之上的接口。有一点必须注意的是,大头口和现在的PS2口仅仅是样子上的不同,在物理的电气特性上,两者完全一样。也就是说,可以很容易的在这两种接口之中转换。很快,在1984年,IBM又给我们带来了全新的键盘,那就是伴随着IBM PC/AT一起发表的AT键盘。AT是Advanced Technology(高级技术)的意思。当时看来,配备了Intel最新的286处理器的AT计算机简直就是天上来的东西,这样的好东西自然需要一块全新的键盘,于是IBM设计了有AT键盘。AT键盘是全新的设计,这首先表现在它开始支持主机与键盘之间的双向通讯,主机现在有8条命令可以发往键盘,并得到键盘的回应。其次,AT键盘使用另一种扫描码,但这种设计带来了兼容性的问题:AT扫描码和过去的XT扫描码完全不同,许多软件(主要是操作系统和BIOS)将无法正常的工作在新系统上。为此,IBM屏弃了XT主机上使用的8255键盘控制芯片,转而使用一片MCU(微控制器)8042来作为新的键盘控制器,通过给8042编程的方式,从而在8042上完成AT扫描码到XT扫描码的转换。这是一个重大的改进,并且相当的影响了后来的设计。直到今天,虽然我们早已不在使用8042,但是所有的新发表PC芯片组都保持了与最初的8042的兼容性。也正式在AT键盘上,出现了101键的设计,这种设计我们今天已经很熟悉了。接着在1987年,IBM正式发表了PC/PS2系统。按照之前的惯例,又一款新的键盘推出了,这已经是我们今日所使用的键盘原型,这就是PS2键盘。PS2键盘在整体设计上与AT键盘相差不大,更改的最多的可能是主机到键盘的命令大大增加。此外,PS2键盘出人意料的使用一种古怪的扫描码。这使得它的兼容性大打折扣。正如大家熟知的那样,PS2系统并不流行,后来几乎没人再用了。今天我们使用的键盘大约就是像是AT键盘和PS2键盘的合体:使用PS2键盘引入的小口,又支持AT扫描码。
2)Keyboard controller 键盘控制器键盘控制器运行在主机内。是主机和键盘通讯的渠道。现在的键盘控制器完成相当多的功能。早先它是一块独立的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码了。3)Scan Codes 扫描码有必要正式的介绍一下什么叫扫描码。扫描码(Scan Code)就是当你按下一个键或者释放一个键的时候,键盘发给主机的数据。或者说,是用来标识一个键的状态的的数据。事实上一共有三套扫描码,我们前面已经介绍了XT扫描码,它又被叫做Scan Code Set 1,而AT蟆的另一个名字是Scan Code Set 2,PS2码又叫Scan Code Set 3。
键盘发展到今天,已经十分成熟,技术上也越来越复杂。并不是三言两语就可以说清楚的 ^_^ 我们的历史篇就到这里啦~~