忍者ブログ

Cyber Bird

   
カテゴリー「x86 OS自作入門」の記事一覧

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

OS自作入門 onLinux 14日目

400f8a5d.png

お久しぶりです。

OS14日目、無事できました。
今回は「中間地点の後処理」といった感じでしょうか。
具体的には
・解像度UP
・キー入力対応

の2つですね。

解像度が大きくなるだけでもOS感がグッとアップ。うーん、感慨深い。
しかし、ここまでたどり着くまでにいくつか山を越えねばなりませんでした。

ソースを貼り忘れていましたw
こちらです。

PR

OS自作入門 onLinux 13日目

d963b7bb.png

毎度恒例、OS自作入門。
本当はGWまでに14日目までを終わらせようと思ったのに、
思った以上にGWの勉強がハードだったため、ほとんどPCに触れずじまい。
こんな今日も模試前日だけどね!
ソースコードはこちら



今回は、基本的にタイマの改良。
タイマの管理に線形リストを導入。
あと、番兵は初めて知った。単純な発想だけど、ポンとソースを見せられたら
コメントがないとわからないだろうな。

あとは、ベンチマークプログラムの作成&実行。
これも単純な発想かな。実用されているベンチマークも
こんな感じの仕組みなんだろうか。

見た目的に何も変わっていないのが寂しい。
見た目がパーっと変わったほうが達成感があるよね!←子供

勉強に戻る…

OS自作入門 onLinux 12日目

2d946823.png

OS12日目、できました。
ソースはこちら

今回は、「タイマ」を導入しています。
本来、パソコンには人間が想像するような時計は内蔵されていません。
それでは、時間を知ることができず、いろいろな支障が出てしまいます。

そこで、CPUの割り込み機能を利用して、「一定間隔で割り込みを起こしてカウントすれば
時計になるんじゃね?」と考えてできたのが、タイマというわけです。
【参考】OS-Wiki: (PIT)8254

そして、タイマを使うためには、割り込みでPIC(=Programmable Interrupt Controller)を設定したように
PIT(=Programmable Interrupt Timer)を設定することで使うことができるようになります。
ちなみに豆知識ですが、Intelの場合

PIC … Intel 8259
PIT … Intel 8254

というチップセットが使われていることがほとんどだと思います。
「8259」「8254」という番号は品名です。



PITをうまく設定すれば、あとはタイマがIRQ-0から割り込んでくれます。
それを拾ってあげればめでたしめでたし、時間を測ることができるようになるというわけです。

カーソルが点滅しているのを見ると、結構感動しますよねー。

OS自作入門 onLinux 11日目

429cb260.png

11日目が終わった。

ここまででしみじみと感じるのだが、やはり本を目で追うだけでなく、
たとえ理解できなくてもソースコードを手打ちするのは大いに意義がある。

人間には、タイプミスの一つや二つは余裕で紛れ込んでしまう。
そのために誘発されたバグの原因を探るため、自ずからソースコードを
努力して理解するものだ。

Twitterをご覧になっていた方は目にしたのではないかと思う。

これ、背景の下の方にウィンドウが少し表示されているので、おそらく
背景用バッファbuf_backの領域にウィンドウ用バッファbuf_winが重複してしまった
ために上書きされているのではないかと思って原因を探っていたところ…

dword mem_alloc_4k(MEMORY_MANAGE *man, dword size) {
	dword a;
	size = (size + 0xff) & 0xfffff000;
	a = mem_alloc(man, size);
	return a;
}
memory.cの135行目、本来ならば「size = (size + 0xfff) & 0xfffff000;」となるはずなのだが…

これではsizeの(16進数において)下から3桁目が強制的に切り捨てられる。
よって、メモリを確保したつもりなのに、実は領域が少し足りていなかった状態になってしまう。

そして、mem_alloc関数の仕組みとOS起動後のメモリの開放の仕方によって、
最初に確保したbuf_backの次に確保されるbuf_winには、
buf_backの最後尾アドレスからのメモリが当てられる。
そのため、メモリ領域が重複してしまっていたのだ。

動作しなければ原因を意地でも特定する。特定できたら、なぜそれでは動作しないかを考える。
こうすることでコードを読む力もコーディング力も上昇するのではないかと思う。

OS自作入門 onLinux 10日目



10日目が終わりましたー。
今回は、重ね合わせ処理の日です。マウスがタスクバーに重なってます。

マウスがチラチラするのは11日目で解決するっぽいです。
たぶん、ダブルバッファリングとかやるのかな?まだ読んでないからわからないけど。

今回のソースコードはこちら

ブログ内検索

プロフィール

HN:
levelfour
性別:
男性
自己紹介:
ぼちぼち更新を再開する予定です。

twitter

最新コメント

[09/27 菜々氏]
[06/17 NONAME]
[04/30 mithril]
[04/29 Liva]
[01/30 NONAME]

最新トラックバック

コガネモチ

Copyright ©  -- Cyber Bird --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]