swampの忘備録

エンジニアが、情報系のイベント行ったときとかプログラミングなどの情報工学について忘備録として書くつもりです。

30日でできる自作OS入門 1日目

これからゆっくりと『30日でできる自作OS入門』を進めていきたいと思います。

この本を進めていく中で、僕がやったこととか詰まったところとかを書いていこうと思います。
いつ終わるかは分かりませんが頑張ります。

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まで減らさなければいけません。

あとは、書籍に書いてある通りに進める。

すると、

f:id:swamptk:20180127135652p:plain

Hello, worldと表示するOSができる。

訳も分からず文字を打っていっただけなので感動した。

その後、CPUは、0と1しか扱えないよという話が書いてあった。

その後は、今書いたのをアセンブラで書こうという話。

かなりそれっぽいプログラムだけ書いてみました。(ちょっと大変だったけど)

3年になってアセンブラを扱う授業がないので久々にアセンブラに触れたので楽しかった。

書籍に記載されている「asm.bat」はCD-ROMの中のprojects\01_day\helloos2の中にありました。
(どこにあるのかだいぶ探しました。)

いざ実行
f:id:swamptk:20180127153106p:plain

あれ、hello, worldが表示されない。

一体、何を間違えていたのか小一時間迷う。

プログラム中で、0xebなのに0xedにしてたという人為的ミスだった。
成功しない人は、何らかの記述を間違えてるから確認を怠らないように!

成功
f:id:swamptk:20180127154035p:plain


メッセージ部分を変えれば任意の文字列がOSに表示される。
f:id:swamptk:20180127154314p:plain

というわけで、だいぶ時間がかかって1日目が終了。

次は、2日目です。