[Mona] Floppyドライバをカーネルから分離しよう
必須サーバ群をKERNEL.IMGに物理的に組み込んだのでFloppyドライバと付属するFATロジックはカーネルから分離可能なはずである。
Floppyドライバは割り込み後に割りと即応答しないといけない。でもビジーループはかっこ悪いので以下の関数を使えばよいかな。
int Message::receive(MessageInfo* dst, MessageInfo* src, bool(*equals)(MessageInfo* msg1, MessageInfo* msg2))
{
MessageInfo msg;
for (int i = 0; ; i++)
{
int result = Message::peek(&msg, i);
if (result != 0)
{
i--;
syscall_mthread_yield_message();
}
else if ( (*equals)(&msg, src))
{
Message::peek(&msg, i, PEEK_REMOVE);
break;
}
}
if (dst != NULL) *dst = msg;
return 0;
}