OS自作入門 10日目/30日(重ね合わせ処理)
OS自作入門 10日目/30日(重ね合わせ処理)
1.はじめに
10日目では、重ね合わせ処理を行う。
特に躓くところはないが、追加するコード量が多いため、タイプミスには気を付けたい。
2.harib07a
メモリ管理部分のソースファイルを整理する。
memory.c
の作成- 上記作成に伴う
bootpack.h
の修正 - 同上に伴う
bootpack.c
の修正 - ソースファイルの整理に伴い
Makefile
を修正
# --- オプション CFLAGS = -c -m32 -march=i486 -fno-pic -nostdlib # --- ファイル名 IMG=haribote.img IPL=ipl.bin HD=asmhead.bin FASM=asmfunc.asm FOB=asmfunc.o BT=bootpack.c BHRB=bootpack.hrb LD=har.ld HSYS=haribote.sys MFONT=makefont.c OFONT=makefont.o FONT=font.c CSPR=orisprintf.c OTBL=dsctbl.o OGRA=graphic.o OINT=int.o OFIFO=fifo.o OKEY=keyboard.o OMOUSE=mouse.o OMEM=memory.o MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) $(OINT) $(OFIFO) $(OKEY) $(OMOUSE) $(OMEM) #--- フォントの作成 $(OFONT) : $(MFONT) gcc $(MFONT) -o $(OFONT) $(FONT) : $(OFONT) ./$(OFONT) #--- イメージファイルの作成 $(FOB) : $(FASM) nasm -g -f elf $(FASM) -o $(FOB) $(BHRB) : $(LD) $(MAKEBHRB) gcc -march=i486 -m32 -fno-pic -nostdlib -T $(LD) -g $(MAKEBHRB) -o $(BHRB) $(HSYS) : $(HD) $(BHRB) cat $(HD) $(BHRB) > $(HSYS) $(IMG) : $(IPL) $(HSYS) mformat -f 1440 -C -B $(IPL) -i $(IMG) :: mcopy $(HSYS) -i $(IMG) :: # 一般規則 %.bin : %.asm nasm $*.asm -o $*.bin %.o : %.c gcc $*.c $(CFLAGS) -o $*.o # コマンド img : make $(IMG) dump : hexdump -C $(IMG) clean : rm -f *.lst *.bin *.sys *.img *.hrb *.o $(OFONT) $(FONT) $(OSPR)
3.harib07b,c,d
重ね合わせ処理の実装を行う。STEPは下記の通り
- 再描画時に画面すべてを書き換える(harib007b)
- 文字とマウス箇所のみ書き換えるが、if文を全画面範囲で実行してしまう(harib007c)
- 再描画必要箇所のみ書き換える(harib007d)
harib07aからの修正内容は下記の通り
sheet.c
の作成bootpack.c
の修正bootpack.h
の追記Makefile
の修正
No. | 対象ファイル | 修正内容 |
---|---|---|
1 | asmfunc.asm | 関数load_cr0, store_cr0, memtest_sub の実装 |
2 | bootpack.c | sheet.c に関する修正ほか |
3 | bootpack.h | sheet.c に関する情報を追記 |
4 | Makefile | 修正内容は下記の通り |
# --- オプション CFLAGS = -c -m32 -march=i486 -fno-pic -nostdlib # --- ファイル名 IMG=haribote.img IPL=ipl.bin HD=asmhead.bin FASM=asmfunc.asm FOB=asmfunc.o BT=bootpack.c BHRB=bootpack.hrb LD=har.ld HSYS=haribote.sys MFONT=makefont.c OFONT=makefont.o FONT=font.c CSPR=orisprintf.c OTBL=dsctbl.o OGRA=graphic.o OINT=int.o OFIFO=fifo.o OKEY=keyboard.o OMOUSE=mouse.o OMEM=memory.o OSHEET=sheet.o MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) $(OINT) $(OFIFO) $(OKEY) $(OMOUSE) $(OMEM) $(OSHEET) #--- フォントの作成 $(OFONT) : $(MFONT) gcc $(MFONT) -o $(OFONT) $(FONT) : $(OFONT) ./$(OFONT) #--- イメージファイルの作成 $(FOB) : $(FASM) nasm -g -f elf $(FASM) -o $(FOB) $(BHRB) : $(LD) $(MAKEBHRB) gcc -march=i486 -m32 -fno-pic -nostdlib -T $(LD) -g $(MAKEBHRB) -o $(BHRB) $(HSYS) : $(HD) $(BHRB) cat $(HD) $(BHRB) > $(HSYS) $(IMG) : $(IPL) $(HSYS) mformat -f 1440 -C -B $(IPL) -i $(IMG) :: mcopy $(HSYS) -i $(IMG) :: # 一般規則 %.bin : %.asm nasm $*.asm -o $*.bin %.o : %.c gcc $*.c $(CFLAGS) -o $*.o # コマンド img : make $(IMG) dump : hexdump -C $(IMG) clean : rm -f *.lst *.bin *.sys *.img *.hrb *.o $(OFONT) $(FONT) $(OSPR)