コツコツやらない小6がVirtualBoxで「30日でできる!OS自作入門」をやり遂げる話。1日目

自己紹介

はじめまして。色んなことに挑戦してエラーで諦めてしまう小6のtatsuです。文章の所々間違っていると思いますがよろしくです。

環境構築

VirtualBox https://www.oracle.com/technetwork/jp/server-storage/virtualbox/overview/index.html
バイナリエディタ Hex Fiend https://ridiculousfish.com/hexfiend/
VirtualBoxで起動する時のやり方はこちらの方が詳しく書いていますのでそちらをご覧ください https://qiita.com/nao18/items/e1b9b77f154e4d5239e5
mac用nask https://shrimp.marokun.net/osakkie/wiki/?tolsetOSX

やってみる

まずhelloos.imgというディスクイメージを作ります。起動すると画面に「hello, world」と出るらしいです。バイナリエディタを使うのは初めてでアプリに関しても使いにくいなと思いました。筆者はmacで作業しているのですが、探してもいいエディタが見つからず、引っ越しを転々と続けています。

スクリーンショット 2019-11-16 20.42.59.png

ここから、VirtualBoxを起動したのですが問題発生。なぜか、<がずっと表示され続けています。やめてくれよ....(筆者、エラーにはとことん弱い)

スクリーンショット 2019-11-16 21.07.48.png

それもそのはず。一回読み間違えてしまい、60〜70らへんで二回も打ち続けてしまいました。これ判明するの1時間後ってマ?そして答えが分かったところでコードの書き換えをし、無事起動することができたとか。

スクリーンショット 2019-11-16 21.17.32.png

アセンブラでhello workを出してみる

helloos.nas
; hello-os
; TAB=4

; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述

        DB      0xeb, 0x4e, 0x90
        DB      "HELLOIPL"      ; ブートセクタの名前を自由に書いてよい(8バイト)
        DW      512             ; 1セクタの大きさ(512にしなければいけない)
        DB      1               ; クラスタの大きさ(1セクタにしなければいけない)
        DW      1               ; FATがどこから始まるか(普通は1セクタ目からにする)
        DB      2               ; FATの個数(2にしなければいけない)
        DW      224             ; ルートディレクトリ領域の大きさ(普通は224エントリにする)
        DW      2880            ; このドライブの大きさ(2880セクタにしなければいけない)
        DB      0xf0            ; メディアのタイプ(0xf0にしなければいけない)
        DW      9               ; FAT領域の長さ(9セクタにしなければいけない)
        DW      18              ; 1トラックにいくつのセクタがあるか(18にしなければいけない)
        DW      2               ; ヘッドの数(2にしなければいけない)
        DD      0               ; パーティションを使ってないのでここは必ず0
        DD      2880            ; このドライブ大きさをもう一度書く
        DB      0,0,0x29        ; よくわからないけどこの値にしておくといいらしい
        DD      0xffffffff      ; たぶんボリュームシリアル番号
        DB      "HELLO-OS   "   ; ディスクの名前(11バイト)
        DB      "FAT12   "      ; フォーマットの名前(8バイト)
        RESB    18              ; とりあえず18バイトあけておく

; プログラム本体

        DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
        DB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
        DB      0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
        DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
        DB      0xee, 0xf4, 0xeb, 0xfd

; メッセージ部分

        DB      0x0a, 0x0a      ; 改行を2つ
        DB      "hello, world"
        DB      0x0a            ; 改行
        DB      0

        RESB    0x1fe-$         ; 0x001feまでを0x00で埋める命令

        DB      0x55, 0xaa

; 以下はブートセクタ以外の部分の記述

        DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    4600
        DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        RESB    1469432

なんで拡張子がnasなのかと言いますと、本の執筆者さんが「nask」というアセンブラを作ったそう。たまげたなぁ...あ、ちなみにmacでCatalinaの場合はこのnask使えません。このnaskは32bit版しかなく、Catalinaは32bitに対応していないため私的には詰んでいるかと...残念ですが...
では早速起動してみましょう!!!
スクリーンショット 2019-11-16 21.38.38.png

ちゃんと起動することができました!正直難しすぎてよくわからないのは内緒です。

 /|_________ _ _
〈  To BE CONTINUED…//// |
 \| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄~ ~  ̄

追記

編集リクエスト有難うございます。ある方へのご返信を誤って空白にしてしまいました。本当に申し訳ございません。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away