*Alphaの個人ページ **このページについて -Alphaの個人ページです。以下のようなときに必要なため作成しました。 --いろいろな進化をした「HariboteOS」などのフリーソフトOSを応援するためにトピックを作りました。 --「30日でできる!OS自作入門」の本の感想などを書いています。 --ここでのトピックを追加したり、バグを修正したり、もっと使いやすく、スマートに書き直したバージョンををまとめて開発ツールも一緒に公開します。そのダウンロードページともいえるでしょう。 --Alphaへのコメントはここでお書きください。 -以上のことをしたかったので作成しました。今後ともよろしくお願いします。 **Alphaについて -僕はかつてCloverでした。今まで皆さんに迷惑をおかけして申し訳ございません。 -もうひとつに、「iやxさんともじゃないか?」ということで「結局またAlphaが関与しているのでは?」ruleに書いてありましたが、僕はiやxさんと同じ人ではありません。同じ人ではない証拠が出たそうなのでよかったです。 -僕の迷惑のせいでいろいろなことが起きてしまいました。詳しくは、[[data/Clover - K-kiwi:http://k.osask.jp/wiki/?data/Clover]]をご覧ください。 *AlphaによるOSづくりのためになるトピック集 -ここに書いてあるやつは、一回読み終わって一通り理解できる方が読んだ方がいいでしょう。書いてないことを改良することがありますので、混乱してしまうかもしれません。 -ここにかいてあるトピックを使う場合あなたに著作権を与えてもいいです。無改造でも結構です。 -「ここに書いてあるトピックがむちゃくちゃきたなくて読む気にならない。」や、「もっとここを改善して」などは遠慮なく言ってください。その要望にお応えします!! **HariboteOSを改良 ***コマンドライン取得をAPIではなく、Windowsみたいな「int argc, char *argv[]」型にしよう -本格的な仕組みを作るために書き直しました。前回の変更は戻してください。 -改造点はOSとlibcです。これはz_toolsにあるlibcを改造しますので改造済みのlibcを公開します。それは「haribote_a01」に入っています。 -libcの更新が終わったらOSの改造に入ります。libcに沿って改造をしていきます。もしかしたら、「コマンドライン取得API」はいらないかもしれません。ここでは削除方法については書きません。でも互換性を作りたいならとっておいてもいいと思います。 -書きかけ ***IPLでのHaribote.SYSのジャンプ番地を探してジャンプしたい。 --Haribote.SYSを探してジャンプするところとファイルが見つからなかった時はエラー処理に行くようにしてみましょう。 ---ipl09.nas (省略) SYSTEMNAME: DB "HARIBOTESYS" (省略) MOV DI,0xa600 MOV AX,1 MOV CX,0 serchloop: MOV SI,SYSTEMNAME REP CMPSD JE systemrun0 ADD DI,0x0020 INC AX CMP AX,224 JE systemrun JMP serchloop systemrun0: INC CX systemrun: CMP CX,0 ; CXが0のときエラーへジャンプするようにする。 MOV WORD [0x0ffc],DI ADD DI,0x1b MOV AH,[DI] DEC DI MOV AL,[DI] MOV DX,512 MUL DX ADD AX,0xbe00 JMP AX --DIには、0xa600(ファイル情報の0番目の先頭)AXには繰り返し回数。CXには正式に読み込めたかを確認するフラグ(0はエラー。1は正常) --まずSIにSYSTEMNAME(HARIBOTESYS)をいれて[SI]と[DI]を比較して、CMPSDの結果が0なら検索終了。それ以外ならDI(ファイル情報のポインタを1ファイル分飛び込む)そしてAXに1を足してAXが224なら終了。それ以外ならもう一回やり直す。 --もし、systemrun0なら正式に読み込めたよ。ってあらわすためにCXに1を足しています。なお0以外の数値ならなんでもいいです。 --そしてCXが0ならエラー処理に行きます。エラーメッセージは変えた方がいいでしょう。私の場合いっぱい文字を表示するので、文字表示用CALLを作り使用しています。また、HLTを100回やったら再起動もするように設定しています。サンプルを載せておきます。 --そしてたとえば0x0200って書かれているやつを0x0002と変換してそれに512かけて、0xbe00を足した数の番地にJMPしています。 --0x0fecから2Byte分にカーネルファイルのファイル情報の先頭番地を書き込みます。(2Byte分ならどこでも結構です。) (省略) fin: HLT JMP fin error2: ;表示したい文字 CALL printf MOV AX,0 error_loop: INC AX CMP AX,100 JE error_end HLT JMP error_loop error_end: CLI MOV AL,0xfe OUT 0x0064,AL JMP fin printf: PUSHA MOV SI,AX printf_loop: MOV AL,[SI] CMP AL,0 JE printf_end MOV AH,0x0e MOV BX,15 INT 0x10 INC SI JMP printf_loop printf_end: POPA RET (省略) ***Haribote.SYSのコピーサイズの改良。 --0x0ffcから書いた番地を利用してHaribote.SYSにぴったりなサイズを計算しそのサイズでコピーしてみましょう。(~~~/4のときに足りなくなるのを配慮して+4Byte分大きく指定しておきます。) ---asmhead.nas (省略) MOV BX,[0x0fec] ADD BX,0x1c MOV AX,[BX] MOV CH,AH MOV AH,AL MOV AL,AH MOV EDI,0x1000 MUL EDI SUB BX,0x02 MOV AX,[BX] MOV CH,AH MOV AH,AL MOV AL,AH MOV ESI,4 DIV ESI ADD EAX,4 MOV ECX,EAX MOV ESI,bootpack MOV EDI,BOTPAK CALL memcpy (省略) --0x0ffcから読み込んだ2Byteで構成されたデータの番地に0x1cを足して、0x306B0000を0x0x00006B30に変換してそのサイズに4を足します。(この理由については先頭の方を参考に。)そして、/4して実際にECXにセットすれば読み込むサイズが決まります。 **ミニトピック -ipl09.nasの一部の「RESB 18」はなくても大丈夫。 -ipl09.nasの一部をNASMでは、「RESB 0x71fe-$」を「TIMES 0x01fe-($-$$) DB 0」と書く。 *「30日でできる!OS自作入門」の本の感想 **全体的な流れについて -初心者にはやさしい構成になっている。今までは「アプリケーション作成を初心者におすすめする。」だったが、この本によって「OS作成を初心者におすすめする。」になるかもしれない。 -なぜなら、「OSの仕組みやアルゴリズムや作り方」と「C言語の使い方」と「アセンブラ言語の使い方」や「コンピューターの仕組み」が一挙にわかるからだ。失敗例もあったかそれを解決するところを読むのが楽しい。 -また、日数ごとになっているため初心者にも「実際に理解する。」ところをやって「ソースを見てもっと理解を深める。」ところをやって「改造して理解度を100パーセントにする。」という段階を踏めるからだ。1日分などを進めるペースも人それぞれだから楽しい。 -続けられる秘訣は「楽しいし、簡単で、出来栄えがいいから」。僕はそう思っています。僕は今まで「完璧主義なプログラム以外は絶対だめだ。」といってあらゆることを完璧にしていましたが、今は、「自分で趣味として簡単で小さくてためになるソフトウェアーこそが現代に大切だ。完璧でも、完璧でなくてもいいプログラムと言える。」と思います。 **批判する人たちへ -よく「カーネルがないOSってOSなのか?」とか「OSの内容やウィンドウシステムがしっかりなってない。」などなどいっぱいいってくるのですがそれにちょっとお返事です。 ***1.OSの内容について -OSと言えば「ハードウェアーの抽象化」といいますが、本当にそれでいいのでしょうか?(っていうよりこれは正しいの?)ハードのコントロールはOSにゆだねられますが、本当にこれができないOSはOSじゃないのでしょうか? -この世の中「ハッカー」の意味が通用しなかったりしています。本当はこの世の中だんだん壊れてきているのではないでしょうか?この本1冊でOS世界の常識をつくがえすこともできるのではないでしょうか?最低でも簡単なOSでもOSという分野に入ると思います。 *Alpha版HariboteOSを公開 -実際には、haribote_a01です。ここに追加したトピック、バグ修正を行った済みのバージョンです。すべてのセットとなっております。QEMUもバージョンアップ済み。ディレクトリー構成を少し変更しています。KL-01ライセンスです。 *ダウンロード |名前|状況| |haribote_a01|準備中| *Alphaへのコメント欄 -反論、間違いなど僕に言いたい場合は、このコメント欄でいってくれると嬉しいです。 -- ''Alpha'' SIZE(10){2006-09-28 (木) 06:51:34} -できれば、かつて[[Clover]]と名乗っていたことなどを明記してもらいたいです。 -- [[K]] SIZE(10){2006-09-28 (木) 07:07:51} -Kさんの意見を採用します。 -- ''Alpha'' SIZE(10){2006-09-28 (木) 15:45:16} -現在、いくつかの仕事を並行しているようですが、一つずつ着実につぶした方がいいんじゃないですか? -- 名無しさん SIZE(10){2006-09-28 (木) 18:50:56} -まだ若いのに人のために役立つトピックをまとめようとする心意気はすばらしいと思います。ただ、まず自分の作品(サンプルみたいなものではなくある程度実用的なもの)だと胸を張って言えるようなものを作成されてはいかがでしょうか?その後、その作品を作った際に出てきたトピックをまとめる方が説得力もありますし人の役にもたつと思います。実際に動作を確認していないコード?の断片や実現の目処が立たない事柄を並べることは決して有意義なことではないでしょう。 -- ''ひよひよ'' SIZE(10){2006-09-29 (金) 00:27:08} -ひよひよさんが良いことを書いてくれていますね。「とにかく発表」という形にこだわらなくても、自分で納得のいくものができた「ついでに発表」でも良いのではないでしょうか? 発言してしまった手前、という経緯もあるのでしょうが、義務感ばかりにとらわれているときっと楽しくありませんよ。 -- ''rapper'' SIZE(10){2006-09-29 (金) 01:48:24} -名無しさん、ひよひよさん、rapperさん。ご意見ありがとうございました。 -- ''Alpha'' SIZE(10){2006-09-29 (金) 06:57:32} -.objが何を指すのかわからないけど、COFF形式ならGCCで作れますよ。 -- 名無しさん SIZE(10){2006-10-10 (火) 11:11:10} -お返事遅れてすいません。名無しさんアドバイスありがとうございました。 -- ''Alpha'' SIZE(10){2006-10-12 (木) 17:31:37} -int main(int argc, char *argv[])で始まる形式にしようって奴だけど結局はCの規格になるのでlibcに行き着く -- 名無しさん SIZE(10){2006-10-12 (木) 20:45:24} -名無しさんへ。そうなんですよ。調べてみたらそうなっちゃいました。どうすればいいかわからないのでまずいまの方法からやっていきます。 -- ''Alpha'' SIZE(10){2006-10-13 (金) 06:46:59} -ええとこの自己紹介ページは[[members]]に登録されていないようです。つまり、[[ルールに沿った方法>FrontPage]]でこのページを作ってはいないということなのでしょう。ほとんど他人の迷惑にはならない小さな問題ですので[[rule]]ページには書かずにこちらに書きますが、[[Alphaさんは今まで何度もルールを無視してきた>http://k.osask.jp/wiki?data/Clover]]ので、ここであえて注意しておきます。Alphaさんに限ってはもう小さなルール違反でも許さないつもりですので、もっと慎重にやってください。 -- [[K]] SIZE(10){2006-10-14 (土) 01:07:49} -Kさんへ。申し訳ございません。調子に乗って更新してしまいました。[[members]]には登録しておきます。 -- ''Alpha'' SIZE(10){2006-10-14 (土) 07:12:56} -感想についての反論がいっぱい来るかもしれない・・・ -- ''Alpha'' SIZE(10){2006-11-07 (火) 19:08:47} #comment