30天自製作業系統讀書筆記 五

2022-05-05 05:57:07 字數 1400 閱讀 4908

為了讓程式靈活點,作者覺得把什麼320x200這些資料直接寫入程式,不如讓程式自己獲取。

所以就引入了結構體,指標。用指標直接在記憶體中獲取這些資料

(如程式裡的這句:

binfo_scrnx = (short *) 0xff4

;)。

對於結構體和指標我就不細寫了,有c語言基礎的人都知道。

因為已經進入了32位模式,所以不能再用bios寫好的中斷程式給我們輸出字元了,要手動了!

用畫素點描出圖形。

字元可以使用8x16的長方形畫素點來表示,轉變為16進製制就是這樣:

static

char font_a[16] =;

有了這些內容,就可以使用for迴圈,來描繪字元了。

二維螢幕和一維的位址換算關係如下: 

addr = 0xa0000 + x + y * 320

void putfont8(char *vram, int xsize, int x, int y, char c, char *font)

//vram就是0xa0000 ,xsize就是320,然後x,y就是螢幕的座標。

for (i = 0; i < 16; i++) 

if ((d & 0x40) != 0)

if ((d & 0x20) != 0)

if ((d & 0x10) != 0)

if ((d & 0x08) != 0)

if ((d & 0x04) != 0)

if ((d & 0x02) != 0)

if ((d & 0x01) != 0)

}

0x80換成二進位制就是10000000

0x40 就是01000000  這個迴圈的意思就顯而易見了。

它就是判斷8位到底哪幾個位要列印。

比如: 11111000 先和100000000 進行與操作 那就是 10000000然後p[0]就被描繪上了顏色。

因為字串太多,自己乙個個設計過於麻煩,所以作者引入了乙個字型。  hankaku.txt

他通過編譯器編譯會產生二進位制檔案,和我們之前描述a的差不多,然後一共是4096個位元組。

那麼就可以在c語言裡使用這個檔案了 :

extern char hankaku[4096];

其中字元都是按照順序排列的,a這個字元位於第65個位置。我們知道每個位元組佔了16位

所以a就在hankaku[65*16]這裡開始! 也就是書上的0x41*16也就是 『a』*16

作者進一步封裝,寫了能處理字串的函式。

接著又介紹了 sprintf。

接下來畫出滑鼠的過程和上面如出一轍。

對於gdt,idt的介紹留到明天吧!

30天自製作業系統讀書筆記 六

首先先整理下 自谷月軒的部落格 現在我們擁有這麼9個檔案 恩,接下裡我們補坑。介紹下gdt和idt c語言描述 struct segment descriptor 我們知道現在段位址是32位的。在這個結構裡用base表示,但是它分成了3段 low 2位元組 mid 1位元組 high 1位元組 剛好...

30天自製作業系統讀書筆記 一

剛開始作者叫我們用二進位制編輯器,手敲01 寫了個img 磁碟映像檔案 並提供了一些檔案 run.bat,install.bat這些乙個批處理檔案,其實就是寫好了cmd指令儲存到文件裡面,方便以後執行。其中run.bat裡面的指令是這樣的 copy helloos.img z tools qemu ...

30天自製作業系統

第一天的內容很少,是一些簡單的基礎知識,在這裡我就沒有必要寫出來了,只說出大概的輪廓了,然後我會對其中的幾點進行詳細的解釋。文章的第一天的輪廓大概是這樣的,作者首先用二進位制編輯器做了乙個顯示二進位制的程式,然後用彙編完全db的形式,後又進行改善,最後以比較標準的組合語言編寫,但程式主體部分還沒有翻...