进入保护模式(九)键盘中断的实现

一、每次都写个题记

       我的电脑键盘映射对应第一个:http://www.brokenthorn.com/Resources/OSDevScanCodes.html

            说了好多,其实看不太懂:http://www.brokenthorn.com/Resources/OSDev19.html

       端口操作两个:0x60(数据端口)  0x64(命令端口)

       注意点:1.中段结束EOI发送

                  2.键盘如果不读取内容,是自动添置的,下一次数据填充不进来的

                  3.键盘每次有两次数据的 mark break(过滤掉)

                  4.很蛋疼一点 每次端口读写的时候注意 xor eax,eax

       键盘中断实现步骤1.前面说过的实例化中断对应的中断向量,开启键盘中断

                            2.通过60读取内容,查找对应的数据

                            3.上面的注意点,

                            好了一个简单的键盘中断可以工作了

二、代码

;键盘中断的处理
key_interrupt:
                            pushad
			xor eax,eax
			  
                             mov al,0x20                        ;中断结束命令EOI
                            out 0xa0,al                        ;向8259A从片发送
                                 out 0x20,al
			  
                             mov al,0xAD                        ;关闭键盘
			  out 0x64,al
			  
			  ;获取状态
			  in al,0x64
			  test al,0x01
			  jz .end                            ;结束 输出缓冲区没有内容
			  
			  
			  in al,0x60                         ;读取数据
			  test al,0x80
			  jnz .end
			  
			  mov ecx,eax
                             ;得到数据段的地址
                                  mov eax,core_data_seg_sel
                             mov ds,eax
                             mov ebx,key_map
                             mov byte cl,[ebx+ecx]			  

			  call put_char
			  
        .end:	
                             mov al,0xAE                        ;开启键盘
			  out 0x64,al
			  
			  popad
                             iret

下面是个效果图:

进入保护模式(九)键盘中断的实现_第1张图片

 

你可能感兴趣的:(进入保护模式(九)键盘中断的实现)