[自制简单操作系统] 2、鼠标及键盘中断处理事件[PIC\GDT\IDT\FIFO]

本文涉及的产品
文件存储 NAS,50GB 3个月
简介:


 

 

1、大致介绍:

>_<" 大致执行顺序是:ipl10.nas->asmhead.nas->bootpack.c

PS: 这里bootpack.c要调用graphic.c、dsctbl.c、fifo.c、int.c实现功能,其中有些函数还必须汇编来写,所以单独写一个汇编文件naskfunc.nas,为了方便看全部函数和结构体,所以写一个bootpack.h来写一些结构体和函数声明~

>_<" 下面是编译图解:最终生成的haribote.img可放在软盘来启动电脑,加载操作系统~

  Makefile文件,负责编译全过程

>_<" 此外还需要一个make.bat的脚本程序,这样把相应的编译器和上面的文件放到对应的位置(参看Makefile文件),运行DOS窗口输入:make run就能直接编译,打包,导入,运行在虚拟机上了~为了在UE上调试方便,我把make run命令也写成了脚本.bat,这样可在UE中直接调试运行~

  make.bat
  脚本.bat[UE的高级,工具配置]

 


 

2、代码详解:

  ipl10.nas

PS: 负责读盘到内存,读完盘之后跳转到0xc200处,即asmhead.nas

  asmhead.nas

PS: 负责显示模式及分辨率设置及从16位转换为32位保护模式,是c语言和汇编语言的桥梁,所以称为asmhead文件,执行到最后就转到bootpack.c的主函数

  bootpack.c
  bootpack.h

PS: 主函数在此,做好初始化各种操作然后接收键盘和鼠标信息,并对鼠标信息进行解析,呈现在屏幕上,此外还有文字显示(字库),鼠标显示,鼠标位置计算...这里用到了GDT和IDT,对消息的接收要用中断,对消息的保存要用到FIFO缓冲区...

  dsctbl.c

PS: GDT IDT分段及中断相关,这里的分段和调色板的分段有异曲同工之妙~

  graphic.c

PS: 设置调色板,显示字符串,绘制矩形,绘制鼠标,绘制窗口,总之和VRAM相关的函数

  int.c

PS: 中断句柄函数,但是这些并不是中断真正入口,真正入口是对应汇编函数,这些函数只是对应汇编函数要调用的~这些函数包括鼠标中断和键盘中断,因为为了加速,所以要把收到的数据放进FIFO缓冲区,防止因为在中断中进行大量的处理而影响速度~

  fifo.c

PS: 就是个简单的用数组的形式建立的FIFO循环链表,建议看一下那个经典的黑色的数据结构的书,上面讲的很好,甚至有自动增加大小的循环链表,这个数据结构主要用来存放鼠标和键盘的信息~

  hankaku.txt

PS: 这就是个字库,对于硬件级工程,字库是必须的!为什么我们编辑器里选择字形时英文这么多,汉字这么少,是因为设计中文字库的人少,一方面劳动量大,另一方面没钱赚,所以我们有着丰富的书法文化却只有几个可怜的字形可以选择!

  naskfunc.nas

PS: 一些不能用c语言来完成的函数还得用汇编,于是就都放在这个文件里了~

 


 

3、效果说明:

>_<" 这里已经实现了文字显示,鼠标显示,键盘和鼠标信息的读取,其中涉及的知识有:GDT,IDT,中断,FIFO,VRAM,字库等,最终效果如下:

PS: 最上面显示鼠标当前位置,第二行左边显示按键信息,右边lcr显示鼠标点击事件(如果左边被点击l就变大写L,其他相同道理),后面两个数据是鼠标此次移动距离~

PS: 该系统的内存分布图:在文件asmhead.nas有详细注释

146 ;----------------------------------------------------------------------------------------------------
147 ;内存分配: 148 ; 0x00000000-0x000fffff:虽然在启动中会多次使用,但之后就会变空(1M) 149 ; 0x00100000-0x00267fff:用于保存软盘的内容(1440KB) 150 ; 0x00268000-0x0026f7ff:空(30KB) 151 ; 0x0026f800-0x0026ffff:IDT(2KB) 152 ; 0x00270000-0x0027ffff:GDT(64KB) 153 ; 0x00280000-0x002fffff:bootpack.hrb(512KB) 154 ; 0x00300000-0x003fffff:栈及其他(1MB) 155 ; 0x00400000- :空 156 ;----------------------------------------------------------------------------------------------------

LZ:http://www.cnblogs.com/zjutlitao/

 



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/3961048.html,如需转载请自行联系原作者

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
相关文章
|
6月前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
169 0
操作系统:中断和异常
内中断(异常):与当前CPU的执行的指令有关,中断信号来自CPU内部 外中断:与当前CPU的执行的指令无关,中断信号来自CPU外部 (注:在大部分教材中,“中断”是狭义的中断,指外中断;而内中断则称为异常)
277 0
|
1月前
|
缓存 Java iOS开发
MacOS环境-手写操作系统-13-鼠标中断
MacOS环境-手写操作系统-13-鼠标中断
29 1
|
1月前
|
iOS开发 MacOS
MacOS环境-手写操作系统-37-切换窗口 键盘输入
MacOS环境-手写操作系统-37-切换窗口 键盘输入
38 0
|
1月前
|
C语言 iOS开发 MacOS
MacOS环境-手写操作系统-28-输入文本框和鼠标移动窗体
MacOS环境-手写操作系统-28-输入文本框和鼠标移动窗体
29 0
|
1月前
|
存储 iOS开发 MacOS
MacOS环境-手写操作系统-24-消除鼠标闪烁
文章介绍了如何通过记录图层像素点对应的窗体编号来消除鼠标在窗口间移动时的闪烁现象。主要方法是在图层数据结构中添加变量map,存储每个像素点的窗体标识,并在窗口移动或尺寸改变时更新这个映射,从而避免不必要的窗口刷新,提高显示性能。
22 0
|
1月前
|
存储 Java C语言
MacOS环境-手写操作系统-14-控制鼠标移动
MacOS环境-手写操作系统-14-控制鼠标移动
14 0
|
1月前
|
缓存 Java C语言
MacOS环境-手写操作系统-12-键盘中断机制
MacOS环境-手写操作系统-12-键盘中断机制为键盘建立中断机制
17 0
|
1月前
|
Java iOS开发 MacOS
MacOS环境-手写操作系统-10-绘制系统鼠标
MacOS环境-手写操作系统-10-绘制系统鼠标
33 0
|
5月前
|
算法 Linux 调度
技术好文共享:详解操作系统中断
技术好文共享:详解操作系统中断

热门文章

最新文章