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

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

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)の初期化するコードを実装する。

やること

  1. int.cの作成
  2. bootpack.hへ追記
  3. 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

キーボードとマウスの割り込みを有効化するコードを実装する。

やること

  1. int.cの追記
  2. asmfunc.asmへ追記(30日本ではnaskfunc.nas
  3. dsctbl.cの修正
  4. bootpack.hへ追記
  5. bootpack.cへ追記

特に躓くところはなし。30日本の追記・編集箇所と同じ個所を追記・編集する