133
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-16

追記 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で作業しているのですが、探してもいいエディタが見つからず、引っ越しを転々と続けています。

スクリーンショット 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…//// |
 \| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄~ ~  ̄

次回 https://qiita.com/gorira_tatsu/items/c1ae1d15c2946a90e042
##追記
11/24日追加
せっかくなので、Twitterアカウントを開設してみようと思います。今回父に、有名なエンジニアが紹介したと言われて、そのように、エンジニアさんとも繋がりたいなと思ったからです。アカウント名はこちらです。
@GoriraTatsu

133
74
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
133
74

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?