30日でできる自作OS入門 1日目
これからゆっくりと『30日でできる自作OS入門』を進めていきたいと思います。
- 作者: 川合秀実
- 出版社/メーカー: マイナビ出版
- 発売日: 2006/03/01
- メディア: Kindle版
- この商品を含むブログを見る
この本を進めていく中で、僕がやったこととか詰まったところとかを書いていこうと思います。
いつ終わるかは分かりませんが頑張ります。
1日目
まずは、バイナリエディタBzでひたすら16進数を入力していきます。
やっとのことで、0000082まで入力したら、あとは168000まで00が続く…気が遠くなります。
手で打つような時間はないので、もちろんプログラムを使います。
javaで、バイナリで、00を任意の回数書き込むプログラムを作成しました。
import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class WriteBinaryFile { public static void main(String[] args) { FileOutputStream fileout = null; BufferedOutputStream buffout = null; try { buffout = new BufferedOutputStream(new FileOutputStream("helloos.img",true)); byte tmp = 00; for(int i = 0;i<1474560-100;i++) // まだ若干の調整が必要 buffout.write(tmp); buffout.flush(); } catch (Exception e){ e.printStackTrace(); } finally { try { buffout.close(); } catch (IOException e) { e.printStackTrace(); } } } }
参考:
バイナリデータ書き込み FileOutputStream,BufferedOutputStream,DataOutputStream | Java入門~bituse~
ちょっと00の数が多すぎたので168000まで減らさなければいけません。
あとは、書籍に書いてある通りに進める。
すると、
Hello, worldと表示するOSができる。
訳も分からず文字を打っていっただけなので感動した。
その後、CPUは、0と1しか扱えないよという話が書いてあった。
その後は、今書いたのをアセンブラで書こうという話。
かなりそれっぽいプログラムだけ書いてみました。(ちょっと大変だったけど)
3年になってアセンブラを扱う授業がないので久々にアセンブラに触れたので楽しかった。
書籍に記載されている「asm.bat」はCD-ROMの中のprojects\01_day\helloos2の中にありました。
(どこにあるのかだいぶ探しました。)
いざ実行
あれ、hello, worldが表示されない。
一体、何を間違えていたのか小一時間迷う。
プログラム中で、0xebなのに0xedにしてたという人為的ミスだった。
成功しない人は、何らかの記述を間違えてるから確認を怠らないように!
成功
メッセージ部分を変えれば任意の文字列がOSに表示される。
というわけで、だいぶ時間がかかって1日目が終了。
次は、2日目です。