はりぼてOSですが、今 私がカーネルと思って取り組んでいるのがブートローダ部分ではないかと思います。
大部分はクラス定義とともにDLL(ダイナミックリンクライブラリ)に詰めてあります。
インポートというかexternalしてブートローダーのほうでDLLのメイン関数を利用できるようにしてあります。
loader関数のアドレスはファイルのヘッダに保存してあります。海外のサイトを参考にして画面を塗りつぶす作業まではできましたがそれしかできていません。応用段階で結構躓いています。
参考にしたサイトではloaderとloader_endで関数群の定義を挟むように宣言して
integer(@loader_end) - integer(@loader)
によってサイズを求めています。最終的にメモリーストリームオブジェクトに開始アドレスとサイズを放り込んでデータを保存しています。これをkernel.binファイルに保存で完成です。
あとはqemuで自動起動するようにプログラムを書いて実験していますがカーネルパニックなのでしょう、画面表示が一向にできません。ブートローダーが簡単すぎるのでそこに問題がまずあろうと思います。
ご助力をお願いしたいところです。
本人です。DLLはWindows上でしか利用できないのだそうです。
返信削除