4日目(C言語入門)
本書の通りに nasmfunc.nasとbootpack.cを書き換える。
make runすると白い画面が出るはずが、まだ黒いままだった。
細々としたところを書き直したが、結局のところリンカスクリプトを変えたら白い画面になった。
最終的に書き換えたというかコピペしてきたhar.ldファイル。
---
/* https://vanya.jp.net/os/haribote.html#hrb */
OUTPUT_FORMAT("binary");
SECTIONS
{
.head 0x0 : {
LONG(64 * 1024) /* 0 : stack+.data+heap の大きさ(4KBの倍数) */
LONG(0x69726148) /* 4 : シグネチャ "Hari" */
LONG(0) /* 8 : mmarea の大きさ(4KBの倍数) */
LONG(0x310000) /* 12 : スタック初期値&.data転送先 */
LONG(SIZEOF(.data)) /* 16 : .dataサイズ */
LONG(LOADADDR(.data)) /* 20 : .dataの初期値列のファイル位置 */
LONG(0xE9000000) /* 24 : 0xE9000000 */
LONG(HariMain - 0x20) /* 28 : エントリアドレス - 0x20 */
LONG(0) /* 32 : heap領域(malloc領域)開始アドレス */
}
.text : { *(.text) }
.data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) {
*(.data)
*(.rodata*)
*(.bss)
}
/DISCARD/ : { *(.eh_frame) }
}
---
内容は不明。でもこれで白画面になった。しましま模様もOK。
余談だが、リンカスクリプトについては別途検索して、この本とは関係のないサイトを参照した。
これは別途学習する必要がある。
C言語の内容は初心者向きでわかりやすかったので、このまま進める。
nasmfunc.nasのwrite_mem8のところはコメントアウト。
続けてbootpack.cを書き換え、nasmfunc.nasも増えた関数を追加して実行し、ウィンドウの色が変わることを確認。
nasmfunc.nasでは、関数は最初のアンダーバーは消しておく。
タイプミスしなければ、エラーはないはず。
そういえば、後半はいちいちmake cleanしないと、前の画面(しましま)が出てきた。
なのでこの辺りから、古いファイルの削除は必須かもしれない。
内容の詳細は一度では理解し辛かったので、今後もその都度読み返すことにする。
今回参照させて頂いたサイト:
https://inakadeikinaosu.com/shumi/os_nyumon_8/
https://hariboteos.hatenadiary.org/entry/20060305/1141555667
https://vanya.jp.net/os/haribote.html
http://hrb.osask.jp/wiki/?tools/nask
https://yyatsuo.com/?p=523