ねこめもmkII(マークツー)

本家ねこめも (http://nekomemo2.site)の補助用。 主に勉強ネタ。

11日目(おまけ)

11日目の前半、どうしても気になったので、参考になるサイトがないか探しまくった。
結局、探し方を変えて「SHTCTL」で検索すると意外と出てきた。

図も合わせて丁寧に解説されていて、とてもわかりやすくて助かったのは以下のブログ。

OS学習メモ10(30日OS自作入門10日目) - JD(情報系大学生)雑記
OS学習メモ11(30日OS自作入門11日) - JD(情報系大学生)雑記

もちろん本書を読んでいること前提で、最初から追ってないと内容は理解できない。

でも初心者でもわかりやすくて目が滑らないので、30日本の記事を最初からじっくり読ませていただいた。

このブログでは自分がやったことだけをメインに書いていたが、こういうふうにまとめておくと他の人のためになるということをしみじみ実感。
しかし今さら書き換えるのも大変なので、この本の勉強についてはこのまま進めて、別の勉強のときに第三者にも分かりやすくまとめる方法を考えたいと思う。

ついでに、意外にもYahoo知恵袋でピンポイントな回答を見つけた。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202204478

初心者に引っ掛かりやすいところは同じなんだなと思うと同時に、コードをそのまま載せて回答を得るというのもありなのかと驚いた。
しかもちゃんと答えてくれる人がいるのがすごい。
独学でやっているとたまに誰かに相談したいと思うときがあるので、知恵袋でなくてもどこかのフォーラムで聞くことができるといいなと思う。

11日目(カウンタの作成、修正)

今回はbootpack.cとsheet.cの微妙な修正が多く、できるだけ手書きで進めていたが、途中でタイプミスのエラーが多くなったため、コピペに変更。
いつもよりは内容は難しく無いので、問題ないと思われる。

しかしカウンタウィンドウの追加以外は大きな変更がないので、変更点が解りづらい。
カウンタを表示させることは難しくはないものの(しかしC言語の解読はあいかわらずできてない)、harib08cの「shtctlの省略」がむしろ難しかった。
ここはまた読み直さないとわからない。

カウンタのちらつきは、自分の環境ではちらつきというレベルではなく、完全に文字が消えるぐらいひどかった。
さらにharib08gでは、ウィンドウにマウスが重なると動かなくなった。
ここでカウンタが10dと表示されたまま動いてないことに気付く。

カウンタの表記のところを、
 sprintf(s, "%d", count);
としてみたら、動くようになった。
ただし、桁数は変動する。(数字の前に0がつかない)
いつもの数字表示の修正だが、なぜマウスまで動かなくなっていたのか不明。

最後にbootpack.hとbootpack.c、それとsheet.cをまた修正。
ちらつきを完全に修正して完了。

harib08hの内容は、考え方はわかりやすいがやはりプログラム自体がわかりにくい。
これについて(自分の低いレベルでもわかるように)詳細を説明しているサイトが見つからなかったので、またいずれ読み直して勉強ことにして次に進める。

10日目(.cファイル増殖)

先日のメモリ表示は、makeコマンドで「-m 32」のオプションを付ければ32MBになることがわかった。
ここでは表示だけの問題で特に動作に影響はなさそうだが、念のため付けるようにする。

Makefileの該当箇所は以下。

 run : make img

  qemu-system-i386 -m 32 -fda haribote.img

これでmake runすると、ウィンドウ内に表示される文字が「memory 32MB free : 29304kB」になる。

前回の続きで、bootpack.cからメモリ管理のmemory.cが分離。
次のharib07bでさらにsheet.cが増える。.cファイルが増殖していく。
Makefileでは最初はgccコマンドで.cファイルを並べていたが、今はldコマンドで一つのオブジェクトファイル(.o)にしている。
このほうが楽かと思ったが、あまり変わらない気がする。
(そろそろ一度見直したい)

後半の高速化の項目だが、harib07bの時点でも自分の環境では、本書に書かれているほどにはマウスの動きは鈍くなかった。 
でも一応高速化の手順を踏んで、bootpack.cを書き換える。

その途中、

 error: too many arguments to function ‘sheet_refresh’

というエラーが出たが、bootpack.h内のsheet_refreshの定義が変わっていたせいだった。
bootpack.cを書き換えたら、bootpack.hを見直すのは必要。

内容は、いくら読んでも「重ね合わせ」というものがなかなか理解できずあちこちのサイトを巡ったが、わかりやすかったのは結局いつも参照させていただいているところに落ち着いた。
プログラム自体も、構造体の中の構造体、という複雑さにそろそろ理解が追いつかない。
でもわかったことにしておいて、次に進む。

 


 今回参照させて頂いたサイト:
https://wisteria0410ss.hatenablog.com/entry/2019/02/08/163712
http://bttb.s1.valueserver.jp/wordpress/blog/2018/01/12/makeos-10/
https://qiita.com/Aquan_Investor/items/1e589ceb1f9b6c1eaab5