Mac で OS をつくる(3日目)

だいぶ間が空いてしまったが3日目終了。3日目では x86 の 32bitモード プロテクトモードに移行して、ファイルシステム(FAT12)から C言語で書いたコードを読込んで実行できるようにできるところまで。

Windows環境なら3日目もとっくの間に終わっていたはずなのだが、Mac(PPC) 環境にこだわっていたのでなかなかすすまなかった。結局 z_tools のツールをいくつか Mac OS X(PPC) で使えるようコンパイルした。コンパイルしたのは

– obj2bim(要修正)
– bim2hrb
– edimg(edimg0g を使用、要修正)

obj2bim と bim2hrb は CD-ROM に入っていたバージョンを使用。edimg は CD-ROM に入っている最新版(edimg0i)が Windows 環境にディペンドしているので「OSASKをLinux上でmakeする方法」からリンクされている edimg0g というバージョンをダウンロードして使用した。

edimg0g
OSASKをLinux上でmakeする方法

bim2hrb はワーニングは出ても問題なくコンパイルできるが、obj2bim と edimg はビックエンディアンの CPU に対応していないので、ビックエンディアン(PPC)でも動くようにソースコードを修正してコンパイルした。なんとか使えるようだ。

CC1 の代わりには Mac OS X のデベロッパーキットで入る gcc をそのまま使用。gcc -arch i386 -S のオプションで GAS(x86) のコードを出力してくれる。

アセンブラは NASK ではなく NASM を使っているので GAS2NASK の代わりに GAS2NASM という perl スクリプトをみつけてきた。ただ、このスクリプトどうも古いようで Mac OS X の gcc が特殊で外部関数とのリンクで不思議な NASM コードを吐いてくれる。しょうがないのでこれは手作業で修正(ちょっとうざい)。

GAS2NASM

あと、gcc はインラインアセンブラが使えるので3日目のサンプル harib00j のように hlt だけならインラインアセンブラで asm(“hlt”); と書いちゃうほうが楽。

そうそう、NASM を使う上で NASK との差異がいろいろと出てくるので下記のサイトを参考に修正すること。

tools/nask

最後に。Mach-O を直接実行できるようにできると Mac OS X の gcc でバイナリをダイレクトに作成できて嬉しい。この辺は今後の研究課題…

5/13 追記:書籍ではプロテクトモードの説明がまったくないので OS-Wiki を参照すること。ほんとはこういうのもまとめて書籍に載せておいて欲しい。

簡単なx86のCPUのモードの説明(OS-Wiki)

Tags:

2 Responses to “Mac で OS をつくる(3日目)”

  1. yaris より:

    なるほどー。と読ませて頂きました。
    なんだか面白そうですね。
    ボクもゲットしてみよっと思います.

  2. roki より:

    はじめまして。
    昨日からIntel Macで自作入門初めて見ました。
    かなり参考にさせていただいてます。
    edimgの移植に手こずってますが。。
    なんとかカントカがんばりたいと思います。では。