2
0

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.

「30日でできる!OS自作入門」二日目(helloos3〜helloos5)をUbuntu18.04/NASMで作る

Posted at

#はじめに
「30日でできる!OS自作入門」一日目の続きです。

#環境

$ uname -a
Linux furble 5.3.0-42-generic #34~18.04.1-Ubuntu SMP Fri Feb 28 13:42:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ nasm -v
NASM version 2.13.02
$ qemu-system-i386 --version
QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.23)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

#helloos3
前回と同じく、RESBをTIMES命令に書き換えます。
そして

$ nasm helloos.asm -o helloos.img -l helloos.lst
$ qemu-system-i386 -drive file=helloos.img,format=raw,if=floppy

でqemuが起動しますが、失敗しました。
調べると、こちらのサイトによると、
TIMES 0x7dfe-($-$$) DB 0

TIMES 0x7dfe-0x7c00-($-$$) DB 0
つまりファイルの先頭で指定したORG 0x7c00を更に引くことでエラーが直りました。この理由はよく分かってません...

$ diff -u projects/02_day/helloos3/helloos.nas tolset/helloos3/helloos.asm
--- projects/02_day/helloos3/helloos.nas	2020-03-25 17:15:30.931931307 +0900
+++ tolset/helloos3/helloos.asm	2020-03-29 17:23:34.191854689 +0900
@@ -24,7 +24,7 @@
 		DD		0xffffffff		; たぶんボリュームシリアル番号
 		DB		"HELLO-OS   "	; ディスクの名前(11バイト)
 		DB		"FAT12   "		; フォーマットの名前(8バイト)
-		RESB	18				; とりあえず18バイトあけておく
+		TIMES	18	DB 0			; とりあえず18バイトあけておく
 
 ; プログラム本体
@@ -55,13 +55,13 @@
 		DB		0x0a			; 改行
 		DB		0
 
-		RESB	0x7dfe-$		; 0x7dfeまでを0x00で埋める命令
+		TIMES	0x7dfe-0x7c00-($-$$) DB 0	; 0x7dfeまでを0x00で埋める命令
 
 		DB		0x55, 0xaa
 
 ; 以下はブートセクタ以外の部分の記述 
 		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
-		RESB	4600
+		TIMES	4600 DB 0
 		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
-		RESB	1469432
+		TIMES	1469432 DB 0

#helloos4
helloos5と被るので省略。

#helloos5
ipl.asmの変更点はhelloos3と同じです。
Makefileの中にある

helloos.img : ipl.bin Makefile
	../z_tools/edimg.exe   imgin:../z_tools/fdimg0at.tek \
		wbinimg src:ipl.bin len:512 from:0 to:0   imgout:helloos.img

が何をやっているかよく分かりませんが、先ほどのサイトのMakefileを見ると単にimgファイルにipl.binの中身をコピーしているだけのようです。

Makefile
# ファイル生成規則
ipl.bin : ipl.asm Makefile
	nasm ipl.asm -o ipl.bin -l ipl.lst

helloos.img : ipl.bin Makefile
	cat ipl.bin > helloos.img

img :
	make -r helloos.img

asm :
	make -r ipl.bin

run :
	make img
	qemu-system-i386 -drive file=helloos.img,format=raw,if=floppy

これで、make runするだけでqemuの起動までできるようになりました。

先人の残した情報のおかげで進められてます。自力でやっていたら詰んでましたね...圧倒的感謝...

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?