ザビタン開発日記
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とかの捕らえ方が、オイラ左右逆でした!
全部やりなおし! |
||
10月 30 (火曜日) 2007 | ||
23:57
|
FDアクセス:番外
|
|
いままでここをベタ〜っと写していたのだがすこし意味などをお勉強。
資料を探していたら・・・あったあった!。ここ! ここ!。 ・・・でもやっぱしKタンのサイトなのね・・・(^^ うっわあぁぁぁ・・・・むずかしいなぁ。 とりあえずオイラお得意の「まず大雑把に法則化」といきますか!
ステータスレジスタ現在、FDD、FDCがどういう状態なのか?を示す。 各ビットに意味がある。 bit4が0ならIdle-Phase つまりこういう状態。 ???0??? FDCに対してコマンドを発行したい場合、 「io_in8(0x03f4) & 0x11 の値が0になるのを待ちます」 とある。これはどういうことなのかというと、bit0とbit7以外は0である必要があるということ。 ・・・・だめだなこりゃ。ここいらあたりにまとめよう。 |
||
23:21
|
FDアクセス:実機はアカン?
|
|
Kタンからアドバイスがあった。
・・・これはどういうことなのだろう? オイラが参考にしているここによると、割り込み状態取得とある。 これはいったいなんなのだろう?。割り込みの後やらなければならないとある。 割り込みが発生した場合にはかならず一回行うことが前提となるもの のようだ。もしかしてこのST0やもうひとつの戻り値であるCなどから なにかを判断しなければいけないのだろうか?。 また、これはどんな場合でもIRQ6が発生した場合には行うべきこと なのだろうか? (たとえばシークでは必要だが書き込み時はいらないとかそういうの) ・・・まあとりあえず、一発実験してみる・・・ そう思ってこんなコードを書いたのだが
やはりどうもこの(1)あたりで引っかかってしまう。 「割り込みが来た瞬間」に必要なのかとも思い、inthandler26内に 仕込む等も行ってみたのだが、whileを抜け出せないようで固まって しまうのと同じになってしまう。 (相変わらずQEMUではツルっと通過してくれるのだが) やはりこれは、各コマンドやSTの意味などの資料を探さねばいけないかなぁ〜。 |
||
17:46
|
FDアクセス:実機はアカン?
|
|
まいったなぁ・・・
初心に戻ってと思い、こんなベタなコードを試してみたんだけど
実機A、実機B共に1のところで止まったキリになっちゃう・・・ (もちろんエミュではOKなのだが・・・) |
||
13:34
|
FDアクセス:実機はアカン?
|
|
ちょっと変化がありました。
実機Aは相変わらずなんですが、実機Bで初めて「ぶっ!」っと音が出ました。 ・・・実はオイラはこれまでシークやリセットは搭載していなかったんです。 もしかしてこれかなぁと思い、シークを搭載してみたら変化が。 読み取りコマンド前にシークやリセットを挟み込んでさらに実験・・・ むむむ・・・ 実機Aではあいかわらずだが、実機Bではリザルトが0x40、つまりコマンドの 異常終了になるようになった。 これははたして進歩だろうか・・・orz・・・ |
||
(1) 2 3 4 5 6 7 »  |
PopnupBlog V3 Denali created by Bluemoon inc. |