忍者ブログ
2018.12│ 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
プログラミング関連での備忘録なんかを載せています。
カレンダー
11 2018/12 01
S M T W T F S
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
プロフィール
HN:
たっく
年齢:
36
性別:
男性
誕生日:
1982/03/11
職業:
システムエンジニアなの?
最新コメント
最新トラックバック
ブログ内検索
アーカイブ
アクセス解析
2018年12月18日 (Tue)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2009年11月07日 (Sat)

2日目 その2です。

2日目 その1までで、大分プログラムらしくなりましたが、
未だにブートセクタ以外の場所が残っています。

これは、調べてみるとどうやらFAT12フォーマットの仕様の部分を、アセンブラで直接書き込んでいるのが原因の様です。

1日目のソースの、


; 以下はブートセクタ以外の部分の記述

       DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
       TIMES   4600 DB 0
       DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
       TIMES   1469432 DB 0



の部分ですね。


これは何を意味しているのか分かりませんが、うちのPCのVMWareに入っているWIndows 7 RC版でフロッピーディスクのイメージをフォーマットして、バイナリエディタでそのイメージを開いて見たところ、512Byte目から「F0 FF FF 00」、5120Byte目から「F0 FF FF 00」がありました。

よくわからないけど、FAT12の仕様だと言うことで今のところは納得しようと思います。

で、この部分をわざわざアセンブラで記述しているのが無駄だと言うことで、今回はブートセクタ部分の最初の512Byteだけをアセンブラで作るように変更します。


ここでですが、私の環境は以前にも言いましたがUbuntuです。
「30日でできる!OS自作入門」はWindowsを想定して書かれていて、ちょくちょく作者が作ったWindowsのツールが出てきます。
今回も、読み進めて行ったところedimg.exeという作者が作ったツールを使っています。
ですが、私は使いたくありません。
一応、やっている事はブランクディスクのイメージを読み込んで、先頭の512byteの部分にアセンブラで作ったブートセクタを書き込むと言う説明が書いていましたが、その読み込み元のブランクディスクイメージが、59byteしかなく、中身をみてもFAT12フォーマットと言うわけでもなく、よく分かりませんでした。

と言うことで、以下の方法をとろうと思います。
  • 2日目まででできているフロッピーイメージの512Byte未満の部分を削除して、このバイナリファイルをsrc.binとして保存します。(このファイルは今後も使うかもしれないのでとっておきます。)
  • アセンブラでブートセクタをアセンブルします。(ipl.binという名前にします)
  • catコマンドを使用して、アセンブル結果とsrc.binを結合します。(cat ipl.bin src.bin > helloos4.imgという感じです)
今後、ブートセクタから本格的にOS部分を読み出すらしいので、その時は困ってしまいますが、当面はこれでしのぎます。


早速ソースの修正をします。
まぁ、やることはを上で書いたソース部分を削除するだけなんですが・・・・・

賛否両論あると思いますが、私の場合は、書いたソースをなかなか消す事ができません。
なので、今回はソースを消すのではなく、コメントアウトします。
※IBMの人とコードレビューをしたことがあるのですが、その人はいらない部分は削除するべきって言っていました。まぁ、反対はしません。ここでは、本当にいらなくなれば自然ときえるでしょ〜っていうスタンスで行きます。

3e9fe421.png

これでアセンブルします。

そして、今回からのコマンド、
cat ipl.bin src.bin > helloos4.img
を実行します。

これで、 helloos4.imgが作成されたので、VMWareで実行してみます。

c23d267d.png

まぁ、大したことしていないので普通に実行できました。

とりあえずこれで、アセンブルするのはブートセクタの512Byteだけになったので、解析しやすいようにリストファイルと言うものを出します。

nasmに一つオプションをつけます。
$ nasm helloos3.asm -o ipl.bin -l ipl.lst
これを実行すると、ipl.lstと言うファイルが出来上がりました。

中身を覗いてみると・・・あれまー、超便利。
こ〜んな感じでどんな機械語に変換されたかが一目瞭然です。

b8f5dd46.png

最後にMakefileを作ります。
私の環境にはすでにmakeコマンドが入っているので、Makefileを作るだけでした。

どうせならディレクトリも分けておこうと思い、srcとかbinとかのディレクトリを作成し、Makefileを以下の様に作りました。

# フロッピーディスク作成

helloos.img : ./bin/ipl.bin Makefile
        cat ./bin/ipl.bin ./bin/src.bin >./bin/fdimage/helloos.img

./bin/ipl.bin : ./src/ipl.asm Makefile
        nasm ./src/ipl.asm -o ./bin/ipl.bin -l ipl.lst

clean :
        rm -f ipl.lst
        rm -f ./bin/ipl.bin
        rm -f ./bin/fdimage/*.img


これで、makeを実行すればフロッピーディスクのイメージファイルが自動的にできます。


2日目の内容は以上です。
今回の内容としては難しいところはあまりありませんでした。

次回は、「32ビットモード突入とC言語導入」です。
いよいよC言語がでてきます。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
←No.10No.9No.8No.7No.5No.4No.3No.2No.1No.6