X86下控制Intel8042初始化鼠标
x86下开启鼠标中断和鼠标初始化
在bochs中开启鼠标
mouse: enable
,默认是ps/2接口鼠标设置Intel 8259A开启鼠标中断
同时打开irq2 和 irq12才能开启鼠标中断
但是经过测试实际上并没有产生 鼠标中断,
测试过程
关闭除鼠标中断外的其它中断
启动
bochs
,show extint
:开启显示外部中断,c
,然后经过一段中断输出后停止了,开启鼠标,移动鼠标,bochs并没有显示中断产生
中断开启但是没有产生鼠标中断的原因是并没有设置鼠标的电路芯片
需要通过Intel 8042来设置鼠标,(Intel 8042也能设置键盘)
Intel 8042资料
寄存器端口
状态寄存器/控制寄存器的意义
鼠标的初始化
先弄清除8042的2个寄存器,IO端口分别是0x60,和0x64.
实际上有4个用处,
in 0x60
端口,则0x60端口作为 8042的输出缓冲寄存器,out 0x60
端口,则0x60端口作为 8042的输入缓冲寄存器in 0x64
端口,则0x64端口 作为8042的状态寄存器out 0x64
端口,则0x64端口 作为8042的控制寄存器
判断0x60 输入缓冲寄存器是否可以写入
向8042的输入缓冲寄存器0x60写入信息前,
需要先从状态寄存器0x64得到是否能写入的信息
bit 2 = 0则输入寄存器0x60可以写入信息,代码^wait_keysta_ready()
目前暂时先设置8042使鼠标能产生中断
- 首先设置8042自身,
- 向鼠标发送命令
设置8042的控制寄存器为0x47,(也就是设置8042的工作模式)
0x47是
0100 0111
则根据控制寄存器的bit的意义知:
开启了鼠标和键盘中断,并且设置了状态寄存器的bit 2,和将keyboard scancode转为了第一套
向鼠标发送命令0xf4:[Enable Data Reporting]
则鼠标会产生数据发送给8042
然后在bochs中添加鼠标中断处理例程测试鼠标中断已经成功产生
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!