一.鼠标驱动 字符输入设备,与键盘类似,核心是编写鼠标中断处理程序。 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系统调用取出系统消息,是定时就判断 失败? 对象位置,并重画,画面同步。是左键就更新位置。