文档章节

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

Cobbage
 Cobbage
发布于 2013/12/30 14:59
字数 343
阅读 65
收藏 0

一、每次都写个题记

       我的电脑键盘映射对应第一个: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

下面是个效果图:

 

© 著作权归作者所有

共有 人打赏支持
Cobbage

Cobbage

粉丝 49
博文 145
码字总数 72911
作品 1
闵行
QA/测试工程师
私信 提问
Linux insides笔记(三)

头不疼鼻子哗哗的 感冒了竟然,宿舍里众人皆感冒一周有余我自岿然不动的神话破灭 伤心 以下正文 程序终于运行到main.c。接着继续配置内核启动环境和参数。 首先把启动参数,就是之前bootloa...

yyliu
2015/08/30
116
0
在loader程序中涉及到的CPU模式切换

在实模式下开启4GB的物理内存地址寻址(称之为Big Real Mode) 通过A20快速门(Fast Gate)修改0x90端口的数据, 对其进行置位(类似于打开一个开关), 开启 使用CLI汇编指令关闭外部中断 使用lgdt加...

megachen
10/09
0
0
进入保护模式(八)简单OS内存使用分布

1.上次说要实现键盘中断还没实现的 2.接着又有问题了就是对于异常的处理,例如一个也异常的处理 一直在512字节里面写很憋屈,这下把书上的代码用上暂且内存分布如下 慢慢修改了,在更新修改 ...

Cobbage
2013/12/29
0
0
XV6 - bootsect.S

#include "asm.h" #include "memlayout.h" #include "mmu.h" .code16 .globl start start: cli # 关中断, 防止干扰开启A20, 和保证设置GDT的完整性 # 初始化寄存器 xorw %ax,%ax # 将ax清零,......

Pagination
2014/06/12
0
0
进入保护模式(六)保护模式下中断的安装

一、中断 上篇本来打算先实现个在任务状态运行的例子,但是代码有问题(编译错代码了),任务那部分确实还不是很熟悉; 本篇的目的:1.实现实例化中断的描述符 2.实现时钟中断 对于中断分类暂...

Cobbage
2013/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20181213 上课截图

小丑鱼00
9分钟前
0
0
nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
16分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
32分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
47分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
49分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部