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

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

18日目(前日の修正、カーソル、コマンド)

また間が空いたので、17日目を読み返しながら編集。

現時点でbootpack.cのワーニングがいくつか出ていて、動作しつつも気になっていた。
一応起動はできてるが、確認したところやはりbootpack.hの修正ができてなかった。
また、ちょっとしたタイプミスでよけいなワーニングが出ていた。
他にも気になるワーニングがあるが(例のsprintf)、明らかなタイプミス以外は保留して続ける。

harib15a、harib15b、harib15c、harib15d、harib15eまではだいたい前にやったことの繰り返しと言うか、おさらい的な話になる。
特に関数なども増えないので、ここまではbootpack.cのみの編集。
それでもあいかわらずタイプミスや、console_taskで「int x,y;」を忘れただけでかなり悩んだ。
とにかく自分には大変だったので、ここのプログラムもちゃんと読めるように改めて復習したい。

harib15fのclsコマンドで使用するstrcmpという関数は、sprintf同様この環境では使えなかった。
検索したところ、以前から参照させていただいているブログにコードが書かれていたので、それをそのままbootpack.c内に追記した。
(別ファイルにするとまたMakefileがめんどくさいので)

それにharib15gも大変だった。
何がというと、情報量。ここしばらくbootpack.cの編集のみで楽をしていたため、頭の中を戻すのに苦労した。
本書に書かれている通り、いったん3日目に戻って読み直しをした。
(あまり思い出せなかったが…)

3日目にシリンダから読み込んで保存した内容を、今になって表示できるように引っ張り出した、ということで良いだろうか。

それと久々にバイナリデータを確認。1日目以来だと思う。
一応make imgして現在のimgファイルを作り、
 ghex haribote.img
でGhexを起動、2600あたりを確認。
HARIBOTE.SYSについては本書のようになっているはず。ipl10.nasなどを追加してなければ他は違うが、とにかくアドレスは同じはず。

あとは、自分の環境はlinuxなので、dirコマンドはlsに修正した。
それとメモリの数字の表示を%dにすること。
環境の違いはともかくできるだけ本書に沿った方法で作業しているが、この程度の変更なら問題なく先に進められると思う。

 


今回参照させて頂いたサイト:
https://wisteria0410ss.hatenablog.com/entry/2019/02/21/151455
http://bttb.s1.valueserver.jp/wordpress/blog/2018/02/12/makeos-18/

17日目(キーボードからの入力)

今回はやっていることが過去のおさらいのような感じで、比較的わかりやすい。
しかしC言語はあいかわらずよくわかってないので、やったことと引っかかったことを書いておく。

今回でカウンタを消去、さらにtask_bにさよならして、console_taskに書き換え。
harib14bでwin_bなどをconsにするのに気づかず、かなりエラーを出した。
ほぼbootpack.cの編集ばかりだが、書き換えたり書き加えたりするところがかなり長くなってるので、タイプミスが辛い。

ちなみにbarib14dで8以外の数字でもいいというので、試しに16にしてみたりしたが、特に大きな変化がなかったので戻した。
(余計なところまで変えてしまって、task_aの入力が一文字置きになったりもしたが、コンソールのほうはそのままだった。理由不明)

harib14fのCaps Lockは、自分のPCでは効かなかった。普通にシフトキーで大文字が出るだけ。
ちなみにコラムにあるような、左右のシフトキーに差は出なかった。
とりあえず先に進めて、harib14gでは正しく動いた。LEDのランプも実機でなくても普通に点灯する。

キーボードのハード的な部分との絡みが出てきて、やっていて楽しい。
が、ウィンドウや文字コードの変換のところの入力はきつかった。
タイプミスのエラーを潰していくのは時間の無駄なので、だめだったら素直にコピペするほうが良さそうだ。

別件だが、QEMUで実行する際の解像度は上げたままなので、それに比較するとコンソールに限らず各窓がかなり小さい。
ここでいろんな人がサイズをカスタムすることが多い理由がよくわかった。
この章は内容が自分でもわかりやすかったのでいじってみたくなるが、あまり差異を増やすとちょっとのことでもわからなくなるので、このまま本書通りに続ける。

16日目(マルチタスクの続き)

mtask.cの大改造。
(bootpack.cもウィンドウが増えるところが大改造)

haribot13aはbootpack.hの/* mtask.c */(構造体を追加)以下を修正。
本書には記載がないが、CD-ROMのデータだとその後、
 extern struct TIMER *mt_timer;
 void mt_init(void);
 void mt_taskswitch(void);

 extern struct TIMER *task_timer;
 struct TASK *task_init(struct MEMMAN *memman);
 struct TASK *task_alloc(void);
 void task_run(struct TASK *task);
 void task_switch(void);
にしている。
mt_timerをtask_timerに置き換えたためだが、自分にはそこまで読み取れなかった。

void HariMain(void)の前も追記に注意。
 void task_b_main(struct SHEET *sht_back);
と、struct TSS32の項目と、次の
 void task_b_main(struct SHEET *sht_back);
を削除。
timer.cも修正が必要なのを忘れない。具体的な修正が本書に記載されてないので、エラーで気づいた。
mt_timerをtask_timer、mt_taskswichをtask_swichにする。

最初で苦労したら、harib13b以降は問題ないと思う。
だいたい記載されている通りになっている。
bootpack.cとbootpack.hの改造はセットでチェックが必要なのはいつもの通り。
あとはタイプミスとの戦い。
ウィンドウを増やすところは自分のポカミスが多くてもう無理だったので、最後はコピペに頼った。
それとtimer3など、消す必要があるところと、環境によってはカウンタ表示を%dにするのを忘れずに。

改造した後はカウントが目に見えて早くなっているのがわかる。
数え続けてしまうときは数字を通り越して記号になるしスピードも早すぎるので、正確に数字は書けない。
(一時的に止めるように改造できればいいんだけど、自分には無理)

最近のPCを使っていると処理が早すぎるので、おそらくスピードの測定はあまり意味がないんじゃないかと思う。
ここまで来ると、自分の環境ではマウスでウィンドウを動かしてもストレスがない。
進めていく上で必要な場合のみ、対応していくことにする。