<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>プログラムの森</title>
    <description>プログラミング関連での備忘録なんかを載せています。</description>
    <link>http://oslite.ky-3.net/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>30日でできる！OS自作入門　〜4日目-その2〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/9/&quot;&gt;前へ&lt;/a&gt;　 次へ&lt;/div&gt;
&lt;br /&gt;
4日目 その2を始めます。&lt;br /&gt;
今回は、今までやってきたことの集大成とでも言うべき事をやります。&lt;br /&gt;
&lt;br /&gt;
何をやるかというと、ついに、デスクトップ(っぽいもの)を描画します。&lt;br /&gt;
&lt;br /&gt;
まずは、実行画面を。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/74c6b082.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1258292840/&quot; alt=&quot;74c6b082.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
いよいよ来ましたね！デスクトップですよ！&lt;br /&gt;
どう見てもデスクトップです。&lt;br /&gt;
&lt;br /&gt;
まぁ、絵に描いた餅ですが・・・・・・&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
やっていることは単純で、4角形を書く関数で、14個の色違いの四角を描いているだけです。&lt;br /&gt;
&lt;br /&gt;
でも、これから処理を書き込んでいけば、本物のOSになって行くはずです。&lt;br /&gt;
楽しみです。&lt;br /&gt;
&lt;br /&gt;
次回は、5日目「構造体と文字表示とGTD/IDT初期化」です。&lt;br /&gt;
構造体は分かりますが、文字表示とGDT/IDT初期化の部分はなかなかにボリュームがありそうです。&lt;br /&gt;
&lt;br /&gt;
気合を入れて頑張ります。&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/9/&quot;&gt;前へ&lt;/a&gt;　 次へ&lt;/div&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C4%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE2%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜4日目-その1〜</title>
      <description>&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/8/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/10/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
4日目です。&lt;br /&gt;
内容は、「C言語と画面表示の練習」です。&lt;br /&gt;
&lt;br /&gt;
３日目はかなり苦労しましたが、４日目は3日目を下地にしてC言語とアセンブラでサクサクと作っていくと言う内容なので、特に苦労する部分はありません。&lt;br /&gt;
&lt;br /&gt;
今回は画面に色を塗ってみましょうと言う趣旨です。&lt;br /&gt;
やることもそんなに難しくなく、ビデオアクセス用アドレス空間に対し、色に対応する値を入れていくというものです。&lt;br /&gt;
&lt;br /&gt;
C言語で直接ビデオアクセス様アドレス空間に値をセットすることは出来ないので、値をセットするところをアセンブラで作ります。&lt;br /&gt;
&lt;br /&gt;
ソースは結構長いので割愛しますが、この章では「ポインタ」が出てきます。&lt;br /&gt;
書店でよく見かけるC言語の本よりも、アセンブラを下地にして説明している為、とてもわかりやすいと思います。&lt;br /&gt;
&lt;br /&gt;
ちなみに、4日目 その1が終わったところで、画面はこんな感じになっています。&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/Screenshot001-QEMU.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1258286876/&quot; alt=&quot;Screenshot001-QEMU.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
目がチカチカしますね。&lt;br /&gt;
&lt;br /&gt;
次回は「4日目-その2」です。&lt;br /&gt;
いよいよ、OSっぽい画面が表示されます。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/8/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/10/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C4%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE1%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜3日目-その2〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/7/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/9/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
3日目　その2です。&lt;br /&gt;
&lt;br /&gt;
更新が1週間空きましたが、別にサボっていたわけではありません。&lt;br /&gt;
著者製ツールを極力使わないという自分ルールに縛られていました。&lt;br /&gt;
&lt;br /&gt;
具体的にいうと、ld等のリンカに当たる、obj2bim と bim2hrbというツールです。&lt;br /&gt;
このツールを使用せずに、アセンブラで作成したオブジェクトファイルと、&lt;br /&gt;
C言語で作成したオブジェクトファイルをリンクしようとしていました。&lt;br /&gt;
&lt;br /&gt;
とりあえず、順番にいきます。&lt;br /&gt;
今までアセンブラのみでしたが、今回からC言語が加わっています。&lt;br /&gt;
それに伴って、OSの本体であるoslite.sysの作り方が大きく変わっています。&lt;br /&gt;
&lt;br /&gt;
流れを書くと、
&lt;ol&gt;
    &lt;li&gt;アセンブラでOSのヘッダー部分を記述(asmhead.asm)&lt;/li&gt;
    &lt;li&gt;C言語でOSの処理部分を記述(bootpack.c)&lt;/li&gt;
    &lt;li&gt;アセンブラでC言語だけでは手に負えない部分を記述(nasmfanc.asm)&lt;/li&gt;
    &lt;li&gt;2と3ののファイルをリンカで結合してoslite.sysを作成&lt;/li&gt;
    &lt;li&gt;1のファイルと4で出来たファイルをcatコマンドで結合&lt;/li&gt;
    &lt;li&gt;それを、フロッピーのイメージの中にファイルとして保存する&lt;/li&gt;
