OS自作入門 6日目/30日(割り込み処理)
OS自作入門 6日目/30日(割り込み処理)
1.はじめに
6日目では、bootpack.c
を機能ごとに分割する。また、キーボードの割り込みとマウスの割り込みを実装する。
※割り込みを検知するのみで、何が押されたのかは判断できない。
6日目も5日目と同様に、特に躓くところはなし。
2.使用したアセンブラの命令
NASKの命令(30日本著者作成のアセンブラ) NASMの命令(今回使用のフリーのアセンブラ) において違いなし
命令 | 名前 | 内容 |
---|---|---|
PUSHAD | push all double | EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDIの8つのレジスタをPUSHする |
POPAD | pop all double | EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDIの8つのレジスタへPOPする |
CALL | call | 関数を呼び出す |
IRETD | Interrupt return (32-bit operand size) | Returns program control from an exception or interrupt handler |
3.harib03a,b,c
機能毎にソースファイルの分割したり、Makefileに新しい記法を用いたり、ヘッダファイルの整理し不要な記述を省く。
特に躓くようなところはなし。
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 MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) #--- フォントの作成 $(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 $(FONT)
4.harib03d
PIC(programmable interrupt controller)の初期化するコードを実装する。
やること
int.c
の作成bootpack.h
へ追記Makefile
の修正
特に躓くところはなし。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 MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) $(OINT) #--- フォントの作成 $(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)
5.harib03e
キーボードとマウスの割り込みを有効化するコードを実装する。
やること
int.c
の追記asmfunc.asm
へ追記(30日本ではnaskfunc.nas
)dsctbl.c
の修正bootpack.h
へ追記bootpack.c
へ追記
特に躓くところはなし。30日本の追記・編集箇所と同じ個所を追記・編集する