## 8042键盘控制器：(4个寄存器，2个端口，3个内部端口）

```
寄存器：Status Register, Control Register, Input Buffer, Output Buffer
	读写Control Register:先向0x64写入命令(0x20读，0x60写），再通过0x60端口对Control Register进行相应的读或写的操作
		0键盘中断，1鼠标中断，2设置状态寄存器的bit2,3设置状态寄存器的bit4,4禁止键盘，5禁止鼠标，6翻译扫描码，7保留恒为0
	读Output Buffer:读0x60端口
		存储的是扫描码或命令响应
	写Input Buffer:写0x60端口
		存储的是命令及参数
	读Status Register:读0x64端口
		0输出缓冲器，1输入缓冲器，2系统标志，3输入缓冲器中是命令还是数据,4键盘是否被禁止，5发送超时，6接收超时，7奇偶校验
内部端口：Input Port, Output Port, Test Port
	读写Output Port:先向0x64写入命令(0xd0读，0xd1写），再通过0x60端口对Output Port进行相应的读或写的操作
	读input port:先向0x64写入命令0xc0,再从0x60端口读出
命令和状态端口：0x64
	共有12种参数：（0x20, 0x60, 0xa4, 0xa5, 0xa6, 0xaa, 0xad禁止键盘, 0xae打开键盘, 0xc0, 0xd0, 0xd1, 0xd2)
	0xa4:测试键盘密码是否被设置，结果放在0x60端口
	0xa5:设置键盘密码，结果通过0x60端口放在Input Buffer中
	0xa6:让通过0xa5命令设置的密码生效
	0xaa:自检，结果放在Output Buffer中，可通过0x60端口读取
	0xd2:写数据到Output Buffer，通过0x60端口写入，此功能用来模拟键盘发送的数据
数据端口：0x60
	movb $0xdf,%al
	outb %al,0x60	打开A20地址线
```