&lt;/ol&gt;
となります。&lt;br /&gt;
流れだけ書くとそんなに難しくない様に感じます・・・・・・が、&lt;br /&gt;
実際にやってみると、こんなに難しい物なのか！っていうのが分かりました。&lt;br /&gt;
※「30日でできる！OS自作入門」が難しいわけではありません。&lt;br /&gt;
私が変な部分にこだわっている事で難しくしてしまっただけの話です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
「30日でできる！OS自作入門」ではHRBという形式の、&lt;br /&gt;
独自の実行ファイル形式を作成していますが、&lt;br /&gt;
私はLinuxで使用されているELFという形式の実行ファイルを作りたくて、&lt;br /&gt;
調べたり、色々試してみたりしていたら、1週間たってしまいました。&lt;br /&gt;
&lt;br /&gt;
結果としては、今の私では、手に負えませんでした。&lt;br /&gt;
HRB形式とELF形式の実行ファイルのヘッダ部分の取扱いの違いが&lt;br /&gt;
どうしても今の私には分かりませんでした。&lt;br /&gt;
と言うことで、落としどころとしてHRB形式の実行ファイルを使用するが、&lt;br /&gt;
著者製のツールは使用せず、ldにて出力する事にしました。&lt;br /&gt;
&lt;br /&gt;
やり方は、すでに調べてくれている人がいた為、以下の方法で出力します。&lt;br /&gt;
&lt;br /&gt;
まず初めに、startup.oというファイルを作成します。&lt;br /&gt;
これは、下にでてくるoslite.ldsに読み込まれせるもので、&lt;br /&gt;
どの関数が、最初に実行されるかを記述した物です。&lt;br /&gt;
(スタートアップルーチンって言う奴です。普段ならmainって書く関数です)&lt;br /&gt;
&lt;br /&gt;
src/startup.cとして作成しました。&lt;br /&gt;
&lt;hr /&gt;
&lt;pre&gt;
void LiteMain(void);

void LiteStartup(void)
{
        /* 将来LiteMainの実行に先立って何かしたくなったらここに書き足す*/

        LiteMain();

        /* 将来、LiteMainの終了後に何か処理をさせたくなったら、ここに書き足す*/

        return;
}
&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;
次に、ldsというディレクトリを作成し、&lt;br /&gt;
その中にoslite.ldsというファイルを作成する。&lt;br /&gt;
このファイルの中に「LONG(LiteStartup - 0x20)」と言う部分があり、上の「startup.c」とつながります。&lt;br /&gt;
&lt;br /&gt;
oslite.ldsを開いて、以下のとおり記述します。&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
OUTPUT_FORMAT(binary)
OUTPUT_ARCH(i386)

INPUT(./bin/startup.o)

SECTIONS {
     .head 0x0 :
     {
         LONG((ADDR(.bss) + SIZEOF(.bss) + 0xfff) &amp;amp; ~ 0xfff)
         BYTE(0x4f) BYTE(0x53) BYTE(0x4c) BYTE(0x69)
         LONG(0x0)
         LONG(ADDR(.data))
         LONG(SIZEOF(.data))
         LONG(LOADADDR(.data))
         LONG(0xe9000000)
         LONG(LiteStartup - 0x20)
         LONG((ADDR(.bss) + SIZEOF(.bss) + 0xf) &amp;amp; ~ 0xf)
     }

     .text ADDR(.head) + SIZEOF(.head) :
         SUBALIGN (1)
     {
         *(.text)
     }

     .data 0x00000400 :
         AT ( LOADADDR(.text) + SIZEOF(.text) ) SUBALIGN (4)
     {
         *(.data)
         *(.rodata*)
     }

     .bss  :
         AT ( LOADADDR(.data) + SIZEOF(.data) ) SUBALIGN (4)
     {
        *(.bss)
     }

     /DISCARD/ : { *(*) }
}
&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
で、保存をしたら、Makefileを以下の様に書き換えます。&lt;br /&gt;
Makefileは、「3日目　その1」からずいぶん色々な物が増えています&lt;br /&gt;
それと、フロッピーのイメージは「mformat」と「 mcopy」という&lt;br /&gt;
素敵なコマンドが見つかった為、そちらで作成することにしました。&lt;br /&gt;
(mformatがフロッピーのイメージを作成するコマンドで、&lt;br /&gt;
mcopyがフロッピーの中にファイルを入れるコマンドです)&lt;br /&gt;
&lt;hr /&gt;
&lt;pre&gt;
NASM            = nasm
CC              = gcc
CFLAGS          =  -fno-builtin -fno-common -Os -Wall -nostdinc -I. -c

SRC             = ./src

oslite.img : ./bin/ipl.bin ./bin/oslite.sys Makefile
        # フロッピーディスクのイメージを作成して、IPL部分を書き込む
        mformat -f 1440 -C -B ./bin/ipl.bin -i ./bin/fdimage/oslite.img ::

        # イメージファイルにoslite.sysを書き込み
        mcopy -i ./bin/fdimage/oslite.img ./bin/oslite.sys ::


./bin/ipl.bin : $(SRC)/ipl.asm Makefile
        $(NASM) -f bin -o ./bin/ipl.bin $(SRC)/ipl.asm -l ./lst/ipl.lst

./bin/oslite.sys : ./bin/asmhead.bin ./bin/oslite.bin Makefile
        cat ./bin/asmhead.bin ./bin/oslite.bin &amp;gt; ./bin/oslite.sys


./bin/oslite.bin : ./bin/bootpack.bin ./bin/nasmfunc.obj ./bin/startup.o Makefile
        ld -e LiteMain --Map ./map/oslite.map -n -Ttext 0xc200 -T ./lds/oslite.lds　\
		-static -o ./bin/oslite.bin ./bin/bootpack.bin ./bin/nasmfunc.obj

./bin/asmhead.bin : $(SRC)/asmhead.asm Makefile
        $(NASM) -f bin -o ./bin/asmhead.bin $(SRC)/asmhead.asm -l ./lst/asmhead.lst

./bin/bootpack.bin : $(SRC)/bootpack.c Makefile
        $(CC) $(CFLAGS) $(SRC)/bootpack.c -o ./bin/bootpack.bin

