ブログパーツ Twitter

« 花と自転車と、そして... | トップページ | おうた♪たっぷり プリモプエル »

2006.04.27

30日でOSを作る本・続報2

暇を見つけては、こつこつ作っていた「OS」ですが、こんなになりました。

自作OSの画面
(画像は縮小しています。実サイズ640×480。)

OS(Haribote OS)を30日で作ってしまうという、「OS自作入門」購入から、1ヶ月以上が過ぎましたが、

前回掲載した、「自称オリジナルデザイン」に比べて、結構変わりました。
(前回の掲載分はこちら。)

見た目で一番変わったのは、タブを使用して、タスクバーとMac OS風のトップメニューとを融合させた、

タスクメニュー(仮)

でしょうか。
(実際に動作する部分は、左端の音符メニューだけで、あとは文字通り「はりぼて」ですが...)

Windowのデザインも、最大化・最小化ボタンが付きましたが、動作するのは変わらず「閉じる」ボタンだけです(笑)。
(ボタンのデザインは変更する予定-Vista風になるかも!?。)

デスクトップの背景色も、前回までの「まんまWindows」から、変わった点です。

やっぱり「次の段階」をめざすには、この色ですよね!
(「次の段階」を英語で言うと、「NeXTST○○」??)


でも一番変わったのは「作り方」で、

前回までは、本での進行に合わせて日ごとに用意されているソースから修正していましたが、

ある時点で修正した内容を、それ以降の日用のソースに反映させるのが面倒になってきたので、

最終日用のソースから修正する方法に変更しました。

これで心おきなくソースの破壊...じゃなく、「変更」が行えます。


また、ソース管理のために、Visual C++ 2005 Express Editionを導入しました。

実行形式を作ることには使えませんが、変数名の一括変換や、構造体のメンバ候補の表示など、

エディタで作っていたときより、大きく効率がアップしたと思います。

結論:ハングアップや、メモリー内容の破壊を繰り返していることは、ナイショ

※「続報3」はこちら

« 花と自転車と、そして... | トップページ | おうた♪たっぷり プリモプエル »

コメント

すごいOSですね!
http://cloverpage.aikotoba.jp
に来てください。
私もOSを作っているのでプロジェクトに参加してみませんか?
メニューからいけると思うので・・・。
今欲しいものは、プロジェクトページにあります。
ぜひ、あなたのOSの時計、ウィンドウ切り替えシステムを使ってみたいです。

コメントありがとうございます。
見た目は「結構いっている」かもしれませんが、内部はまだまだHaribote OSそのままで、とても皆様方にお見せできるようなものではありません。
ひまを何とか見つけて、少しずついじっているので、「完成」と呼べるようになるのはいつのことやら...

僕のOSよりず~~~~~~~~~~っとましですよ。
どうやったら、時計やウィンドウ切り替えができるか教えてもらえませんか?

> どうやったら、時計やウィンドウ切り替えができるか教えてもらえませんか?
まず「時計」ですが、残念ながらこの時点では「はりぼて」です。
(固定文字列「23:59」を表示させている。)

しかし本日、以下のページの情報をもとに、時刻を表示させることに成功しました。
http://hrb.osask.jp/wiki/index.php?advance%2FRTC

「Haribote OS」の河合さんのページです。
ここに載っている「readrtc」関数で、時刻情報の取得ができます。
1秒ごとに起動するタスクを作って、そのタスクからこの関数を呼んでやるようにしたらうまくいきました。
1秒ごとに起動するタスクの方は、コンソールのカーソルの点滅ロジックを参考にして作りました。

次に「ウィンドウ切り替え」ですが、タブをクリックすることによる切り替えの方は、実現できていません(こちらも「はりぼて」)。

構想としては、タブとシートの対応を持っておいて、タブがクリックされたら、対応するシートをアクティブにする、というのを考えています。

名前変えました。GA6200Aです。
ウィンドウ切り替えシステムできたら、できれば教えてください

名前変えました。GA6200Aです。
ウィンドウ切り替えシステムできたら、できれば教えてください

よくみたのですが、分かりませんでした。
どのソースにどこを足したかいってもらえたらうれしいです

参考にするのは、
bootpack.c の open_constask
console.c の console_task
です。
※時計用に専用のシートを作るなら、bootpack.c の open_consoleも。

まず、console_taskをまねして、時計用のタスク本体を作成します。

console_taskのうち、forループの前の部分で必要なのは、以下の3行です。
cons.timer = timer_alloc();
timer_init(cons.timer, &task->fifo, 1);
timer_settime(cons.timer, 50);
指定時間(50)経つと、タスクのfifoに'1'が送られてくるようにするロジックです。

そして、forループの中の「fifo32_get」でfifoの中身を取得して、それが'1'だったら、前出の「readrtc」で時刻文字列を取得して画面に描画し、再びtimerを設定してforループに戻るようにします。

次に、open_constaskをまねして、時計用のタスクを作成するための関数を作ります。
上で作成したタスク本体を呼ぶようにします。

タスク作成用関数ができたら、HariMainから1度その関数を呼び出してやればOKです。
(もちろんtask_aより後で。)

なおこの方法では、時刻取得のため、毎回RTCを読みに行くことになりますが、WindowsやLinuxではこの方法は取られていないそうです。
起動時に1回だけRTCを読んだら、その後は定期的に、クロックの値から時刻情報を計算しているそうです。

できれば、ソースも欲しいです。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« 花と自転車と、そして... | トップページ | おうた♪たっぷり プリモプエル »

2020年3月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

お気に入り

無料ブログはココログ