OS自作入門 7日目/30日(バッファの実装とマウスの割り込み)
OS自作入門 7日目/30日(バッファの実装とマウスの割り込み)
1.はじめに
7日目では、キーボードとマウスの割り込みによって取得できるデータを画面に表示する。データを取得するにあたり、バッファの実装を行う。
7日目も特に躓くところはなし。
2.harib04a
キーボードの割り込みを検知し、16進数を表示する。
int.c
の修正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関数内で実施するように変更
int.c
の修正bootpack.c
の追記・修正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
バッファを実装
int.c
の修正bootpack.c
の追記・修正bootpack.h
の追記・修正
修正内容は下記の通り
No. | 対象ファイル | 修正内容 |
---|---|---|
1 | int.c | バッファへの書き込みの処理を追記 |
2 | bootpack.c | バッファからの読み出しの処理を追記 |
3 | bootpack.h | struct KEYBUF の要素を変更 |
5.harib04e
FIFOバッファの整理
マウスでもFIFOを利用できるように、書き直す。やる内容は下記の通り
fifo.c
の作成int.c
の修正bootpack.c
の追記・修正bootpack.h
の追記・修正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を利用できるように、書き直す。やる内容は下記の通り
int.c
の修正bootpack.c
の追記・修正
修正内容は下記の通り
No. | 対象ファイル | 修正内容 |
---|---|---|
1 | int.c | struct FIFO8 mousefifo; 構造体の宣言関数 void inthandler2c(int *esp) の変更 |
2 | bootpack.c | 変数mousefifo の追加関数 enable_mouse````init_keyboard の追加ほか |