上QQ阅读APP看书,第一时间看更新
第5天 结构体、文字显示与GDT/IDT初始化
1 接收启动信息(harib02a)
我们今天从哪儿开始讲呢?现在“纸娃娃操作系统”的外观已经有了很大的进步,所以下面做些内部工作吧。
到昨天为止,在bootpack.c里的,都是将0xa0000呀,320、200等数字直接写入程序,而本来这些值应该从asmhead.nas先前保存下来的值中取。如果不这样做的话,当画面模式改变时,系统就不能正确运行。
所以我们就试着用指针来取得这些值。顺便说一下,binfo是bootinfo的缩写,scrn是screen(画面)的缩写。
本次的HariMain节选
void HariMain(void) { char *vram; int xsize, ysize; short *binfo_scrnx, *binfo_scrny; int *binfo_vram; init_palette(); binfo_scrnx = (short *) 0x0ff4; binfo_scrny = (short *) 0x0ff6; binfo_vram = (int *) 0x0ff8; xsize = *binfo_scrnx; ysize = *binfo_scrny; vram = (char *) *binfo_vram;
这里出现的0x0ff4之类的地址到底是从哪里来的呢?其实这些地址仅仅是为了与asmhead. nas保持一致才出现的。
另外,我们把显示画面背景的部分独立出来,单独做成一个函数init_screen。独立的功能做成独立的函数,这样程序读起来要容易一些。
好了,做完了。执行一下吧。……嗯,暂时好像没什么问题。只是没什么意思,因为画面显示内容没有变化。