ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
10月 22 (月曜日) 2007
22:52
FDアクセス:FIFOがうまくいかん
 
FDCにコマンドを送る場合、「待ち」がある。
で、万が一、その「待ち」があまりにも長いなんて場合はエラー
としてブレイクしようと考えた。そんなわけでこんなコードを書いたんだけど、

int send_sec_read(int C, int H, int S)
{
struct TIMER *timer1 = timer_alloc();
int fifobuf[4];
struct FIFO32 fifo;
fifo32_init(&fifo,4,fifobuf,0);
timer_init(timer1,&fifobuf,10);

//コマンド送信前の確認および待ち
timer_settime(timer1,300);
while(io_in8(0x03f4) & 0x11 != 0x00 )
{
if (fifo32_status(&fifo) !=0)
{
if (fifo32_get(&fifo) == 10)
{
return 5;
}
}
}

どうもFIFOがうまくいってないらしい・・・
散々悩まされた(タイマーの不具合かと思い)んだけど、もっと
根本で、このFIFOにデータをput(fifo32_putで)しただけで
固まってしまうことがわかった。(やっとこさ・・・)
うううううううん! なんだろう?
 
●uchan@Guest -- 10/23 06:24
あれ?timer_init(timer1,&fifobuf,10);って?

30日を過ぎたBlogにはコメントできません。
19:54
FDアクセス:時間待ち
 
うーーーん・・・困った・・・

コマンドの発行などで「待ち」が必要なんだよなぁ。
(待ちとは言うけど、逆に言えばあるコマンドが何秒以上返事がない場合はエラーにするとかも必要になる)

今はりぼてに搭載されているタイマーって、FIFOにタイムアウトを
発行する仕組みだから、コード内(たとえばこんなの)

//コマンド送信前の確認および待ち
while(io_in8(0x03f4) & 0x11 != 0x00 ){}

で、もし永遠にこれが帰ってこないようならブレイクしないと
いけないよね?

こういう場合、どうしたらいいんだろう。
まさかforでカウントするなんて乱暴なことできないしなぁ・・・

システムの現在時刻を取得して・・・・
うーーーん。これしかないのかなぁ。なんかもっとスマートで
いい方法があるような・・・


・・・って! まったまった!!! 勘違いかも???
FIFOって別にタスク専用じゃねーじゃん!!
・・・ってことは・・・・
 
30日を過ぎたBlogにはコメントできません。
19:40
FDアクセス:エラー処理
 
ベタ〜っとFDD読み込みのコードを書いて実験。
ほぼ、とにもかくにも、OKという感じになってきたので
これを関数にまとめ・分類し始めた。

・・・うーん。でもこれ、複雑だなぁ・・・

もしミスがあった場合、これじゃどこに問題があるのかわからなくなっちゃいそう。

そこで、エラーコードを返すようにすることにした。

で、

そのエラーコードだけど、最初にちゃんと決めておかないとまずそうだね・・・
 
30日を過ぎたBlogにはコメントできません。
12:14
FDアクセス:論理to物理
 
えーーっと・・・

論理セクターを物理セクターに変換するのってどうするんだっけ・・・

たしか、ケツから割り算してあまりで出していくはず・・・

あーー! 思い出したぁ!!!!
たしかこれ、前にKタンに教えてもらったんだ!

答えはn進数変換だ!(割り算二回でOKだーーー!)(^^

・・・あ”・・・
C言語の場合は2回ってわけにはいかないのか・・・ orz
 
30日を過ぎたBlogにはコメントできません。
10:43
FDアクセス:BPE解析
 
0x7C00に読み込んだのは正解のようですぞ!?

順調にBPEの取得&解析完成〜。

いよいよ、これら情報を元にアクセス。ファイル読み取りまでいけるか!???

リビジョン27
 
30日を過ぎたBlogにはコメントできません。
00:13
FDアクセス:DMA候補場所
 
ここでメモリマップを試作中・・・

でね?

セクターを読む場所を、IPLが読み込まれる位置(0x00007C00)にしてみたらどうかってぇ〜思ったのよ。

ここなら確実に「もう使わない。もう使ってない」といえるうえに、
ちょうど512だしね。

ここに読むようにDMAに指定して、読み終わったらタスク内に設けた
変数に転送させると!

こんなんで どっすか? げっげぇ〜ろぉ〜♪
 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.