OSを作ってみよう day009

2013-12-03

OSを作ってみよう day009

「OS自作入門」は、三日目に突入。 相変わらずアセンブラだが、ついにC言語に突入する。 昨日まで作っていたのは、IPL ( Initial Program Loader ???) というらしい。  

[引用] ブートセクタ - Wikipedia
BIOSがブートデバイスを選択すると、そのデバイスの第一セクタ(後述するMBRまたはPBR)をコピーし、0x7C00 番地に配置して実行する。

0x7C00番地というのはお約束らしい。 512バイトなのも、マスターブートレコードのお約束。 IPLにエラー処理&リトライ処理を追加したりする。Makefileの変数対応とかあったので、Mac用に編集した俺のMakefileも修正してみた。  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MAKE = make
NASM = nasm
DD = dd
RM = rm
IMGNAME = helloos.img

# デフォルト動作

default :
$(MAKE) img

# コマンド

img :
$(NASM) -f bin -o $(IMGNAME) ipl.nas

install :
$(DD) if=$(IMGNAME) of=/dev/disk1s1 bs=512k

clean :
$(RM) $(IMGNAME)

ちょっぴり変数化しただけで、内容は変わってないっす。   三日目の最初のiplは、ロードに失敗した場合にLoad Errorと表示するだけのプログラム。 基本的には起こらないエラーなので、何も表示されなければOKなのだが・・・画面に輝く「Load Error」の文字・・・ 何故なんだ・・・。やはりフロッピーとUSBメモリの差か?   アセンブラをあまり理解せずにただ突き進んでいたので、ここで壁に突き当たってしまった。 しょうがないので、二日目をおさらいしてiplの内容を正確に把握することにした。 座学は地味だが、ここで不十分な理解でいると痛い目に会いそうなので我慢。 続く・・・。