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

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

OS自作入門 12日目/30日(タイマー)

OS自作入門 12日目/30日(タイマー)

1.はじめに

12日目では、タイマーを実装する。

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

2.harib09a,b

タイマーを実装して、ウィンドウ内に表示

  1. timer.cの追加
  2. 上記用にbootpack.cの修正
  3. 同上の理由でbootpack.hの修正
  4. 上記作成に伴うdsctbl.cを修正
  5. 上記作成に伴うasmfunc.asmを修正
  6. 上記作成に伴うMakefileを修正
No. 対象ファイル 修正内容
1 timer.c timer.cを作成
2 bootpack.c init_pit();や、io_out8(PIC0_IMR, 0xf8);を追記
3 bootpack.h void asm_inthandler20(void);timer.cに必要な記述を追加
4 dsctbl.c timerのイベントハンドラIDTに登録するための命令を追記
5 asmfunc.asm 関数asm_inthandler20, inthandler20の実装
6 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
OTIMER=timer.o

MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) $(OINT) $(OFIFO) $(OKEY) $(OMOUSE) $(OMEM) $(OSHEET) $(OTIMER)

#--- フォントの作成
$(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.harib09c,e,f,g

タイムアウト機能の実装、複数のタイマーの設定、割り込み処理の高速化をまとめて実施

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

  1. timer.cの修正
  2. bootpack.cの修正
  3. 同上の理由でbootpack.hの修正
No. 対象ファイル 修正内容
1 timer.c 新たに関数を作成したり、処理の書き換え
2 bootpack.c 複数のタイマーを追記したり、FIFOの内容を新規に追加
3 bootpack.h timer.c用の宣言等を追加