5 增加字體(harib02e)
雖然字符“A”顯示出來了,但這段程序只能顯示“A”而不能顯示別的字符。所以我們需要很多別的字體來顯示其他字符。英文字母就有26個,分別有大寫和小寫,還有10個數字,再加上各種符號肯定超過30個了。啊,還有很多,太麻煩了,所以我們決定沿用OSASK的字體數據。當然,我們暫時還不考慮顯示漢字什么的。這些復雜的東西,留待以后再做。現在我們集中精力解決字母顯示的問題。
另外,這里沿用的OSASK的字體,其作者不是筆者,而是平木敬太郎先生和圣人(Kiyoto)先生。事先已經從他們那里得到了使用許可權,所以可以自由使用這種字體。
我們這次就將hankaku.txt這個文本文件加入到我們的源程序大家庭中來。這個文件的內容如下:
hankaku.txt的內容
char 0x41 ........ ...**... ...**... ...**... ...**... ..*..*.. ..*..*.. ..*..*.. ..*..*.. .******. .*....*. .*....*. .*....*. ***..*** ........ ........
這比十六進制數和只有0和1的二進制數都容易看一些。
■■■■■
當然,這既不是C語言,也不是匯編語言,所以需要專用的編譯器。新做一個編譯器很麻煩,所以我們還是使用在制作OSASK時曾經用過的工具(makefont.exe)。說是編譯器,其實有點言過其實了,只不過是將上面這樣的文本文件(256個字符的字體文件)讀進來,然后輸出成16×256=4096字節的文件而已。
編譯后生成hankaku.bin文件,但僅有這個文件還不能與bootpack.obj連接,因為它不是目標(obj)文件。所以,還要加上連接所必需的接口信息,將它變成目標文件。這項工作由bin2obj.exe來完成。它的功能是將所給的文件自動轉換成目標程序,就像將源程序轉換成匯編那樣。也就是說,好像將下面這兩行程序編譯成了匯編:
_hankanku: DB各種數據(共4096字節)
當然,如果大家不喜歡現在這種字體的話,可以隨便修改hankaku.txt。本書的中心任務是自制操作系統,所以字體就由大家自己制作了。
各種工具的使用方法,請參閱Makefile的內容。因為不是很難,這里就不再說明了。
如果在C語言中使用這種字體數據,只需要寫上以下語句就可以了。
extern char hankaku[4096];
像這種在源程序以外準備的數據,都需要加上extern屬性。這樣,C編譯器就能夠知道它是外部數據,并在編譯時做出相應調整。
■■■■■
OSASK的字體數據,依照一般的ASCII字符編碼,含有256個字符。A的字符編碼是0x41,所以A的字體數據,放在自“hankaku+0x41 * 16”開始的16字節里。C語言中A的字符編碼可以用’A’來表示,正好可以用它來代替0x41,所以也可以寫成“hankaku +‘A' * 16”。
我們使用以上字體數據,向bootpack.c里添加了很多內容,請大家瀏覽一下。如果順利的話,會顯示出“ABC 123”。下面就來“make run”一下吧。很好,運行正常。
本次的HariMain的內容
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; extern char hankaku[4096]; init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); putfont8(binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, hankaku + 'A' * 16); putfont8(binfo->vram, binfo->scrnx, 16, 8, COL8_FFFFFF, hankaku + 'B' * 16); putfont8(binfo->vram, binfo->scrnx, 24, 8, COL8_FFFFFF, hankaku + 'C' * 16); putfont8(binfo->vram, binfo->scrnx, 40, 8, COL8_FFFFFF, hankaku + '1' * 16); putfont8(binfo->vram, binfo->scrnx, 48, 8, COL8_FFFFFF, hankaku + '2' * 16); putfont8(binfo->vram, binfo->scrnx, 56, 8, COL8_FFFFFF, hankaku + '3' * 16); for (; ; ) { } io_hlt(); }

- 蘋果電腦玩全攻略 OS X 10.8 Mountain Lion
- Linux Shell編程從入門到精通(第2版)
- Windows Phone應用程序開發
- 移動應用UI設計模式(第2版)
- AWS Development Essentials
- Linux內核設計的藝術:圖解Linux操作系統架構設計與實現原理
- 從實踐中學習Kali Linux無線網絡滲透測試
- Windows 7應用入門與技巧
- RHCSARHCE 紅帽Linux認證學習指南(第7版)EX200 & EX300
- Advanced Infrastructure Penetration Testing
- Mastering Windows 8 C++ App Development
- Linux應用大全 基礎與管理
- iOS 10快速開發:18天零基礎開發一個商業應用
- Multi-Cloud for Architects
- VMware Horizon Mirage Essentials