OS自作入門 12日目/30日(タイマー)
OS自作入門 12日目/30日(タイマー)
1.はじめに
12日目では、タイマーを実装する。
特に躓くところはないが、追加するコード量が多いため、タイプミスには気を付けたい。
2.harib09a,b
タイマーを実装して、ウィンドウ内に表示
timer.c
の追加- 上記用に
bootpack.c
の修正 - 同上の理由で
bootpack.h
の修正 - 上記作成に伴う
dsctbl.c
を修正 - 上記作成に伴う
asmfunc.asm
を修正 - 上記作成に伴う
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からの修正内容は下記の通り
timer.c
の修正bootpack.c
の修正- 同上の理由で
bootpack.h
の修正
No. | 対象ファイル | 修正内容 |
---|---|---|
1 | timer.c | 新たに関数を作成したり、処理の書き換え |
2 | bootpack.c | 複数のタイマーを追記したり、FIFOの内容を新規に追加 |
3 | bootpack.h | timer.c 用の宣言等を追加 |