《30天自制操作系统》学习笔记——第八天

        进入到第八天的内容。

                                     《30天自制操作系统》学习笔记——第八天_第1张图片

       第八天开始鼠标的数据的解读,函数moused-decode。首先,程序将鼠标传来的数据按三个字节一组,显示到屏幕上。为了实现这样的功能,使用了phase,来记录是第几个字节,工作进行到第几个阶段。第一个字节和按键有关,第二个字节和左右移动有关,第三个字节和上下移动有关。结构体MOUSE_DEC吧所有解读鼠标所需的变量都归总到此,其中,btn存放鼠标按键状态,x、y存放移动信息,这些信息,由buf[ ]中的三字节数据按照一定的方式解读,然后存入,此时的格式已经可以直接用以使鼠标移动。

       接下来是鼠标的移动部分,先是将原鼠标所在图层隐藏,再由解读后的鼠标数据计算出现在的鼠标图层的坐标,然后画出新的鼠标图层。

       鼠标的内容就这么完了,总结一下,流程如下:

1)初始化GDT/IDT/PIC。

2)激活鼠标的电路控制器。

3)制作鼠标的数据缓冲区。

4)在移动鼠标时,会产生中断信号,并传来移动信息,送入数据缓冲区。

5)解读移动信息,将新信息保存。

6)利用新信息计算鼠标新位置。


       今天的第二个部分,32位模式的切换。这个过程都由ashead.nas实现。这个过程也分成好几步。

       第一步是各种关中断。

       第二步是向键盘控制电路的附属端口输出0xdf。这一步相对比较重要,它完成了将A20GATE信号线变成ON的状态,这样就使用内存1MB以上的空间。32位模式与16位模式的一大区别就是内存寻址空间的扩大,这一步完成了内存寻址空间的扩展。在介绍第三步之前,需要说明一个寄存器CR0。即control register 0,只有操作系统可以使用。具体内容看图:

《30天自制操作系统》学习笔记——第八天_第2张图片

       其中,CR0的第0位PE,即protection enable,第31位PG,即paging。如果PE=0、PG=0,处理器工作在实地址模式下;如果PG=0、PE=1,处理器工作在没有开启分页机制的保护模式下;如果PG=1、PE=0,此时由于不在保护模式下不能启用分页机制,因此处理器会产生一个一般保护异常,即这种标志组合无效;如果PG=1、PE=1,则处理器工作在开启了分页机制的保护模式下。接下来正式介绍第三步,在进入保护模式后,段寄存器的意思也变了,除cs外,所有段值从0x0000变成了0x0008。

       第四步,将各种内存复制到1MB后的空间。新的内存分布图。

                              《30天自制操作系统》学习笔记——第八天_第3张图片

你可能感兴趣的:(《30天自制操作系统》学习笔记——第八天)