[PR]当たる!無料占いで仕事鑑定:大人気!無料占い『スピリチュアルの館』

INT 29hによるコンソール出力ができましたので、 FAT 用のファイルシステムドライバ作りに移ります。
DOS のファイルシステムは FAT に固定されており、 インターフェースは決められていません。
そこで、今回は プログラミングインターフェースを決めることにします。

gcc のような C++ コンパイラであれば 内部インターフェースは C++ で書くことができます。
今回は、次のようなインターフェースを使うことにしました。

find_init、find_next はディレクトリを検索するメソッドです。
はじめから全機能を実装するのは大変ですので、 まずはディレクトリ内の検索のみを考えています。
P32_DOS_FIND_BLOCK は DOS の INT 21h で ディレクトリ内の検索を行うときに使われる構造体で、 次の形をしています。
このうち find_ ではじまるメンバは、 DOS では予約されているメンバです。
DOS としては +15h 以降さえ正しければ どのようなメンバでもかまわないはずですが、 互換性を考えて、今回は極力 Interrupt List の記述に近づけるようにしました。

インターフェースを決めたら、次は実装になります。
CDosFileSystemBase は純粋仮想クラスですので、基本的には これを継承して実装していけばよいことになります。
しかし、実際に CDosFileSystemBase を継承して 実装を行うと、ソースのコンパイルはできるのですが、 リンカでエラーになります。
これは、 クラスの利用に必要な C++ のランタイムをリンクしていないためです。
カーネルで C++ のランタイムを利用するのは難しいため、 今回は必要な関数を自作することにします。
具体的には、operator new、operator delete、pure virtual 関数の 3つを自作することになります。
これらについては次の節で説明します。


2005-10-04: ページ作成 (最終更新)
Copyright (C) 2005 hoverkid, all rights reserved.
[PR]子育てママさんへ:3年毎に15万円うけとれる保険?