ザビタン開発日記
2009
| 01
10月 31 (水曜日) 2007 | ||
19:55
|
FDアクセス:実機はアカン?
|
|
オイラのスットコドッコイな落とし穴で思わぬ回り道をしてしまったが
うっちゃんのおかげでやっとすこし戻ってこれた・・・ さて! そうなると、再びお勉強の本筋に! そう。現時点でイマイチ理解ができていない、「割り込み状態取得」である! えーーーっと・・・・例のここに書いてあるこれかなぁ・・・
・・・よくわからないなぁ・・・ こういうことなのかな???
そもそも、状態遷移割り込みとはどういう状況下で発生するのだろう??? たとえばだが、ヘッドを10シリンダにシークしたいとする。
この流れの中で、状態遷移割り込みという、SEEK終了ではない割り込みが来る!?? いったいなぜ? なんのために?? ・・・な〜んて書いて、ちょっと一休みしてたら再び勇者うっちゃんが!! (^^ なるほどぉ!つまりこういうことなのかな?
|
||
19:49
|
FDアクセス:番外
|
|
ニョニョニョ〜〜〜!!
うっちゃんが須原歯科ヒントを!! え!? まってまって? じゃ、いままでのwhileでひっかかるのもこれ? その後のwhileも? じゃ、whileをみんなこのパターンにしてみると??? ・・・ ・・・・・・ ・・・・・・・・・ キタ━━━━━━(゜∀゜)━━━━━━ !!!!! いや〜・・・ 我ながらこんなことも知らんで「OS作成」してるとは・・・ うっちゃんスマソ。ほんと感謝。わざわざURLまで。勉強しまする。 |
||
18:28
|
FDアクセス:再調査!
|
|
え”えぇぇぇぇぇ!??
なんかヘンだよ? おかしいよ? こんどはこんなことしてみたんだけど
このforを抜け出せない!? 値はちゃんと、「aa=FFFFFF81,00000000」って出てるのに・・・0なのに・・・ ヽ( `Д´)ノ |
||
16:50
|
FDアクセス:再調査!
|
|
例の「ひっかかり」の場所。
逆に場所が特定できているんだから、その時のステータスレジスタ(0x03f4) の値がなにで、どういう状態なのかがこれで読み取れるかもしれない。
こんなことして値を表示させてみたら「0x81」と表示された・・・ さて。0x81ってのはどういう状態なんだろう?。オベンキョしたことを踏まえて・・・ 0x81すなわち10000001b。むむむうぅぅ???
なるほどなるほど・・・・・って、え” & 0x10 == 0 の待ちなんだから、bit4だけが0ならとりあえずは ここは通過できるはず。なんで? なんで通過しないの!?? |
||
16:17
|
FDアクセス:FDCレジスタ
|
|
大マヌケをこいてしまったが、な〜に!いつものことさ! orz
●コマンド発行前待ち io_in8(0x03f4) & 0x11 の値が0になるのを待ちます 0x11すなわち00010001bによる摘出。bit0とbit4摘出ね。 ・ドライブ#0が非動作中(bit0) ・FDCがidle-Phaseである(bit4) ふむ!納得! 理屈どおりだよね? (・・・でも、bit6やbit7は関係ないのかな???) ●コマンド[08]発行前待ち io_in8(0x03f4) & 0x10 の値が0になるのを待ちます 0x10すなわち00010000bによる摘出。bit4のみかぁ・・・ ・FDCがidle-Phaseである(bit4) ん?っていうことは、仮にドライブ#0が動作中であってもいい。 もしくはどっちでもいいということかな??? ●個々のコマンド送信前待ち io_in8(0x03f4) & 0xc0 が 0x80 になるのを待つ 0xc0すなわち11000000bによる摘出。bit7とbit6ね。 さらにこれらが0x80なんだから10000000b。bit7が1で、かつ、bit6が0だと。 ・データレジスタの準備ができている。いつでも来い!(bit7) ・書き込み待ちの状態(bit6) ・・・なっるほどぉ・・・。bit7やbit6はさっきは無視されたんじゃ なくて、個別に別々に検査されるわけね。 ●個々のリザルトの受信待ち io_in8(0x03f4) & 0xc0 が 0xc0 になるのを待つ 0xc0すなわち11000000bによる摘出。bit7とbit6ね。 さらにこれらが0xc0なんだから11000000b。bit7、bit6共に1でいてほしいと。 ・データレジスタの準備ができている。いつでも来い!(bit7) ・読まれ待ちの状態(bit6) おおおおお!! なるほど! なんか理屈通りだ! よく解る! ・・・あれ? でも、ちょっと疑問があるなぁ。 リザルト受信を開始する前のチェックというか・・・「コマンド発行前待ち」みたいなチェックってないのかなぁ??? たとえばだけど、 ●リザルト発行前待ち io_in8(0x03f4) & 0x11 の値が0x10になるのを待ちます 0x11すなわち00010001bによる摘出。bit0とbit4摘出ね。 ・ドライブ#0が非動作中(bit0) ・・・これはいらないかな? ・FDCがidle-Phase以外(Result-Phase)である(bit4) とか・・・・ |
||
15:32
|
FDアクセス:FDCレジスタ
|
|
うーむ。どうもわからない。
ここで新しくいろいろと勉強してみたんだけど、いつものところに まず io_in8(0x03f4) & 0x11 の値が0になるのを待ちます とある。0x11すなわち00010001bでのAND演算。bit3とbit7の摘出となる。 しかし、資料によるとbit3はドライブ#3の動作状況を示すようだ。 bit0(ドライブ#0)ならまだわかるのだが・・・ また逆に、bit4が検査されていない理由がよくわからない。なんか これは検査すべき部分のような気がしてならない。 他のものはどうだろうか・・・ ●コマンド[08]発行時 io_in8(0x03f4) & 0x10 ==0を待つ。 これはええと・・・ やはりbit3だなぁ。 ●コマンド送信待ち io_in8(0x03f4) & 0xc0 が 0x80 になるのを待つ bit0とbit1を摘出。その結果が0x80すなわち10000000bであってほしいと。 ドライブ#0が動作中で、かつドライブ#1は非動作中という状態を待っている・・・えぇ? ●リザルト受信前 io_in8(0x03f4) & 0xc0 が 0xc0 になるのを待つ 同じくbit0とbit1の摘出。0xc0すなわち11000000b待ち。 ドライブ#0とドライブ#1両方の動作状態を待つ・・・ ・・・おっかしい! どう考えてもこれはおかしい!! なにかオイラのほうで勘違いや読み違いしてる可能性が濃厚だ! もう一回復習してみよう・・・ さっそくわかりました!/(^o^)\bit0とかbit7とかの捕らえ方が、オイラ左右逆でした!
全部やりなおし! |
||
(1)  |
PopnupBlog V3 Denali created by Bluemoon inc. |