You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
一.鼠标驱动
|
|
|
|
|
字符输入设备,与键盘类似,核心是编写鼠标中断处理程序。
|
|
|
|
|
1.鼠标中断入口程序的设置,编写鼠标中断处理函数,用宏完成IDT编写,set_trap_gate,位置与键盘中断初始化设置语句放在一起con_init() 控制台设备初始化函数。
|
|
|
|
|
2.中断函数实现,类似的创建一个汇编文件mouse.s,加文件修改Makefile
|
|
|
|
|
二.图形工作模式
|
|
|
|
|
1.启动图形模式
|
|
|
|
|
2.设置分辨率
|
|
|
|
|
3.像素点阵和显存的映射
|
|
|
|
|
|
|
|
|
|
1.启动图形模式
|
|
|
|
|
BIOS(基本输入输出系统)检测显卡硬件,支持什么图形模式。setup.s中功能号0x0F中。。。可以读取显卡信息,返回AL寄存器存放当前显卡的显示模式。存放在0x90006中。
|
|
|
|
|
控制台设备的初始化函数con_init()用宏定义ORIG_VIDEO_MODE得到(从0x90006取出一个字节)。后得到VGA标准,读手册。得到:
|
|
|
|
|
图形控制器(0x3CE),拼装器(0x3C4),CRT控制器(0x3D4)
|
|
|
|
|
图形控制器把总线地址数据存放在显存上
|
|
|
|
|
拼装器从四个64KB显存片取出还原(对应图形控制器)
|
|
|
|
|
CRT控制器将信息扫描输出
|
|
|
|
|
|
|
|
|
|
2.设置分辨率
|
|
|
|
|
320*200分辨率,靠CRT,水平垂直计数器
|
|
|
|
|
0x3D4 0x3D5完成设置控制扫描线长度
|
|
|
|
|
|
|
|
|
|
3.像素点阵和显存的映射
|
|
|
|
|
采取线性256色模式,一个字节一个像素点。
|
|
|
|
|
|
|
|
|
|
+至此做成显示器图形模式初始化系统调用sys_init_graphics()进入Mode 0x13图形模式。
|
|
|
|
|
|
|
|
|
|
4.开始绘制屏幕
|
|
|
|
|
起始位置设置屏幕最左上角像素从哪里取
|
|
|
|
|
三.消息驱动框架
|
|
|
|
|
1.操作系统收集各种事件 2.放入系统消息队列中 3.用户进程不断查看并作出相应的动作。一个while循环。
|
|
|
|
|
由消息触发,由于消息队列在操作系统中故对消息的获取是一个系统调用
|
|
|
|
|
内核中的构造工作就是 1.定义队列 2.post 3.get(内核函数)4.新消息的创建(正确的转换操作)switch
|
|
|
|
|
注意内核消息队列是一个多进程共享队列,用临界区机制保护,开关中断即可cli(),sti()。
|
|
|
|
|
|
|
|
|
|
四.可视化应用程序的设计与实现
|
|
|
|
|
1.定义对象
|
|
|
|
|
2.定时器:定时重画
|
|
|
|
|
3.无限循环
|
|
|
|
|
4.get系统调用取出系统消息,是定时就判断 失败? 对象位置,并重画,画面同步。是左键就更新位置。
|