nantonaku-shiawase.hatenablog.com
以前進捗報告したのが2016-06-09、それから5ヶ月ぐらい経っているわけですが、ようやく3日目が終了しました。長かった。
これまでの流れ
- harib00iに出てくるアセンブリの実装に手間取る → harib00iの実装 · Issue #4 · HariboteLikeHobbyOS/opennask · GitHub
- harib00jに出てくるPEヘッダの出力に手間取る → PE(Portable Executable)ヘッダの出力 · Issue #12 · HariboteLikeHobbyOS/opennask · GitHub
- CMakeでqemuを実行するスクリプトを準備しまくる → Mocking cyberbird by Hiroyuki-Nagata · Pull Request #8 · HariboteLikeHobbyOS/opennask · GitHub
- 先人のサイトを見つけて、リンカスクリプトを使えばショートカットできることに気づく ← 今
2016/11/23時点では、書籍の3日目までのアセンブラ(harib00jまで)はバイナリに変換できるようになった。
使用できるオペコード(部分的に実装しているものも含む)は以下の通り:
コンパイル〜img書き込みまでの概要
ここまででようやくC言語をリンクしながら、naskのスクリプトをアセンブルしてimgに書き込みという一連の動作が完成しました。以下がオリジナルのosaskと、私が先人のページを見ながらCMakeで動かす動作の比較です。
図からわかるように、まずオリジナルのosaskは様々な独自ツール、独自フォーマットを使っています。
それらは以下のように代用できることがこれまでの先人の知恵によってわかっています。
edimg
- GNU謹製のmtoolで代用できます
コンパイル〜img書き込みまでのコマンド
私のopennaskを使うと、imgファイル作成までコマンドで7工程です
$ opennask ipl10.nas ipl.bin $ opennask asmhead.nas asmhead.bin $ opennask naskfunc.nas naskfunc.o $ gcc -m32 -nostdlib -Wl,--oformat=binary bootpack.c naskfunc.o -T os.lds -o boot.bin $ cat asmhead.bin boot.bin > haribote.sys $ mformat -f 1440 -l HARIBOTEOS -N 0xffffffff -C -B ipl.bin -i haribote.sys $ mcopy -i haribote.img haribote.sys
感謝
以下の3サイトに非常にお世話になりました