./bin/nasmfunc.obj : $(SRC)/nasmfunc.asm Makefile
        $(NASM) -f elf $(SRC)/nasmfunc.asm -o ./bin/nasmfunc.obj -l ./lst/nasmfunc.lst

./bin/startup.o : $(SRC)/startup.c Makefile
        $(CC) $(CFLAGS) $(SRC)/startup.c -o ./bin/startup.o


clean :
        rm -f ./lst/*.lst
        rm -f ./bin/*.bin
        rm -f ./bin/*.o
        rm -f ./bin/*.obj
        rm -f ./bin/*.sys
        rm -f ./map/*.map
        rm -f ./bin/fdimage/*.img

&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
これでmakeを実行してどうなるかを試します。&lt;br /&gt;
ちなみに、今までVMWareを使用していましたが、&lt;br /&gt;
今回からはqemuを使用します。&lt;br /&gt;
&lt;br /&gt;
理由は、デバッグ出来るからです。&lt;br /&gt;
といっても、ソースレベルのデバッグではなく、&lt;br /&gt;
機械語(アセンブラ)レベルのデバッグです。&lt;br /&gt;
&lt;br /&gt;
でも、これがあるのと無いのでは、大きく違います。&lt;br /&gt;
&lt;br /&gt;
デバッグのやり方は、&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
$ qemu -s -S -fda ./bin/fdimage/oslite.img -redir tcp:5555:127.0.0.1:1234 &amp;amp;

&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
でqemuを実行して、別のコンソールで&lt;br /&gt;
&lt;hr /&gt;
$ gdb&lt;br /&gt;
&lt;br /&gt;
(gdb) target remote 127.0.0.1:1234&lt;br /&gt;
&amp;uarr;qemuに接続&lt;br /&gt;
&lt;br /&gt;
(gdb) display/i $pc&lt;br /&gt;
&amp;uarr;アセンブリ言語に変換して表示&lt;br /&gt;
&lt;br /&gt;
(gdb) break *0x00XXXXXX&lt;br /&gt;
&amp;uarr;メモリにブレークポイントをつける(XXXXの部分がアドレスになります)&lt;br /&gt;
&lt;br /&gt;
(gdb) c&lt;br /&gt;
&amp;uarr;実行&lt;br /&gt;
&lt;br /&gt;
(gdb) nexti&lt;br /&gt;
&amp;uarr;次のアドレスに移動&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
と言う感じです。&lt;br /&gt;
&lt;br /&gt;
この方法が分かってから、一気にやりやすくなりました。&lt;br /&gt;
(同時に、ELF形式を使うのを諦められました)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみに、実行している画面はというと・・・&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/f52aea57.png&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;f52aea57.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1258275112/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
まだ真っ黒なんです。これが。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
と言う事で、3日目 その2は以上です。&lt;br /&gt;
ひじょ〜に難産でした。&lt;br /&gt;
&lt;br /&gt;
次回は、4日目「C言語と画面表示の練習」です。&lt;br /&gt;
次は少し画面に色がつく予定です。&lt;br /&gt;
これから少しずつOSらしくなって行く様なので楽しみです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/7/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/9/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C3%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE2%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜3日目-その1〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/5/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/8/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
3日目を始めます。&lt;br /&gt;
&lt;br /&gt;
まずは2日目のおさらいですが、2日目はプログラム本体の部分をアセンブリ言語で記述したのと、ブートセクタのみをアセンブルするようにしました。&lt;br /&gt;
また、Makefileを作ってアセンブルからフロッピーディスクイメージ作成までをコマンド一発で行えるようにしました。&lt;br /&gt;
&lt;br /&gt;
３日目の内容は、「32ビットモード突入とC言語導入」です。&lt;br /&gt;
まず、今まで作ったものは画面に文字を表示するだけで、他には何もしません。でも、本来はここからOSを読み出さなければいけないので、ブートセクタ以降のセクタを読み込んでいきます。&lt;br /&gt;
&lt;br /&gt;
今回大きく変わったのは、以下の部分です。&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
; プログラム本体
entry:
	MOV	AX,0		; レジスタ初期化
	MOV	SS,AX		
	MOV	SP,0x7c00
	MOV	DS,AX

; ディスクを読む
	MOV	AX, 0x0820
	MOV	ES, AX
	MOV	CH, 0	; シリンダ0
	MOV	DH, 0	; ヘッド0
	MOV	CL, 2	; セクタ2

readloop:
	MOV	SI, 0	; 失敗回数を数えるレジスタ

retry:
	MOV	AH, 0x02	; AH=0x02 : こうする事でディスク読み込み
	MOV	AL, 1		; 1セクタ
	MOV	BX, 0
	MOV	DL, 0x00	; Aドライブ
	INT	0x13		; ディスクBIOS呼び出し
	JNC	next		; エラーがなあければnextに飛ぶ
	ADD	SI, 1		; SIに1を足す
	CMP	SI, 5		; SIを5と比較
	JAE	error		; SI &amp;gt;= 5 だったら、、errorへとぶ
	MOV	AH, 0x00	; |
	MOV	DL, 0x00	; | Aドライブ
	INT	0x13		; | ドライブのリセット
	JMP	retry
	
next:
	MOV	AX, ES		; | アドレスを0x200すすめる
	ADD	AX, 0x0020	; |
	MOV	ES, AX		; | ADD ES, 0x020ができないからこうしている
	ADD	CL, 1
	CMP	CL, 18		; CLと18比較
	JBE	readloop	; CL &amp;lt;= 18 だったらreadloopへ
	MOV	CL, 1	
	ADD	DH, 1
	CMP	DH, 2
	JB	readloop	; DH &amp;lt; 2だったらreadloopへ飛ぶ
	MOV	DH, 0
	ADD	CH, 1
	CMP	CH,CYLS
	JB	readloop	; CH &amp;lt; CYLS だったらreadloopへ飛ぶ

; ここまででフロッピーディスクの先頭から180KByteまでを読み込んだので、
; 次はOS部分を実行させる

	MOV	[0x0ff0], CH	; IPLがどこまで読んだのかをメモ
	JMP	0xc200
&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
何をしているかというと、
&lt;ol&gt;
    &lt;li&gt;ブートセクタの部分(フロッピーの最初の512byte)は起動時にメモリに読み込まれているので、その次のセクタから、10シリンダ分(180kbyte)までをメモリに読み込む。&lt;/li&gt;
    &lt;li&gt;読み込んだ結果、メモリの0xc200にOS部分の先頭があるはずなので、そこにJMP命令で飛んでいよいよOS部分の処理を走らせる(ブートセクタ卒業)&lt;/li&gt;
&lt;/ol&gt;
という感じです。&lt;br /&gt;
&lt;br /&gt;
これで、ブートセクタ部分の開発はひとまず終了の様です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
それと今回は、OSの本体部分の着手もしました。&lt;br /&gt;
以下がOS本体部分のソースです。&lt;br /&gt;
ファイル名は、「oslite.asm」です。&lt;br /&gt;
※「30日でできる！OS自作入門」ではhariboteOSという名前で開発を行っていますが、それじゃつまらないので、私はosliteと言う名前にしています。&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
; oslite-os
; TAB=8

	ORG	0xc200
	
	MOV	AL, 0x13	; VGAグラフィックス, 320x320x8bitカラー
	MOV	AH, 0x00
	INT	0x10

fin:
	HLT
	JMP fin
&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;
で、このOS部分をフロッピーにファイルとして保存するのですが、ここでまた著者製のedimg.exeでフロッピーに書き込むと言うことを行っています。&lt;br /&gt;
2日目では、catコマンドを使用してブートセクタとそれ以降のデータをくっつけてイメージファイルを作りましたが、今回は単純にくっつけるだけではなく、その中にOS部分を書き込まなければいけなくなりました。&lt;br /&gt;
&lt;br /&gt;
色々と調べていたら、ddコマンドで既存のファイルの特定の場所を上書き出来るという事が分かった為、Makefileを以下の様に変更しました。&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
# フロッピーディスク作成

helloos.img : ./bin/ipl.bin ./bin/oslite.sys ./bin/initflpimg.bin Makefile
	# フロッピーディスクのイメージの元となるファイルをコピー
	cp ./bin/initflpimg.bin ./bin/fdimage/oslite.img

	# iplを書き込み
	dd if=./bin/ipl.bin of=./bin/fdimage/oslite.img count=1 bs=512 conv=notrunc

	# イメージファイルの0x002600以降にoslite.sysというファイル名を書き込み
	dd if=./bin/osname.bin of=./bin/fdimage/oslite.img count=1 bs=512 seek=19 conv=notrunc
	
	# イメージファイルの0x004200以降にOS部分を書き込み
	dd if=./bin/oslite.sys of=./bin/fdimage/oslite.img count=1 bs=512 seek=33 conv=notrunc

./bin/ipl.bin : ./src/ipl.asm Makefile
	nasm ./src/ipl.asm -o ./bin/ipl.bin -l ipl.lst


./bin/oslite.sys : ./src/oslite.asm Makefile
	nasm ./src/oslite.asm -o ./bin/oslite.sys -l oslite.lst


clean : 
	rm -f ipl.lst
	rm -f ./bin/ipl.bin
	rm -f ./bin/fdimage/*.img

&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
なんか、FAT12のファイルフォーマットを結構無視している気がしてきましたが、困ってしまうまではこの方法で行きます。&lt;br /&gt;
※付属CDの中をよくみたら、edimg.exeのC言語のソースファイルがありました。本格的に困ったら、コンパイルして使わせてもらおうと思います。著者様、ありがとうございます。&lt;br /&gt;
&lt;br /&gt;
ここまで出来たので、makeを実行しイメージファイルを作成しました。&lt;br /&gt;
で、出来たイメージファイルを早速VMWareに読み込ませて起動してみると・・・・&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/20c4495c.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257672737/&quot; alt=&quot;20c4495c.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
できました〜。&lt;br /&gt;
え？黒いのは正しいですよ。&lt;br /&gt;
OS部分でグラフィックモードと言う物に変更しているので、今まであったカーソルすら消えています。&lt;br /&gt;
&lt;br /&gt;
さて、今回学んだことをまとめると、&lt;br /&gt;
ブートセクタ部分は結局512Byte分しかないので、複雑な事をやるのなら他のセクタも読み込まなければいけない。&lt;br /&gt;
その為、ブートセクタでは他のセクタを読み込んで、次のプログラムがある場所へ処理を移すと言うことをやる。&lt;br /&gt;
と言うことになりますね。&lt;br /&gt;
&lt;br /&gt;
漠然としか分かっていなかったブートの仕組みが、実際作ってみて理解出来ました。&lt;br /&gt;
次回は、3日目 その2として、32bitモードへの移行と、C言語での開発を行います。&lt;br /&gt;
&lt;br /&gt;
いよいよC言語がでてきます。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/5/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/8/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C3%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE1%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜2日目-その2〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/4/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/7/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
2日目　その２です。&lt;br /&gt;
&lt;br /&gt;
2日目　その１までで、大分プログラムらしくなりましたが、&lt;br /&gt;
未だにブートセクタ以外の場所が残っています。&lt;br /&gt;
&lt;br /&gt;
これは、調べてみるとどうやらFAT12フォーマットの仕様の部分を、アセンブラで直接書き込んでいるのが原因の様です。&lt;br /&gt;
&lt;br /&gt;
1日目のソースの、&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
; 以下はブートセクタ以外の部分の記述

       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

&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
の部分ですね。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これは何を意味しているのか分かりませんが、うちのPCのVMWareに入っているWIndows 7 RC版でフロッピーディスクのイメージをフォーマットして、バイナリエディタでそのイメージを開いて見たところ、512Byte目から「F0 FF FF 00」、5120Byte目から「F0 FF FF 00」がありました。&lt;br /&gt;
&lt;br /&gt;
よくわからないけど、FAT12の仕様だと言うことで今のところは納得しようと思います。&lt;br /&gt;
&lt;br /&gt;
で、この部分をわざわざアセンブラで記述しているのが無駄だと言うことで、今回はブートセクタ部分の最初の512Byteだけをアセンブラで作るように変更します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ここでですが、私の環境は以前にも言いましたがUbuntuです。&lt;br /&gt;
「30日でできる！OS自作入門」はWindowsを想定して書かれていて、ちょくちょく作者が作ったWindowsのツールが出てきます。&lt;br /&gt;
今回も、読み進めて行ったところedimg.exeという作者が作ったツールを使っています。&lt;br /&gt;
ですが、私は使いたくありません。&lt;br /&gt;
一応、やっている事はブランクディスクのイメージを読み込んで、先頭の512byteの部分にアセンブラで作ったブートセクタを書き込むと言う説明が書いていましたが、その読み込み元のブランクディスクイメージが、59byteしかなく、中身をみてもFAT12フォーマットと言うわけでもなく、よく分かりませんでした。&lt;br /&gt;
&lt;br /&gt;
と言うことで、以下の方法をとろうと思います。
&lt;ul&gt;
    &lt;li&gt;2日目まででできているフロッピーイメージの512Byte未満の部分を削除して、このバイナリファイルをsrc.binとして保存します。(このファイルは今後も使うかもしれないのでとっておきます。)&lt;/li&gt;
    &lt;li&gt;アセンブラでブートセクタをアセンブルします。(ipl.binという名前にします)&lt;/li&gt;
    &lt;li&gt;catコマンドを使用して、アセンブル結果とsrc.binを結合します。(cat ipl.bin src.bin &amp;gt; helloos4.imgという感じです)&lt;/li&gt;
&lt;/ul&gt;
今後、ブートセクタから本格的にOS部分を読み出すらしいので、その時は困ってしまいますが、当面はこれでしのぎます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
早速ソースの修正をします。&lt;br /&gt;
まぁ、やることはを上で書いたソース部分を削除するだけなんですが・・・・・&lt;br /&gt;
&lt;br /&gt;
賛否両論あると思いますが、私の場合は、書いたソースをなかなか消す事ができません。&lt;br /&gt;
なので、今回はソースを消すのではなく、コメントアウトします。&lt;br /&gt;
※IBMの人とコードレビューをしたことがあるのですが、その人はいらない部分は削除するべきって言っていました。まぁ、反対はしません。ここでは、本当にいらなくなれば自然ときえるでしょ〜っていうスタンスで行きます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/3e9fe421.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257585245/&quot; alt=&quot;3e9fe421.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
これでアセンブルします。&lt;br /&gt;
&lt;br /&gt;
そして、今回からのコマンド、&lt;br /&gt;
cat ipl.bin src.bin &amp;gt; helloos4.img&lt;br /&gt;
を実行します。&lt;br /&gt;
&lt;br /&gt;
これで、 helloos4.imgが作成されたので、VMWareで実行してみます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/c23d267d.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257585518/&quot; alt=&quot;c23d267d.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
まぁ、大したことしていないので普通に実行できました。&lt;br /&gt;
&lt;br /&gt;
とりあえずこれで、アセンブルするのはブートセクタの512Byteだけになったので、解析しやすいようにリストファイルと言うものを出します。&lt;br /&gt;
&lt;br /&gt;
nasmに一つオプションをつけます。&lt;br /&gt;
$ nasm helloos3.asm -o ipl.bin -l ipl.lst&lt;br /&gt;
これを実行すると、ipl.lstと言うファイルが出来上がりました。&lt;br /&gt;
&lt;br /&gt;
中身を覗いてみると・・・あれまー、超便利。&lt;br /&gt;
こ〜んな感じでどんな機械語に変換されたかが一目瞭然です。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/b8f5dd46.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257586006/&quot; alt=&quot;b8f5dd46.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
最後にMakefileを作ります。&lt;br /&gt;
私の環境にはすでにmakeコマンドが入っているので、Makefileを作るだけでした。&lt;br /&gt;
&lt;br /&gt;
どうせならディレクトリも分けておこうと思い、srcとかbinとかのディレクトリを作成し、Makefileを以下の様に作りました。&lt;br /&gt;
&lt;hr /&gt;
&lt;pre&gt;
# フロッピーディスク作成

helloos.img : ./bin/ipl.bin Makefile
        cat ./bin/ipl.bin ./bin/src.bin &amp;gt;./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
&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
これで、makeを実行すればフロッピーディスクのイメージファイルが自動的にできます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2日目の内容は以上です。&lt;br /&gt;
今回の内容としては難しいところはあまりありませんでした。&lt;br /&gt;
&lt;br /&gt;
次回は、「32ビットモード突入とC言語導入」です。&lt;br /&gt;
いよいよC言語がでてきます。&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/4/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/7/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C2%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE2%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜2日目-その1〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/3/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/5/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
それでは、2日目をはじめます。&lt;br /&gt;
&lt;br /&gt;
1日目は、バイナリエディタで直接、ブートできるフロッピーディスクを作成する事と、同じ物をアセンブラを使用して作成しました。&lt;br /&gt;
&lt;br /&gt;
2日目は、「アセンブラ学習とMakefile入門」です。&lt;br /&gt;
1日目に作成したアセンブラのソースでは、まだプログラム本体の機械語を直接DB命令で書いています。&lt;br /&gt;
今回は、その部分をアセンブリ言語に直すことをします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
「30日でできる！OS自作入門」を読みながら、修正します。&lt;br /&gt;
&lt;br /&gt;
まず、ソースの先頭に、「ORG　0x7c00」を記入します。&lt;br /&gt;
これは、メモリ上のどの位置にこのプログラムが読み込まれるかと言うのを&lt;br /&gt;
アセンブラに教えている物の様です。&lt;br /&gt;
&lt;br /&gt;
その下に、「JMP entry」を記入します。&lt;br /&gt;
これは、プログラム本体につけたラベル部分に飛んでねっていう命令です。&lt;br /&gt;
あと、JMP命令を書いたことで「DB 0xeb, 0x4e, 0x90」の部分の最初の0xebと0x4eが消せます。&lt;br /&gt;
これは、「JMP entry」相当の機械語だったためです。(0x90はまた別なのでこいつだけ残しておきます。)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
また、プログラム本体を、以下の様に書き換えます。&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;pre&gt;
; プログラム本体
entry:
        MOV     AX,0            ; レジスタ初期化
        MOV     SS,AX
        MOV     SP,0x7c00
        MOV     DS,AX
        MOV     ES,AX

        MOV     SI, msg

putloop:
        MOV     AL,[SI]
        ADD     SI,1
        CMP     AL,0
        JE      fin
        MOV     AH,0x0e
        MOV     BX,15
        INT     0x10
        JMP     putloop

fin:
        HLT                     ; 何かあるまでCPUを停止
        JMP     fin             ; 無限ループ

msg:
        DB      0x0a, 0x0a      ; 改行２つ
        DB      &amp;quot;hello, world&amp;quot;
        DB      0x0a            ; 改行
        DB      0

        TIMES   0x1fe-($-$$) DB 0       ; 0x001feまでを0x00で埋める

        DB      0x55, 0xaa
&lt;/pre&gt;
&lt;hr /&gt;
&lt;br /&gt;
大分、プログラムらしくなって来ました。&lt;br /&gt;
&lt;br /&gt;
ソースの解説をみると、大事なところはこんな所でしょうか。
&lt;ul&gt;
    &lt;li&gt;ORG命令はプログラムの起点となるメモリの位置をアセンブラに教える為に使う。今回の場合、 「0x7c00」になっているのは、PC/AT互換機の仕様で、ブートはそこから必ず始めなければいけないと決まっているから 。&lt;/li&gt;
    &lt;li&gt;JMP命令は、指定したメモリの番地に強制的に飛ぶ。ラベルが指定されている場合は、そのラベルがついた位置へ飛ぶ。(この場合、entry:ラベルの次のMOV命令のところに飛ぶと思う)&lt;/li&gt;
    &lt;li&gt;MOV AX,0」はC言語の「AX=0」と同じ意味になる。&lt;/li&gt;
    &lt;li&gt;AXとか、SSとかはレジスタ(メモリよりも早くて容量が小さい記憶領域)&lt;/li&gt;
    &lt;li&gt;[SI]という形で代入された場合は、レジスタではなくメモリの位置になる。(よ〜くみると、メモリっぽい形にみえるかも・・・)&lt;/li&gt;
    &lt;li&gt;CMP命令とJE命令は、一塊でC言語のif文相当の命令を書ける。&lt;/li&gt;
    &lt;li&gt;HLT命令は、CPUをちょっとだけ休止させる。(sleepと同じ様な命令だとおもう)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
今回はここまでです。&lt;br /&gt;
次回は、2日目のその2として、アセンブラでフロッピーイメージを作るのは無駄が多いので、ブートセクタだけを作る様に変更しましょ。ついでにMakefileを使いましょ。と言うことの様です。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/3/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/5/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
--&lt;br /&gt;
勘違いしている箇所があれば、指摘して頂けると助かります。&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C2%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE1%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜1日目-その2〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/2/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/4/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
1日目　その2です。&lt;br /&gt;
&lt;br /&gt;
今回は、アセンブラを使用してブート部分を作ります。&lt;br /&gt;
「30日でできる！OS自作入門」の中では、DB命令でバイナリエディタがわりに1byteずつ埋めるなんて荒行まで載っていますが、正直そんなのは面倒くさいのと、やっても得る物は少ないと感じたため、その後に書いている、ソースっぽい部分まで飛びました。&lt;br /&gt;
&lt;br /&gt;
ソースっぽい所は真面目に打ち込みます。&lt;br /&gt;
ファイル名は、「helloos2.asm」です。&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/f7fa0758.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257537271/&quot; alt=&quot;f7fa0758.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
よし、打ち込みました。&lt;br /&gt;
&lt;br /&gt;
さて、「30日でできる！OS自作入門」ではnaskというアセンブラを使用している様です。&lt;br /&gt;
naskと言うのは、著者がnasmを改良して作った物らしいですが、私はせっかくなのでnasmを使用したいと思います。&lt;br /&gt;
※やっぱり標準的なものを学びたいですし。&lt;br /&gt;
&lt;br /&gt;
と言うことで、nasmをインストールして、&lt;br /&gt;
$ nasm helloos2.asm -o helloos2.img&lt;br /&gt;
を打ち込みました。&lt;br /&gt;
&lt;br /&gt;
・・・&lt;br /&gt;
・・・・・・&lt;br /&gt;
・・・・・・・・・&lt;br /&gt;
&lt;br /&gt;
helloos2.asm:39: error: invalid operand type&lt;br /&gt;
helloos2.asm:48: error: parser: instruction expected&lt;br /&gt;
&lt;br /&gt;
エラーでとります・・・&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
調べてみたら、どうやら命令間違ってるよといわれているみたいです。&lt;br /&gt;
ネットで検索したら、nasmとnaskの違いという物がある様で、&lt;br /&gt;
どうも、RESB命令はnasmで推奨されていないのと、書き方が異なる様です。&lt;br /&gt;
&lt;br /&gt;
これは、あえてnasmを選んだのでしょうがないです。&lt;br /&gt;
&lt;br /&gt;
nasmではTIMES命令を使用するとうまくかけるようなので、&lt;br /&gt;
書き直します。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/56425e2b.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257537812/&quot; alt=&quot;56425e2b.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
こんな感じでRESBを使っているところを書き直しました。&lt;br /&gt;
&lt;br /&gt;
そんで、アセンブルします。&lt;br /&gt;
$ nasm helloos2.asm -o helloos2.img&lt;br /&gt;
&lt;br /&gt;
今度は、問題なくできました。&lt;br /&gt;
&lt;br /&gt;
helloos2.imgができているので、1日目-その1と同じように、&lt;br /&gt;
VMWareでフロッピーイメージとして読み込んでみます。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.oslite.ky-3.net/dbdc8861.png&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257538021/&quot; alt=&quot;dbdc8861.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
お〜、ちゃんと表示されました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
と言うところで、1日目終了です。&lt;br /&gt;
内容は、さっぱり分かりません。&lt;br /&gt;
&lt;br /&gt;
今日のところは、ブートするところまでを自分で作ってみると言うところに意義があるのだと思います。&lt;br /&gt;
&lt;br /&gt;
次回、2日目は、「アセンブラ学習とMakefile入門」です。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/2/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/4/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C1%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE2%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜1日目-その1〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/1/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/3/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;
さて、1日目を始めます。&lt;br /&gt;
&lt;br /&gt;
1日目の最初をざっと読むと、とりあえずブートローダーの部分だけを作ってみようと言う事の様です。&lt;br /&gt;
&lt;br /&gt;
「30日でできる！OS自作入門」はWindowsを開発環境としてに書かれているのですが、私はWindows VistaでMicrosoftに愛想を尽かして、Ubuntuに乗り換えた人間なので、開発も基本的にUbuntu上でやっていきます。&lt;br /&gt;
※著者のホームページにはLinuxでの開発方法と言うのも載っている様ですが、まだ見ていないです。できるだけ、自分であれこれ悩んで進んでみようかなと思っています。&lt;br /&gt;
&lt;br /&gt;
と言うことで、「30日でできる！OS自作入門」に書いている内容をそのままトレースではなく、色々悩む部分がでてくると思います。&lt;br /&gt;
&lt;br /&gt;
まず、バイナリエディタです。Windows歴が長かったもので、Linuxのバイナリエディタを知りません。&lt;br /&gt;
&lt;br /&gt;
ネットで調べたところ、普段使っているvimでバイナリ編集出きるとのことでした。&lt;br /&gt;
&lt;br /&gt;
早速やってみます。&lt;br /&gt;
コマンドラインで、&lt;br /&gt;
$ vim aaa.bin&lt;br /&gt;
を実行します。&lt;br /&gt;
&lt;br /&gt;
aaa.binファイルに適当な文字列を入れて保存します。&lt;br /&gt;
&lt;br /&gt;
そしたら、今度は「:%! xxd」とコマンドを打ち込む事で、バイナリを編集できる様です。&lt;br /&gt;
&lt;br /&gt;
ちょっとバイナリをいじってみました。&lt;br /&gt;
いじった後で、&lt;br /&gt;
「:%! xxd -r」を実行してテキストに戻すと、たしかに編集できている様です。&lt;br /&gt;
&lt;br /&gt;
ですが！&lt;br /&gt;
&lt;br /&gt;
やたらと編集しづらいです。&lt;br /&gt;
使い方が分かっていないせいもあるんでしょうが、バイナリモードで00をずーーーっと埋めたい場合に、そのままずーーっと00を書いていって、テキストモードに戻したら、1行分しか追加されていません。&lt;br /&gt;
&lt;br /&gt;
「30日でできる！OS自作入門」を読むと、大量に00を埋める箇所があるので、これでは困ります。&lt;br /&gt;
&lt;br /&gt;
方法はあるのかもしれませんが、バイナリエディタなんて最初しか使わないだろうと思い、ここは手を抜くことにします。&lt;br /&gt;
※本当は、こういうところを突き詰めていくと勉強になるんですが・・・・・・&lt;br /&gt;
&lt;br /&gt;
GUIのツールないかな〜と調べたところ、「GHex」と言う物がある様です。&lt;br /&gt;
Ubuntuのリポジトリにもあるようなので、Ubuntuの「アプリケーションの追加と削除」で「GHex」を入れました。簡単にアプリケーション追加できるのが、Ubuntuの魅力ですね。&lt;br /&gt;
&lt;br /&gt;
ってことで、早速バイナリファイルの編集をしました。&lt;br /&gt;
「30日でできる！OS自作入門」をみながら、入力していきます。&lt;br /&gt;
ファイル名は「helloos.img」です。&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/e60eed3c.png&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;101&quot; border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;e60eed3c.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257533513/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
最初の部分をサクサクと入力して、途中から00で埋めていきます。&lt;br /&gt;
面倒くさいです・・・・コピペをしようとおもったら、文字はコピペできるのに、00はコピペ出来ない！&lt;br /&gt;
&lt;br /&gt;
これは困った仕様だ！&lt;br /&gt;
&lt;br /&gt;
しょうがないので、一旦文字を入力して、後で置換する方法をとりたいと思います。&lt;br /&gt;
埋める文字は、何でもいいですが、とりあえず他の箇所で使われていなかった「a」を使用しました。&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/c1585f68.png&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;c1585f68.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257533808/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
で、置換っと。&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/4aabe45e.png&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;4aabe45e.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257534025/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/c19cb400.png&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;c19cb400.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257534086/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
これで、問題なく00埋めが出来ました。&lt;br /&gt;
&lt;br /&gt;
あとは、「30日でできる！OS自作入門」に書いている様に、&lt;br /&gt;
途中の00以外のところを埋めてっと、&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/d5568ee9.png&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;d5568ee9.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257534177/&quot; /&gt;&lt;/a&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/2fdbb938.png&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;2fdbb938.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257534189/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
これを保存してイメージファイルができました。&lt;br /&gt;
&lt;br /&gt;
さて、これでフロッピーにこのイメージを書き込んで、PCに入れて起動させれば、画面に「hello, world」が表示されるはずですが、生憎フロッピーを持っていません。&lt;br /&gt;
あと、実機でこんなの試したく無いです。&lt;br /&gt;
&lt;br /&gt;
と言うことで、VMWareを使用します。&lt;br /&gt;
この前、普段使っているPCにVMWarePlayer3.0をいれたので、ちょうどいいです。&lt;br /&gt;
&lt;br /&gt;
仮想マシンを作って、先ほどバイナリエディタで作ったイメージファイルを、フロッピーのイメージとして読み込んで、起動します。&lt;br /&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://file.oslite.ky-3.net/b86ee104.png&quot;&gt;&lt;img border=&quot;0&quot; align=&quot;absmiddle&quot; alt=&quot;b86ee104.png&quot; src=&quot;http://file.oslite.ky-3.net/Img/1257534546/&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
おお〜「hello, world」が表示できました。&lt;br /&gt;
&lt;br /&gt;
次は、アセンブラを使用して今回と同じ物を作ります。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/1/&quot;&gt;前へ&lt;/a&gt;　 &lt;a href=&quot;http://oslite.ky-3.net/Entry/3/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C1%E6%97%A5%E7%9B%AE-%E3%81%9D%E3%81%AE1%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜はじめに〜</title>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/2/&quot;&gt;次へ&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
川合秀美さん著の、30日で出来る！OS自作入門をやっていこうと思います。&lt;br /&gt;
&lt;br /&gt;
本当に30日で出きるとは思ってないですが(それ以上かかると思ってます)、&lt;br /&gt;
すこしずつ学んでいけたら良いなと思います。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://oslite.ky-3.net/Date/20091106/1/&quot;&gt;目次へ&lt;/a&gt;　&lt;a href=&quot;http://oslite.ky-3.net/Entry/2/&quot;&gt;次へ&lt;/a&gt;&lt;/div&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%E3%80%9C</link> 
    </item>
    <item>
      <title>30日でできる！OS自作入門　〜目次〜</title>
      <description>&lt;br /&gt;
&lt;br /&gt;
30日でできる！OS自作入門の目次です。&lt;br /&gt;
各記事へは以下のリンクから飛べます。&lt;br /&gt;
&lt;hr /&gt;
&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;はじめに&lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/1/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜はじめに〜&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/1/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&amp;nbsp;&lt;strong&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;1日目&lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/2/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜1日目-その1〜&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
    &lt;/span&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/3/&quot;&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜1日目-その2〜&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
    &amp;nbsp;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;2日目&lt;br /&gt;
    &lt;/strong&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/4/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜2日目-その1〜&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/5/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜2日目-その2〜&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;3日目&lt;br /&gt;
    &lt;/strong&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/7/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜3日目-その1〜&lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/8/&quot;&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜3日目-その2〜&lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;4&lt;/span&gt;&lt;strong&gt;日目&lt;br /&gt;
    &lt;/strong&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/9/&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜4日目-その1〜&lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;a href=&quot;../../../../Entry/10/&quot;&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;30日でできる！OS自作入門　〜4日目-その2〜&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;strong&gt;&lt;a href=&quot;../../../../Entry/10/&quot;&gt;&lt;/a&gt;&lt;a href=&quot;../../../../Entry/8/&quot;&gt;&lt;span style=&quot;background-color: rgb(204, 255, 255);&quot;&gt;&lt;span class=&quot;EntryTitleFont&quot;&gt;&lt;strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;SCRIPT charset=&quot;utf-8&quot; type=&quot;text/javascript&quot; src=&quot;http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;MarketPlace=JP&amp;ID=V20070822/JP/mogetan90-22/8001/ec568f9e-e0eb-4189-8448-a59b5751d926&quot;&gt; &lt;/SCRIPT&gt; &lt;NOSCRIPT&gt;&lt;A HREF=&quot;http://ws.amazon.co.jp/widgets/q?ServiceVersion=20070822&amp;MarketPlace=JP&amp;ID=V20070822%2FJP%2Fmogetan90-22%2F8001%2Fec568f9e-e0eb-4189-8448-a59b5751d926&amp;Operation=NoScript&quot;&gt;Amazon.co.jp ウィジェット&lt;/A&gt;&lt;/NOSCRIPT&gt; &lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://oslite.ky-3.net/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81os%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%80%9C%E7%9B%AE%E6%AC%A1%E3%80%9C</link> 
    </item>

  </channel>
</rss>