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

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

OS自作入門 7日目/30日(バッファの実装とマウスの割り込み)

OS自作入門 7日目/30日(バッファの実装とマウスの割り込み)

1.はじめに

7日目では、キーボードとマウスの割り込みによって取得できるデータを画面に表示する。データを取得するにあたり、バッファの実装を行う。

7日目も特に躓くところはなし。

2.harib04a

キーボードの割り込みを検知し、16進数を表示する。

  1. int.cの修正
  2. bootpack.hの追記・修正

修正内容は下記の通り

No. 対象ファイル 修正内容
1 int.c void inthandler21(int *esp) 関数の修正
#define PORT_KEYDAT 0x0060 の追記
自作関数のsprintf(s, "%02X", data);sprintf(s, "%x", data);へ変更
2 bootpack.h int io_in8(int port); 関数宣言の追記

3.harib04b

harib04aの文字表示を割り込み処理関数ではなく、Main関数内で実施するように変更

  1. int.cの修正
  2. bootpack.cの追記・修正
  3. bootpack.hの追記・修正

修正内容は下記の通り

No. 対象ファイル 修正内容
1 int.c #define PORT_KEYDAT 0x0060の追記
struct KEYBUF keybuf;の追記
void inthandler21(int *esp)関数の修正
2 bootpack.c extern struct KEYBUF keybuf;関数の宣言
for分の追加
3 bootpack.h void io_stihlt(void); 関数宣言の追記
struct KEYBUF構造体の宣言

4.harib04c,d

バッファを実装

  1. int.cの修正
  2. bootpack.cの追記・修正
  3. bootpack.hの追記・修正

修正内容は下記の通り

No. 対象ファイル 修正内容
1 int.c バッファへの書き込みの処理を追記
2 bootpack.c バッファからの読み出しの処理を追記
3 bootpack.h struct KEYBUF の要素を変更

5.harib04e

FIFOバッファの整理

マウスでもFIFOを利用できるように、書き直す。やる内容は下記の通り

  1. fifo.cの作成
  2. int.cの修正
  3. bootpack.cの追記・修正
  4. bootpack.hの追記・修正
  5. Makefileの修正

修正内容は下記の通り

No. 対象ファイル 修正内容
1 fifo.c 新規作成
2 int.c struct FIFO8 keyfifo;へ構造体名を変更
void inthandler21(int *esp)の関数の変更
3 bootpack.c extern struct FIFO8 keyfifo;へ修正
配列keybuf[32] の追加
fifo8_init(&keyfifo, 32, keybuf);の追加
for分の修正
4 bootpack.h struct FIFO8の追加
struct KEYBUF の削除
5 Makefile fifo.cを含めてコンパイルを実行するように変更

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

MAKEBHRB=$(BT) $(FOB) $(FONT) $(CSPR) $(OTBL) $(OGRA) $(OINT) $(OFIFO)

#--- フォントの作成
$(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)

6.harib04f,g

マウスでもFIFOを利用できるように、書き直す。やる内容は下記の通り

  1. int.cの修正
  2. bootpack.cの追記・修正

修正内容は下記の通り

No. 対象ファイル 修正内容
1 int.c struct FIFO8 mousefifo;構造体の宣言
関数void inthandler2c(int *esp)の変更
2 bootpack.c 変数mousefifoの追加
関数enable_mouse````init_keyboard の追加ほか