* OS作りの最初の一歩 の紹介ページ [#k78a1d8e]
-いろいろなバリエーションを用意したいのですが、今のところ[[projects]]にOSASKしかOSが入っていないので、今のところはOSASKでの例を紹介することしかできません。

* COMもしくはEXEから作り始める [#nd08c45e]
-実例:OSASK
-0.とりあえずIA-16を勉強しよう。OSをいきなり作るときはリアルモードの知識が不可欠です。
-1.OSを作るという気構えをなくして、たとえば画面にメッセージを表示するだけのDOSプログラムを作ってみます。もちろんメッセージじゃなくてグラフィックでもいいですが。普通はこの段階ではアセンブラで作りますが、高級言語で作ってもいいです。最初は32bitで書いてもいいですが、2.に行く前にリアルモード用に書き直してください(アセンブラを使うと分かりますが、リアルモードでも32bit命令は使えます)。これは.EXEか.COMになるでしょう。
--補足:もちろん実行するときはWindows上ではなくてMS-DOSやFreeDOSやWindowsで作った起動ディスクから起動したコンソールとかを使ってくださいね。Windows上で実行したら、Windowsを壊しかねませんし、期待する動作をさせられないこともあるでしょう。
-2.このプログラムを、OSのサービスを全く利用しない形に書き直します。INT(0x21);を使ってはいけません。なぜならこのプログラムはこれから独立したOSになるので、DOSのサービスコールは使えなくなるからです。たいていはBIOSを利用したりするんでしょう。I/O命令を駆使して、ハードウェアをガンガンいじっても構いません。・・・まあ懐かしのTownsOSやWin3.1のように、DOSの上で動くようなOSがお望みならこの作業は不要で、1.の段階で最初の一歩は完成です。
--INT(0x21);が使えないということは、最後はどうしたらいいの?終了できないよ?:はい、終了できませんね。とりあえず、JMP $にでもして、無限ループにしておけばいいでしょう。リセットボタンを押せば再起動はできます。
-3.さてここまできたら、このプログラムを自分で書いたブートセクタでメモリにロードしてやります。ブートセクタを書くならまずはここを→[[IPL]]。そしてディスクアクセスはこちら→[[(AT)BIOS]]。EXEの場合は[[IMGTOL]]のsコマンドを使ってやると、DOSでメモリにロードした状態のファイルを作れますので、よかったらつかってやってください。それぞれできたらDOSのCOPY /Bとかで繋いでやって、ディスクイメージを作り、これをたとえば[[IMGTOL]]のwコマンドでディスクに書いてやれば、それでOKです。
-4.やったー、ディスクを入れたらブートした~!・・・これで最初の一歩は卒業です。どんどん機能を増やしていってください。
-この方法のいいところ:一番最初の右も左も分からない状態で、とりあえずDOSファンクションが使えます。というかDOSプログラミングの情報は、OS開発に関する情報に比べればずっとたくさんあります。だからそれらを参考にしてプログラムを作ればいいわけです。きっと開発はスムーズに行くでしょう。いきなりブートセクタを書く人もいますが、その方法はIA-16にある程度精通していないと、うまく動かせないまま、デバッグもままならず、難航するんじゃないかと僕は思っています(ブートセクタのバグなのかOS側のバグなのかわかんなくなる)。もちろん、いきなりブートセクタをかけちゃうくらいのスキルがある人は、ブートセクタから作り始めて構いませんが。
-この順序通り作ってみたへぼへぼサンプル (AT互換機用): http://k.hideyosi.com/minifsos.lzh  (2.76KB)
--ソースがドキュメントを兼ねています。だからソース内のコメントをよく読んでください。
--とりあえずOS部分はたったの80バイトです。OSASKよりもはるかに起動は速いです(笑)。一応グラフィックが出ます。
--ここからどうやってOSっぽくしていくかですが、たとえば絵を単なるグラデーションではなくWindowsっぽい画面にして、マウスがうろうろと動かせるようにして、ディスクからファイル一覧を読んできて・・・みたいに少しずつパワーアップしていくと、いつのまにかOSASKになる、というわけです。
-上のやつをちょっと発展させたへぼOS (AT互換機用): http://k.hideyosi.com/heboos.lzh  (14.5KB)
--OSのコードを80B→1.08KBと大幅(?)に増やしました。さらにフォントデータをくっつけてOSは2.58KBとなっております。なんとCUIでコマンドが入力できる!(といってもclsとdirだけなんですがね)。さらに外部アプリケーションを走らせられる!(とりあえずhello, worldを作っておきました)。ディスクはDOS互換で、アプリケーションをWindowsで追加したり削除したりできます。まあ詳しいことはダウンロードしてのお楽しみってことで。

* こめんと欄 [#p14cedb6]
-「へぼサンプル」と「HEBO OS」のライセンスはどうなりますか?川合堂ライセンスですか? -- [[MiSt]] SIZE(10){2004-04-02 (金) 15:46:36}
-readmeをよく読みましょう -- [[Zakky]] SIZE(10){2004-04-02 (金) 18:41:51}
-いずれにもちゃんと「KL-01」と書いてありますよ。ちなみに「川合堂ライセンス-01」という名称は旧名称です。今では[[KL-01>licenses]]といいます。 -- [[K]] SIZE(10){2004-04-02 (金) 19:29:13}
-色々失礼しました。きちんとread meに目を通してませんでした。 -- [[tomo]] SIZE(10){2004-04-03 (土) 23:24:46}
-hoaファイルをコマンドとしても認識できますよね?例えば、hello.hoaとか。でも、hoaファイルのないディレクトリに移動したら、コマンドが使えなくなるのでは? -- [[MiSt]] SIZE(10){2004-04-05 (月) 12:24:19}
-何をおっしゃりたいのかよく分かりません。heboOSってそもそもディレクトリ移動なんてできましたっけ? -- [[K]] SIZE(10){2004-04-05 (月) 15:18:39}
-いや、すいません。DIR移動できるようになったら、の話ですが。ええと、なんていえば良いですかね・・・。やっぱり意味わからなかったですか。じゃあ、文章まとめてきます。 -- [[MiSt]] SIZE(10){2004-04-05 (月) 17:53:45}
-例えば、DOSだったらどのディレクトリからもコマンドを使えますよね?それと同じく、HEBO OSでもどこのディレクトリ(移動できないけど)からでもコマンド(というか.hoaファイル)を扱えるか、という質問なのですが? -- [[MiSt]] SIZE(10){2004-04-05 (月) 17:56:51}
-わかりにくくてすみません。う~ん、なんて言えば良いか適当な言葉が見つからない・・・です。 -- [[MiSt]] SIZE(10){2004-04-05 (月) 17:58:14}
-それは、パスを通す機能をつければ良いのでは... -- [[Zakky]] SIZE(10){2004-04-06 (火) 15:13:54}
-そのとおり。OSを作るのですから、どんなことも可能です。パスを通す機能をつけてもいいですし、特定のディレクトリにコマンドファイルを置かせる仕様でもいいのです(たとえばCMDディレクトリとか)。そういう改造はいくらでもできるでしょう。・・・しかし質問は「heboOSでできるか」ということです。少なくとも今のheboOSではできませんので、僕の回答としては「できません」ということになるでしょうか。 -- [[K]] SIZE(10){2004-04-06 (火) 16:38:03}
-ご回答ありがとうございました。質問の仕方が悪かったですね。8086やCを勉強する前に、日本語勉強してきます(笑) -- [[MiSt]] SIZE(10){2004-04-09 (金) 09:12:23}
-osを作っています。色々やっていくとcpuについて詳しく知りたくなります。i486以降のcpuについて詳しく解説したいい本またはサイトを教えて下さい。 -- [[名無しさん]] SIZE(10){2007-04-30 (月) 18:52:41}
-アスキーの蒲地輝尚 著「はじめて読む486」とかいいと思います。初めて読むといっても結構詳しいです。 -- ''kosei'' SIZE(10){2007-08-23 (木) 20:01:06}
-minifsos、heboosに非常に興味があるのですがリンク先がなくなってます。ダウンロードできるようにしてもらえないでしょうか? -- ''も'' SIZE(10){2010-08-06 (金) 16:46:42}
-minifsos, heboosは書籍「OS自作入門」のCD-ROMに入っていますよ -- ''yukoba'' SIZE(10){2011-01-15 (土) 22:50:19}

#comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS