第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。獨立的功能做成獨立的函數,這樣程序讀起來要容易一些。
好了,做完了。執行一下吧。……嗯,暫時好像沒什么問題。只是沒什么意思,因為畫面顯示內容沒有變化。