戏说BIOS之Keyboard
1. Introduction
Keyboard System看起来好像挺简单,但事实上它远比想象中的复杂,硬件上Keyboard System需要两颗cpu完成key stroke的转换以及和Host的通信过程,一颗用于处理keyboard的make&break过程,另一颗作为keyboard controller和host交换信息。一次按键过程在软件的层面上也要经过多次转化才能成为最终被用户理解的ASCII码。这个过程通常需要经历ma=>mv=>set2=>Set1=>ASCII。Keyboard System的架构框图如下图1所示:
这是MB中常见的架构,在NB中这部分已经被放入EC之中成为EC的
一个部分KBC,但是工作原理依旧如此。
2. How It Works?
那么当我们按下一个键,需要做哪些动作,才能让我们看到最终的字符呢? 听我慢慢道来。当我们按下一个键‘k’时(make),键盘内部的8031会将k的set2 scan code‘2Ch’ 通过上图1的串行连接送给8042,8042会查一张set2转set1的表将该set2 scan code转成 set1的‘14h’,而且8042会引发IRQ1通知host,表示有按键事件发生。Host将会读取60Port获取set1的scancode‘14h’,而后host会将‘14h’转化为ASCII码‘k’,当我们松开一个键时过程同按下比较像了,不过键盘内部的8031会先送‘F0h’,然后再送‘2Ch’给8042,8042看到‘f0h’会将Set1的‘14h’的bit7设置为1即94h,以表示这是一个break。Host端也会收到中断IRQ1,可是host通常不处理break code。Make&Break key也被称之为通码和断码。最终host会将set1以及ASCII码放在BDA 之中。Host