2012年9月3日 星期一

simple os - show bmp

show time: 這次把一張 bmp 圖檔秀出來當桌布用。

進度來到 ipc, 不過有點枯燥, 來玩個有趣的東西好了。

簡單 os 提供了 320X200X256 color 圖形終端機, alt+f6 可以切到這個畫面, 當然, 和之前一樣, 切不回去文字終端機。

為了秀出這張圖片, 費了我不少功夫,  出動 gimp, 用 qt 寫的一支小程式, 看了不少 vga 相關資料。你問 qt 小程式是幹嘛的, 不重要啦, 讓我保留個小秘密, 有秘密真快樂。

vga 320X200X256 color 的 palette r, g, b 只有 6 bit, 而 256 色 bmp 裡頭的 r, g, b 有 8 bit, 花了點時間終於搞定轉換方式。很簡單, 把 r, g, b 值除以 4 就好了。還有如何設定 vga palette 也花了點時間了解。透過這次實作我把 bmp 256 palette, vga palette 這些事情搞懂了, 還順道學了用 gimp 轉圖檔。

果然還是要有 24bit color 比較容易處理這些問題, 不過我無法將 vga mode 切到 24 bit color mode, 所以就先這樣了, 都說是簡單 os 了。



還不錯吧!桌布只有 160X100X256 color, 你問為什麼不是 320X200X256 color, 有你的, 問到重點了, 因為不明原因無法開機, 先這樣了, 我可是好不容易才把這張圖秀出, 先讓我休息一下。

20121024 fixed :
git commit:  31b6e94c5371c03b00dbd74f0f6ca48a8d2522e2
原因同: simple os - 繪圖終端機



這是 po 上自己的 os 討論主題: http://forum.osdev.org/viewtopic.php?f=1&t=12087 我很早就幻想可以 po 在這主題上, 目前進度雖然沒有 mm, filesystem, ipc, fork, 但有繪圖畫面, 勉強可看, 和 os 有關的部份大概就是 process switch, 勉強算是 os 程式, 我鼓足勇氣 po 了上去, 不知道會不會被電的很厲害。現在第一篇 post 是 2006 年, 我落後了 6 年。

我的 po 文在第 85 頁: http://forum.osdev.org/viewtopic.php?f=1&t=12087&sid=bef01f0e74c195fa746f65b16feb7bfc&start=1260

osdev 註冊時會問這題目:
What x86 register denotes source location in movsb instruction?

ref:

The background in the output of bitmap.exe is a representation of 
the VGA's 256-color palette. Fortunately, the palette is programmable 
to other colors, so bitmaps are not forced onto an odd palette. Unfortunatly, 
the VGA only gives us 6 bits per color channel, so the best you can get 
is 18-bit color (but you can only pick 256 of those colors, of course). 
Palette information is stored after the h1er in the BMP file format. 
Four bytes define each color: one byte each for blue, green, red, 
and one reserved byte. The VGA understands color values in the order red, 
green, blue, (reverse of the BMP format) plus the program needs to 
change the palette data form 24-bit to 18-bit 
(divide each color by four, or right-shift by two).

沒有留言:

張貼留言

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

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