追記 12/7 公開してから一年の月日が経ちました。早いですね。僕もこの一年に色々な経験をしていました。
記事を挙げた二日目には止まってしまったこのシリーズ。でも僕は諦めてません。絶対に戻ってきます。絶対に次の記事を書いて30日目までがんばります。少し待っていてください。(12月中にリニューアルさせたい)
あと実は9日目くらいまでは完成していたのですがあんまり仕組みがわかってないです()
##自己紹介
はじめまして。色んなことに挑戦してエラーで諦めてしまう小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で作業しているのですが、探してもいいエディタが見つからず、引っ越しを転々と続けています。
ここから、VirtualBoxを起動したのですが問題発生。なぜか、<がずっと表示され続けています。やめてくれよ....(筆者、エラーにはとことん弱い)
それもそのはず。一回読み間違えてしまい、60〜70らへんで二回も打ち続けてしまいました。これ判明するの1時間後ってマ?そして答えが分かったところでコードの書き換えをし、無事起動することができたとか。
##アセンブラでhello workを出してみる
; 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に対応していないため私的には詰んでいるかと...残念ですが...
では早速起動してみましょう!!!
ちゃんと起動することができました!正直難しすぎてよくわからないのは内緒です。
/|_________ _ _
〈 To BE CONTINUED…//// |
\| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄~ ~  ̄
次回 https://qiita.com/gorira_tatsu/items/c1ae1d15c2946a90e042
##追記
11/24日追加
せっかくなので、Twitterアカウントを開設してみようと思います。今回父に、有名なエンジニアが紹介したと言われて、そのように、エンジニアさんとも繋がりたいなと思ったからです。アカウント名はこちらです。
@GoriraTatsu