OS作ってます。2日目
さて、今日もやりましたよ。まだ、3日坊主には早いですしね。
まず、2日の目の内容は「アセンブラ学習とMakefile入門」です。
最初にテキストエディタの紹介があります。terapadが紹介されています。僕以前は使っていたのですが、
この開発ではEclipse+CDT で開発しようと思っています。というのは、今後開発がC言語主体になってくるのを見越してです。(「Eclipseみたいに重たいもの使ってるの?」なんていう人もいますが、僕のPC ではそれほどストレスを感じていません。起動を含めて。←軽く自慢です)
その他も含めて開発環境は次の通りです。
1日目でも一応、アセンブラを書くのですが、バイナリファイルに直接値を書いていくような命令しか使わなかったのです。 2日目からは命令がいくつも出てきて、言語っぽくなってきます。
MOVやJMP、CMPなどのコマンドと、
16ビットの8種類のレジスタと8ビットの8種類のレジスタ、6種類のセグメントレジスタが出てきます。
本の通りにコードを書き換えていけばとりあえず動いているだろうものはできていきますが、
どういうときにそのレジスタに値を書き込むのかということがいまいち把握できていません。
でもアセンブラというのは結局、CPUに直接読ませる値をレジスタに値を書き込む手順を記述するもので、その方法のいくつかはわかったので、とりあえずこの理解度のまま進むことにしました。この段階ではまだ、OSは起動するだけで何もできないのでつまらないのです。
後半はMakefileの簡単な説明です。
1日目にバッチファイルでやっていたことをmakeコマンドでできるようになります。
これまで数々のオープンソースのコンパイル時にお世話になったmakeですが、Makefileの書き方がわかると思って期待しましたが、こうすれば動くのですよ的な説明のみで、この章を読んだからといってmakeを使いこなせるようになるということはなさそうです。この先、どこかでもっと突っ込んだ説明があるのでしょうか。
ここで一つ問題がありました。本に添付されているMakefileは僕の環境ではうまく動かないのです。
どうも筆者はWindowsXPまでを前提としているようですが、VistaやWindows7ではcopyコマンドやdelコマンドの仕様が変わってしまったのでしょうか。それとも添付のmakeコマンドが環境により動作を変えてしまったのでしょうか。とにかく、Makefile内で記述して実行しているcopyコマンドやdelコマンドがうまく動作しないのです。
makeコマンドを介して実行されるcopyコマンドやdelコマンドの実行時ディレクトリがmakeコマンドが置かれているディレクトリになってしまうようで、Makefileに記述されているファイルパスと一致せず、コピーに失敗するのです。
いろいろパスをいじってみてもうまく動かないので、copyコマンドをcpコマンドに、delコマンドをrmコマンドに変更し、パスの区切り文字を \ から / に変更することで動くようになりました。
cpやrmが使えたのは以前、C言語を勉強しようと思ってインストールしていたmsysのおかげのようですが、ひょっとするとこいつが悪さをしていたのかもしれません。
まあ、Makefileは若干変更しないといけないのですが、いくつもバッチファイルがあるよりずいぶん便利になりました。
30日でできる! OS自作入門
まず、2日の目の内容は「アセンブラ学習とMakefile入門」です。
最初にテキストエディタの紹介があります。terapadが紹介されています。僕以前は使っていたのですが、
この開発ではEclipse+CDT で開発しようと思っています。というのは、今後開発がC言語主体になってくるのを見越してです。(「Eclipseみたいに重たいもの使ってるの?」なんていう人もいますが、僕のPC ではそれほどストレスを感じていません。起動を含めて。←軽く自慢です)
その他も含めて開発環境は次の通りです。
- Let's Note N8
- Windows7 Pro 64bit
- Eclipse 3.5.1 + CDT その他プラグインいろいろ
- 本に付属のtolset
- バイナリエディタ BZ
- Msys (これがいろいろ悪さをしているのかも?後述)
1日目でも一応、アセンブラを書くのですが、バイナリファイルに直接値を書いていくような命令しか使わなかったのです。 2日目からは命令がいくつも出てきて、言語っぽくなってきます。
MOVやJMP、CMPなどのコマンドと、
16ビットの8種類のレジスタと8ビットの8種類のレジスタ、6種類のセグメントレジスタが出てきます。
本の通りにコードを書き換えていけばとりあえず動いているだろうものはできていきますが、
どういうときにそのレジスタに値を書き込むのかということがいまいち把握できていません。
でもアセンブラというのは結局、CPUに直接読ませる値をレジスタに値を書き込む手順を記述するもので、その方法のいくつかはわかったので、とりあえずこの理解度のまま進むことにしました。この段階ではまだ、OSは起動するだけで何もできないのでつまらないのです。
後半はMakefileの簡単な説明です。
1日目にバッチファイルでやっていたことをmakeコマンドでできるようになります。
これまで数々のオープンソースのコンパイル時にお世話になったmakeですが、Makefileの書き方がわかると思って期待しましたが、こうすれば動くのですよ的な説明のみで、この章を読んだからといってmakeを使いこなせるようになるということはなさそうです。この先、どこかでもっと突っ込んだ説明があるのでしょうか。
ここで一つ問題がありました。本に添付されているMakefileは僕の環境ではうまく動かないのです。
どうも筆者はWindowsXPまでを前提としているようですが、VistaやWindows7ではcopyコマンドやdelコマンドの仕様が変わってしまったのでしょうか。それとも添付のmakeコマンドが環境により動作を変えてしまったのでしょうか。とにかく、Makefile内で記述して実行しているcopyコマンドやdelコマンドがうまく動作しないのです。
makeコマンドを介して実行されるcopyコマンドやdelコマンドの実行時ディレクトリがmakeコマンドが置かれているディレクトリになってしまうようで、Makefileに記述されているファイルパスと一致せず、コピーに失敗するのです。
いろいろパスをいじってみてもうまく動かないので、copyコマンドをcpコマンドに、delコマンドをrmコマンドに変更し、パスの区切り文字を \ から / に変更することで動くようになりました。
cpやrmが使えたのは以前、C言語を勉強しようと思ってインストールしていたmsysのおかげのようですが、ひょっとするとこいつが悪さをしていたのかもしれません。
まあ、Makefileは若干変更しないといけないのですが、いくつもバッチファイルがあるよりずいぶん便利になりました。