非情報系インフラエンジニアの情報系お勉強

OS自作、ネットワーク、セキュリティの備忘録

OS自作入門 10日目/30日(重ね合わせ処理)

OS自作入門 10日目/30日(重ね合わせ処理)

1.はじめに

10日目では、重ね合わせ処理を行う。

特に躓くところはないが、追加するコード量が多いため、タイプミスには気を付けたい。

2.harib07a

メモリ管理部分のソースファイルを整理する。

  1. memory.cの作成
  2. 上記作成に伴うbootpack.hの修正
  3. 同上に伴うbootpack.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

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は下記の通り

  1. 再描画時に画面すべてを書き換える(harib007b)
  2. 文字とマウス箇所のみ書き換えるが、if文を全画面範囲で実行してしまう(harib007c)
  3. 再描画必要箇所のみ書き換える(harib007d)

harib07aからの修正内容は下記の通り

  1. sheet.cの作成
  2. bootpack.cの修正
  3. bootpack.hの追記
  4. 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)