INT 29hによるコンソール出力ができましたので、
FAT 用のファイルシステムドライバ作りに移ります。
DOS のファイルシステムは FAT に固定されており、
インターフェースは決められていません。
そこで、今回は
プログラミングインターフェースを決めることにします。
gcc のような C++ コンパイラであれば
内部インターフェースは C++ で書くことができます。
今回は、次のようなインターフェースを使うことにしました。
class CDosFileSystemBase
{
public:
virtual unsigned // DOS_EXTERROR_*
find_init(
const unsigned char *pfullpathdir, // '/PATH/TO/DIR'.
P32_DOS_FIND_BLOCK *pfindblock // from DTA
) = 0;
virtual unsigned // DOS_EXTERROR_*
find_next(
P32_DOS_FIND_BLOCK *pfindblock
) = 0;
...
};
find_init、find_next はディレクトリを検索するメソッドです。
struct P32_DOS_FIND_BLOCK
{
unsigned char find_drive; // +00h
unsigned char find_name[11]; // +01h
unsigned char find_attr; // +0Ch
union {
unsigned char find_reserved_0Dh[8]; // +0Dh
struct {
unsigned next_cluster;
unsigned entry_index_in_dir;
} find_fat;
};
unsigned char fileattr; // +15h
unsigned short filetime; // +16h
unsigned short filedate; // +18h
unsigned filesize; // +1Ah
unsigned char filename[13]; // +1Eh (ASCIZ name)
};
このうち find_ ではじまるメンバは、
DOS では予約されているメンバです。