2007-05-01から1ヶ月間の記事一覧
不完全ながらプロテクト・モードに移行し、通常の32ビットコードを使う準備ができた。ここでいよいよD言語を導入していくことにする。
だいぶ間が空いてしまった(汗)。いよいよ実際にセグメンテーションを動かして、32ビットコードを実行するプロテクト・モードへ移行する。64KBの壁よさらば。今回のソース(setup.s)
プロテクト・モードへの移行は起動処理の山場の一つだ。リアル・モードからプロテクト・モードに移って初めて32ビットのコードが動き、64KBの壁を破って4GBまでの全メモリにアクセスできるようになる。 x86系CPUでプロテクト・モードに移行するには、最低限…
ここまでのソースコードをSourceforge.jpのSVNリポジトリにアップロードしました。 プロジェクト・ページ SVNリポジトリ 最新版がtrunk以下に入っています。またtags以下には、日記の各日付に対応したソースコードが入っています。 ビルド方法やライセンスは…
というわけで明日から更新再開します。ソースコードとかをsourceforgeプロジェクトにアップするかもしれません。きっとライセンスはNYSLでD言語で普通のOSを実装していくと思います。D言語ってOS書くための言語なんだね! という誤解を広めたいです(爆)。…
2日くらい外出するので、コメントや更新が停止します。
カーネルが一括ビルドできるようになった。これで変更を加えてもコマンド一発で最新版が作れる。 だけど、デバッグはどうするのだろうか。文字表示はできるけど、まだ数字やレジスタの値を表示させることはできない。暴走したか単に無限ループで止まっている…
512バイトの制限を超えてカーネルの読み込みができるところまでをやった。これからソースファイルがどんどん増えていくと、ビルドがかなりめんどくさくなる。そこで今回は、makeを使った一括ビルドの方法を解説しようと思う。
サイドバーにブックマーク表示追加 本サイトのネタ元がほぼ網羅されているので是非読もう。 スタック・セグメントの指定が間違っていたのを修正 0x0100にしなければいけないところが0x1000になっていた(汗)。 再修正。スタック・セグメントは0x0000のまま…
前回でディスクからのデータ読み込み方法と、その時にぶつかる壁について解説した。今回はいよいよデータの読み込み処理を実装していく。
実は、今まで黙っていたが、起動時のIPLはディスク先頭の512バイト=1セクタしか読み込まれない。1セクタだけだからブートセクタなんて言うのだ。 言うのだ、なんて威張っても仕方ない。OSのカーネルがまさか512バイトに納まるわけはないので、残りの部分を…
今回はセグメンテーションと割り込みテーブルについて。でも多分あんまり詳しくやらない。できないから(笑)。 しかしいつになったらD言語が出てくるんだろう……プロテクトモードに行くようになったら出てくるはずなので乞うご期待!
前回まで実際のソースコードを元に不器用に説明したけど、いい加減CPUの説明抜きで話を進めるのが非常に辛いと分かったので、必要最低限解説しておこうと思う。
タイトルの番号が間違っていたのを修正(汗)。 言い回しをちょっと修正。 セグメントセレクタ→セグメントレジスタ セグメントを示す値がセグメントセレクタ。それを入れるレジスタがセグメントレジスタ。
後から文章やソースコードを訂正したりした場合はこうやって記録する(汗)。 leawをmovwに修正。 IPLの文字列表示などでleawを使っていた箇所をmovwに直した。 IPLのprint関数の引数にあるカラーコードを削除。 設定しても反映されていなかった……。
前回まででセグメントを設定するところまでは説明した。いよいよメッセージ表示の部分について説明する。
ひたすら打つべし! 打つべし! だったアセンブラのソースについていい加減解説する。
前回でとりあえず起動するまではできた。だが、前回のコードでは、プログラムの部分が無限ループするだけで何もしない。せめて起動したというメッセージくらいは表示させて、俺はマジで本当に起動したのだということを主張させたい。そのためには、恐怖のア…
PC/ATマシンで動くOSを作る場合、PC/ATでのOS起動規格に則ってブートセクタ等を用意しなければならない。
qemuのウィンドウからの抜け方を加筆。
3/3からずっと放置していて何が本格始動だよ、と言われそうだが本格始動なのでよろしく。実は会社を辞めた(爆)。それで次の仕事が見つかるまでしばらくはこのOS製作プロジェクトに専念しようと思う。居るか居ないか良く分からないけれど読者のみなさんそう…