#はじめに
「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の起動までできるようになりました。
先人の残した情報のおかげで進められてます。自力でやっていたら詰んでましたね...圧倒的感謝...