2012年6月28日 星期四

在保護模式下, 不使用 vga bios 呼叫, 將顯示卡設定為繪圖模式 (2)

將 320X200X256 色模式完成。切換成 320X200X256 色後, 將 %ds 設定為 0x10 (這個 selector 可以存取 4GB 範圍的記憶體位址), 再來交給 c, 直接以指標讀寫 0xa0000 畫出 3 個正方形。

若沒有填滿背景, 會有下面亂亂的線條畫面 (bochs 也是同樣的結果)。



不知道為什麼, qemu 的畫面好像少了幾個點, 還是得到真實機器上測試才能確認。

20120709 補充:
qemu 0.12.3 畫出的正方形有點問題, 用 git 的版本就正確了。


draw_func.c
 1 #include "draw_func.h"
 2 #include "../type.h"
 3 
 4 void draw_box()
 5 {
 6   u8 *vb = (u8*)0xa0000;
 7 
 8   for (int x=0 ; x < 320 ; ++x)
 9     for (int y=0 ; y < 200 ; ++y)
10     {
11       *(vb + x + 320*y) = 1; // 0: black, 1: blue
12     }
13 }
14 
15 void draw_box_1(int draw_x, int draw_y, int c)
16 {
17   u8 *vb = (u8*)0xa0000;
18 
19   for (int x = draw_x ; x < 40+draw_x ; ++x)
20     for (int y = draw_y ; y < 40+draw_y ; ++y)
21     {
22       *(vb + x + 320*y) = c;
23     }
24 }


↓ bochs snapshot



↓ qemu snapshot

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。