官术网_书友最值得收藏!

第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。獨立的功能做成獨立的函數,這樣程序讀起來要容易一些。

好了,做完了。執行一下吧。……嗯,暫時好像沒什么問題。只是沒什么意思,因為畫面顯示內容沒有變化。

主站蜘蛛池模板: 泸州市| 凭祥市| 青田县| 阳春市| 全椒县| 尚义县| 蕲春县| 惠水县| 司法| 卓资县| 梁山县| 海原县| 星座| 玉山县| 上高县| 涟源市| 韶山市| 哈密市| 金沙县| 广南县| 桂阳县| 钦州市| 彭州市| 卓资县| 昌江| 临洮县| 大化| 东城区| 宜丰县| 天等县| 桦甸市| 布拖县| 东乡族自治县| 喀什市| 南投市| 曲松县| 昌都县| 吉隆县| 安康市| 邮箱| 宜昌市|