总述
一个操作系统必需要具有交互性。所谓交互性就是指人与计算机之间的一种交流,有两种最基本的交互设备,一是显示器,一是键盘。显示器是计算机用来与人进行交流的,计算机通过显示器来告诉人一些信息,而键盘是人用来与计算机进行交流的,人通过键盘将命令发送给计算机,计算机接受人通过键盘发来的命令,然后进行处理,最后将处理的结果通过显示器告诉人,这样就完成了一次最简单最基本的交互。在本篇中,笔才将从一个编写操作系统的角度去描述操作系统应当怎样处理键盘,让人可以通过键盘与计算机进行交互。在本篇中,我们同样将以pyos做为我们的实验平台,在pyos上实验操作系统对键盘的控制,为了进行本次实验,笔者专门编写了一人非常简单的“推箱子”游戏,当pyos启动后,你可以输入“game(回车)”命令,然后系统就会调入这个游戏,这时,你可以通过上下左右四个方向键进行游戏,游戏结束后,按“ESC”键,可以返回系统内核。所有的这一切你都会从本篇中了解到去怎样实现它。
在本篇中,pyos实现了类似windows的一个消息系统,换句话说,此处的pyos是由消息驱动的,如果你能windows的消息驱动很好奇,但又不知它是怎样实现的,那么,本篇中所介绍的pyos的消息驱动或许能对你理解windows的消息戏动有些许帮助:)
本篇与前几篇实验报告是一脉相承的,特别是同《保护模式下中断编程》一篇有较为紧密的相关性,你可以在“纯C论坛”(http://purec.binghua.com)上的“操作系统实验”专区找到它们,上面的内容对理解本篇会具有较大帮助。
在pyos的编写过程中,得到了许多朋友的大力支持与帮助,中国安天实验室的
还有许多朋友给我发来电子邮件及在QQ上留言,帮助并支持笔者进行实验,无法一一列举,仅在此对上述关心pyos的朋友致以最真诚的谢意与问候!
?? Ok,言归正传,下面就让我们开始我们的实验,Let’s Go!~~
键盘驱动简介
CPU对外部设备的管理是通过中断程序进行的,键盘也是一种外部设备,因此,CPU对键盘的管理也是通过中断进行的。当你击打键盘的时候,键盘控制器会向CPU提出中断申请,CPU响应此中断进行处理,这就完成了一次很简单与人之间通过键盘进行的交互。
有关键盘的很详情的硬件控制说明,大家可以在纯C论坛上找到一篇名为《PS/2键盘控制》的文章,这篇文章里非常详细描述了有关键盘的硬件控制。由于本文旨在从操作系统的角度描述操作系统怎样通过键盘与人进行交互,因此,并不打算详细而完整的描述对键盘控制器的控制方法,如果你想了解对键盘的更多控制细节,比如设定键盘响应时间,重复键频率,键盘自检等,你会在《PS/2键盘控制》中找到所有的内容。这里,仅就pyos所用到的一些细节进行简单的介绍,因为,pyos是一个很简单的系统。J
从上面的描述中我们可以看到,键盘有许多属性比如说响应时间,重复频率等需要进行设置,不过比较幸运的是,在计算机被引导后,BIOS已经将这一切为我们做好了,如果你不需要很特别的应用,使用BIOS为我们设定的默认值对于pyos这样的系统来说是足够了,因此,我很乐意在这里将BIOS进行的设置称之为键盘初始化,由于BIOS的运行是在操作系统运行之前进行的,因此,当操作系统被调入内存并运行时键盘已经完成了初始化,这个时候键盘就处于等待用户输入的状态。在前面几篇中我们知道,键盘中断是连结在计算机内部
键盘中断程序概述
键盘中断程序到底要完成些什么事儿,这完全不是固定的。不同的系统对它的各个功能模块所需要完成的工作有不同的划分,不过对于键盘中断程序,它所必须完成的任务就是要告诉系统键盘上到底什么键被按下了,这是通过读取键盘控制器的一个端口完成的。
键盘上的每一个键都有两个唯一的数值进行标志。为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。这些数值在系统中被称为键盘扫描码,而这张供查询用的表就被称为键盘扫描码集。最早的键盘键数较少,而现在的键盘键数比以前多了不少,键盘键数的变化也引起了扫描码的变化,历史上产生过三种键盘扫描码集,分别标记为Set 1,Set 2,Set 3,它们并没有什么本质的不同,而区别只在于:对于键盘上的同一个键,所带表的扫描码不一样罢了。现代键盘常常使用Set 2,但是为了兼容以前的老式键盘,BIOS在启动的时候自动将键盘控制器设置为工作在Set 1模式下,因此键盘控制器会自动翻译由键盘数据线送来的扫描码,将它有Set 2中的码转换成Set 1中的码。因此,传给CPU或说操作系统的就是Set 1中的扫描码了,当然我们完全可以给键盘控制器发送命令,让它不进行这样的转换,不过这仿佛没有什么必要。下面,我们就来看看Set 1中的键盘扫描码:
Set 1 键盘扫描码
| 键 | 按下码 | 释放码 | ----- | 键 | 按下码 | 释放码 | ----- | 键 | 按下码 | 释放码 |
| A | 1E | 9E | ? | 9 | | | ? | [ | | |
| B | 30 | B0 | ? | ` | 29 | 89 | ? | INSERT | E0,52 | E0,D2 |
| C | 2E | AE | ? | - | | | ? | HOME | E0,47 | E0,97 |
| D | 20 | A0 | ? | = | 0D | 8D | ? | PG UP | E0,49 | E0,C9 |
| E | 12 | 92 | ? | \ | 2B | AB | ? | DELETE | E0,53 | E0,D3 |
| F | 21 | A1 | ? | BKSP | 0E | 8E | ? | END | E0, | E0,CF |
| G | 22 | A2 | ? | SPACE | 39 | B9 | ? | PG DN | E0,51 | E0,D1 |
| H | 23 | A3 | ? | TAB | | | ? | U ARROW | E0,48 | E0,C8 |
| I | 17 | 97 | ? | CAPS | | BA | ? | L ARROW |
上一个话题:移动开发2003综述之技术构架
本类最热图文巧巧读书图文推荐
最新文章
一周阅读排行>>更多排行
巧巧推荐图文
碰碰你的商机
搜索您感兴趣的内容
|

