* [[guide]]の子ページ -(by [[K]], 2009.08.07) *** (1) 備考 -本文どおりにするだけで問題なくCD-ROM内のものと同じにできるものについては、書いてません。以下にあるのはそれだけではすまない要注意リストです。 -[補足]とあるものは、CD-ROM内を確認するほどではないものの、参考になるかもしれないメモです。 -このあたりから[補足]説明程度で何とかなるようになってきています。 *** 07日目 (harib04?) -''harib04a/'' --bootpack.h ---[補足] /* naskfunc.nas */ のところにプロトタイプ宣言 int io_in8(int port); を書き足している(int.cで使うようになったので。それまでは書き忘れていたけど使わなかったので問題なかった)。 --int.c ---[補足] 本文中の記述で変更点は明らかにされているが、 sprintf() 利用の関係で #include <stdio.h> が必要になるのに、そのことだけが書いてない。適当に書き足しておいてほしい。 ---[補足] ちなみに sprintf() のために #include <stdio.h> が必要になるという説明はp.107にある。 --Makefile ---[補足] 本文中で全く説明が無いが、「%.gas : %.c Makefile」と書いていた部分を「%.gas : %.c bootpack.h Makefile」に直している。 %.gas を生成するに当たっては %.c と Makefile だけではなく bootpack.h も利用しているのだから、この変更はしたほうがいい。というか、今までやり忘れていたことのほうが問題。理想的には harib03c でやっておくべきだったと思う。 -''harib04b/'' --bootpack.h ---[補足] struct KEYBUF { ... }; は、本文中では int.c に書いているように見えるが、int.c ではなくてこっちに書く。 ---[補足] /* naskfunc.nas */ のところにプロトタイプ宣言 void io_stihlt(void); を書き足している(それまでは書き忘れていたけど使わなかったので問題なかった)。 --bootpack.c ---[補足] 本文中に明示されている変更の他に、 extern struct KEYBUF keybuf; を書き加える。どこに書けばいいのかというと、 keybuf 変数を使う前ならどこでも大丈夫。 --int.c ---[補足] struct KEYBUF { ... }; の部分は本文どおりの int.c へではなく bootpack.h に書く。 -''harib04c/'' --bootpack.h ---[補足] struct KEYBUF { ... }; は、本文中では int.c に書いているように見えるが、やはりint.c ではなくてこっちに書く。 --bootpack.c ---[補足] 本文中に明示されている変更の他に、 HariMain() に次の修正をする。自明なので本文では省略してしまった。「int mx, my, i;」→「int mx, my, i, j;」 --int.c ---[補足] struct KEYBUF { ... }; の部分は本文どおりの int.c へではなく、やはり bootpack.h に書く。 -''harib04d/'' --bootpack.c ---[補足] 本文中に明示されている変更の他に、 HariMain() に次の修正をする。自明なので本文では省略してしまった。この修正を忘れても未使用の変数があるという警告が出るだけで害はない。「int mx, my, i, j;」→「int mx, my, i;」 -''harib04e/'' --bootpack.h ---[補足] 本文中の struct FIFO8 { ... }; とfifo.c内の関数(計4つ)のプロタイプ宣言を追加。 struct KEYBUF { ... }; の記述は削除。 --bootpack.c ---[補足] 追加内容は基本的に本文どおりなのだが、 fifo8_init(&keyfifo, 32, keybuf); の挿入位置が分かりにくい。処理内容からして、キーボードからの割り込みを受け付ける前に行う。さらに本文中では extern struct FIFO8 keyfifo; の追加についての説明が省略されているので、これを忘れずに追加。 --fifo.c (新規作成) ---[補足] #include "bootpack.h" を忘れずに入れる。関数は本文中の4つをそのまま全部書けばいい。 --int.c ---[補足] struct KEYBUF keybuf; は使わなくなったので削除(というか、本文中に記述されている struct FIFO8 keyfifo; と入れ替え)。 --Makefile ---[補足] もはや言うまでもないかもしれないが、 OBJS_BOOTPACK = に fifo.obj を追加。 -''harib04f/'' --bootpack.c ---[補足] この回で更新されたのはこのファイルだけである。主要な変更箇所は本文中に全て出ているが、 HariMain() 内で、どのタイミングでキーボードやマウスの初期化・有効化をすべきかを迷うかもしれない。 init_keyboard(); はIDTとPICへの設定が全て終わった段階で呼び出すのがいいと思う。また enable_mouse(); は基本的には init_keyboard(); の後であればいつでもいいのだが、CD-ROM内ではfor文に入る直前にやっている。言うまでもないが、for文の中に入れるのはよくない。enableは何度も繰り返してするべき性質の処理ではないからである。 -''harib04g/'' --bootpack.c ---[補足] 「extern struct FIFO8 keyfifo;」→「extern struct FIFO8 keyfifo, mousefifo;」の記述が本文中では省略されている。 ---[補足] HariMain()内の「char s[40], mcursor[256], keybuf[32];」→「char s[40], mcursor[256], keybuf[32], mousebuf[128];」の記述が本文中では省略されている。 ---[補足] 本文中に書かれているHariMain()内の「fifo8_init(&mousefifo, 128, mousebuf);」は「fifo8_init(&keyfifo, 32, keybuf);」の直後に追加。 * こめんと欄 #comment