[第4天]c语言指针和画面设定

       第4天,明显就简单了很多。作者讲了C语言指针的知识,然后用指针操作内存来设定画面。简单方便。不过今天也学到很多东西。

VGA设定:

       进入保护模式后,画面模式也改变了,采用VGA。查询之后发现BIOS的0x10号向量是用来设定VGA模式的。其中AH为0,代表Video模式,就是非text。AL为0x13就是所谓的Mode 13h, 即标准的VGA模式。还有很多AL设置选项,可以参考Ralf Brown’s Interrupt List.  以下就是设定VGA的汇编代码,顺便把设定数据存在内存里。可以看到操作VGA的内存地址从0xa0000开始,到0x000BFFFF,一共640kb,实际我们用的是320*200 = 64 kb。为什么从0xa0000开始, 有很多资料都有说明。0xa0000是mode 13h的地址, 0xb8000是text mode的地址。

C指针:

       作者先用了汇编来操作内存,控制显示,就是上一天的样子。今天就直接用C指针操作。比如下面那样。神奇的是,无论 2[p] 还是i[p], 还是p[i],编译器都会解释为 *(p+i)。以前还没有注意过。又可以装b了,不知道是不是所有编译器都支持这么写。。

 色号设定:

      VGA默认是256色,8位。但是作者认为我们只要用16种颜色,然后就用一段比较蛋疼的程序修改了默认颜色。不重要,我就先不管了。下图分别是默认的256种颜色,和修改后的16种颜色。

VGA_Palette_-_Big  modifycolor

绘制矩形:

      能操作内存,那么绘制图形也不再话下。用指针操作简直方便。代码见github,下图为效果。分别为测试矩形和假的任务栏。

shape  taskbar

链接:

  1. Interrupt List
  2. Operating System Development Series
  3. Memory Map And VGA