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

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

14日目(少し13日目の続き、解像度等)

11日目に各ファイルに追記する箇所がわかりやすくなったと書いたが、嘘だった。
13日目あたりから、またかなりの修正が必要だった。
しかたないのでタイプミス(だと思われる)のエラーが起こったときはコピペした。

それと13日目の-enable-kvmをつけて動くようになった件、詳細が記載されているところがあったので参考にさせていただいた。
自分の環境では、

 $ sudo gpasswd kvm -a ユーザー名

と、しておいた。
これでMakefileのmake run時のsudoは不要になった。
少し速くなった気がしなくもない。

14日目の内容に入るが、harib11a〜cの内容は割愛した。
いろいろ試してみたが、現状のimgファイルでうまく実機から起動できなかったため。

harib11dで久々にasmhead.nasを編集。
修正内容は単純だが、make runすると黒い画面しか出てこない。
これについても、先ほど参照させていただいたブログの14日目に記載されていた。
「VRAMのベースアドレスが合っていない」とのことだが、これについてもまた自力で解読したい。
とりあえずの対策を自分の環境でも実行するため、asmhead.nasの26行目の変更を

 MOV DWORD [VRAM],0xfd000000

に書き換えた。
しかしこれもうまくいかない。
なので一度元に戻し、harib11eの修正を反映。これで高解像度になった。

これでキー入力に進む。またbootpack.cの編集、これは問題なく完了。
harib11gで@を押すとwが出ると本書にはあったが、自分の環境ではちゃんと@が表示された。

おまけの2章も続けて実行。修正はbootpack.cのみだが、おまけ1は修正箇所が多く、タイプミスに苦労した。

これもなんとか完了、無事実行できたので次に進める。
このペースだと、残念ながら年内完了は無理そうだ。

 


今回参照させて頂いたサイト:
https://wisteria0410ss.hatenablog.com/entry/2019/02/10/222931
https://wisteria0410ss.hatenablog.com/entry/2019/02/13/053201

13日目(タイマー追加と見直し)

タイマの話の前に、いつものプログラムの長さ見直し。

harib10aとbでbootpack.cのみ編集。
本書を見ながらでは全部修正できないので、CD-ROMのデータを参照。
最終的に204行になればOKだが、最初間違えて2,3箇所そのままでmake runしてしまった。
それでも普通に動いてしまうので、行数での確認は必要。

harib10cで、カウンタの数字が表示されない状態になった。
が、他の方のブログを参照し、Makefileの編集で動くようになった。
修正はmake runのみ。

img:
 make img
 sudo qemu-system-i386 -m 32 -fda haribote.img -enable-kvm

「-enable-kvm」のみを追加したところエラーになったので、sudoも追加。
ちょっと面倒になったが、qemuのバグ(?)回避のため。
これの理由を探してみたが、今のところ見つからない。

その後Harib10cはいじり直すので、いったん別フォルダにコピーして、コピーした方を使って性能測定した。(harib10d〜f)
環境が違い過ぎるので飛ばそうかと思ったが、勉強だと思い、一応作業した。
(ただし、実機ではチェックしていない)
ちなみに一番早かったのはharib10fだったような気がしたが、いつも結果が微妙に変わるので気にしないことにする。

※後で思ったのは、どうもsudoしないとmake runできないので、それがちょっと動作を遅くしている感じがする

harib10gでバックアップしておいたharib10cを使う。
修正箇所が多く、タイプミスが続出した。
本文で行ったり来たりして書き直すところがあり、途中で諦めて最終的なCD-ROMの内容と合わせることにした。
timerと番兵についての説明が丁寧だが自分にはかなり難しくついていけなかったが、とりあえずいつものようにとりあえず進めて、この後も何度も読み直すことにする。

ちなみにカウンタの動作は全然早くなっていない。 

 


 今回参照させて頂いたサイト:
https://blog.haramishio.xyz/entry/hariboteos

12日目(タイマー追加の1日目)

かなり間が空いたので、振り返りつつ進める。(これは別途ページ作成予定)
11日目以降から、各ファイルに追記する箇所がわかりやすくなってきた。
が、微妙に違う箇所もあるので油断は禁物。
一応CD-ROMの内容と比較して見るほうがいい。
それとUbuntu上でやっているので、それに合わせた修正をするのに多少注意が必要。

今回からtimer.cが増える。Makefileに忘れずに追記。
本書に記載されている以外に、bootpack.hにもinthandler20関連の追記を忘れないように。 よくやるので。(今回も忘れてエラーを出した)
あと、IRQの説明で不明な点はoswikiで確認。

harib09bでbootpack.hの追記、本書に書かれている

 /* timer.c */
 struct TIMERCTL {
  unsigned int count;
 };

だけでなく、次の行に

extern struct TIMERCTL timerctl;

も必要。
これに気づかず、かなり時間を食った。
やはり元のファイルを見ながらの確認も必要。

harib09dのbootpack.hも同じく。
本書に記載されていること以外にも追加されてるので、これにも引っかかった。
それ以降は変数名の変更を間違えなければ大丈夫そう。

余談だが、「時刻調節プログラム」はよくわからないので飛ばした。

結局今回編集したのはbootpack.c bootpack.h timer.cのみだが、タイプミスにかなり苦しんだ。
それとここに来て、Visual Studio Codeの良さがわかってきた。
Windowsでやり直すことがあったら引き続き使っていこうと思う。

 


今回参照させて頂いたサイト:
http://oswiki.osask.jp/?cmd=read&page=%28PIT%298254&word=irq0