OS自作入門 5日目/30日(文字出力)
OS自作入門 5日目/30日(文字出力)
1.はじめに
5日目では、文字の出力を行う。躓きどころは下記の2点
- フォントの作成
sprintf
フォントの作成についても、著者オリジナル実行ファイルを使用せずに、作成する。
sprintf
については、ソースファイルをそのまま実行するとエラーになるため、sprintf
の代わりの関数を作成する。
2.harib02e
スクリーンへ文字の出力を行う。
harib02eでも著者のオリジナル実行ファイルが使用されているので、自作本とは異なる方法でimgファイルを作成する。
自作本でのimgファイルの作成手順
- フォントtextファイルから、makefont.exe(著者オリジナル)でbinファイルを作成
- bin2obj.exe(著者オリジナル)でbinファイルからobjファイルを作成
- 他のオブジェクトファイルと合体させ、bimファイルを作成(以降は、前回説明した流れと同じ)
- bimファイルからhrbファイルを作成
- bimファイルとbinファイルからsysファイルを作成
- sysファイルとブートローダ部のbinファイルからimgファイルを作成
著者オリジナルのファイルを使用しない、imgファイルを作成手順
- フォントtextファイルを、フォントcファイルに変換
- 作成したフォントcファイルと他のファイルをリンクさせ、bootpackのhrbファイルを作成(以降は、前回説明した流れと同じ)
- hrbファイルとbinファイルからsysファイルを作成
- sysファイルとブートローダ部のbinファイルからimgファイルを作成
最初の手順1. フォントtextファイルを、フォントcファイルに変換は、CD内のhankaku.txtを使用する。textファイルからcファイルの変換については、下記サイトを参考にプログラムを新規に作成。
GDT(グローバルディスクリプタテーブル) | OS自作入門 5日目-1 【Linux】 | サラリーマンがハッカーを真剣に目指す
今回のMakefileは、次の通り
IMG=haribote.img IPL=ipl.bin IASM=ipl.asm HD=asmhaed.bin HASM=asmhead.asm FASM=asmfunc.asm FOB=asmfunc.o BT=bootpack.c BHRB=bootpack.hrb LD=har.ld HSYS=haribote.sys MFONT=makefont.c #【今回追加】 OFONT=font.o #【今回追加】 FONT=font.c #【今回追加】 #--- 【今回追加始まり】フォントの作成 $(OFONT) : $(MFONT) gcc $(MFONT) -o $(OFONT) $(FONT) : $(OFONT) ./$(OFONT) #--- 【今回追加終わり】 #--- イメージファイルの作成 $(IPL) : $(IASM) nasm $(IASM) -o $(IPL) $(HD) : $(HASM) nasm $(HASM) -o $(HD) $(FOB) : $(FASM) nasm -g -f elf $(FASM) -o $(FOB) $(BHRB) : $(BT) $(LD) $(FOB) $(FONT) #【今回修正】 gcc -march=i486 -m32 -fno-pic -nostdlib -T $(LD) -g $(BT) $(FONT) $(FOB) -o $(BHRB) $(HSYS) : $(HD) $(BHRB) cat $(HD) $(BHRB) > $(HSYS) $(IMG) : $(IPL) $(HSYS) mformat -f 1440 -C -B $(IPL) -i $(IMG) :: mcopy $(HSYS) -i $(IMG) :: img : make $(IMG) dump : hexdump -C $(IMG) clean : rm -f *.lst *.bin *.sys *.img *.hrb *.o
3.harib02g
変数の内容を表示する。
変更箇所は下記の通り。
bootpack.c
変更前 | 変更後 | 説明 |
---|---|---|
#include<stdio.h> | 削除 | |
extern void orisprintf(char str, char fmt, ...); | 新たにorisprintfのソースファイルを作成したので、変数定義箇所に追記 |
orisprintf.c
sprintf
が使用できないため、代わりにorisprintf
関数を作成
下記サイトを参考、関数名は適当に変更
sprintfを実装する | OS自作入門 5日目-2 【Linux】 | サラリーマンがハッカーを真剣に目指す
Makefileは下記の通り
IMG=haribote.img IPL=ipl.bin IASM=ipl.asm HD=asmhaed.bin HASM=asmhead.asm FASM=asmfunc.asm FOB=asmfunc.o BT=bootpack.c BHRB=bootpack.hrb LD=har.ld HSYS=haribote.sys MFONT=makefont.c OFONT=font.o FONT=font.c CSPR=orisprintf.c #--- フォントの作成 $(OFONT) : $(MFONT) gcc $(MFONT) -o $(OFONT) $(FONT) : $(OFONT) ./$(OFONT) #--- イメージファイルの作成 $(IPL) : $(IASM) nasm $(IASM) -o $(IPL) $(HD) : $(HASM) nasm $(HASM) -o $(HD) $(FOB) : $(FASM) nasm -g -f elf $(FASM) -o $(FOB) $(BHRB) : $(BT) $(LD) $(FOB) $(FONT) $(CSPR) gcc -march=i486 -m32 -fno-pic -nostdlib -T $(LD) -g $(BT) $(FONT) $(FOB) $(CSPR) -o $(BHRB) $(HSYS) : $(HD) $(BHRB) cat $(HD) $(BHRB) > $(HSYS) $(IMG) : $(IPL) $(HSYS) mformat -f 1440 -C -B $(IPL) -i $(IMG) :: mcopy $(HSYS) -i $(IMG) :: img : make $(IMG) dump : hexdump -C $(IMG) clean : rm -f *.lst *.bin *.sys *.img *.hrb *.o $(OFONT) $(FONT) $(OSPR)
4.harib02h
関数の追加等があるが、特に躓くところはなく、今までの修正内容の通りで問題なし