ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
11月 01 (木曜日) 2007
00:55
FDアクセス:実機でいけた!??
 
えっとね。まず。



今回いろいろと躓いてしまった理由というか、顛末ね。



まずはこれ!



while ( (io_in8(0x03f4) & 0x10) != 0 )



オイラは「計算の優先順位」を正しく理解していなかった。

なので、↑の式をずっと



while ( io_in8(0x03f4) & 0x10 != 0 )



こんなふうに書いてしまっていた。これでは正しい計算結果が出ない。

なので本来はこのwhileをパスできる状態なのにひっかかってしまったり、またその逆だったり。

「まともな計算評価をしていない」んだから、これでうまくいってもダメでもそれはなんにもならないわけ。

さらに追い討ちというか。エミュではずっとこれで通ってしまっていた。(たぶん偶然なんだろうけど)

そのためこんなつまらないことを発見するのがだいぶ遅れてしまった。



次にひっかかってしまったのが、「いきなりセクタリード命令!」。

これはちゃんと書かれていたことなんだけど後回しにしてしまっていた。

あるセクタを読みたければ、まずはそのシリンダにヘッドをシークしないといけないわけ。

これまたエミュでは「いきなりセクタリード命令!」でも動作して

しまっていたからヤッカイなのだ。



さらにドツボ。

セクタリード命令の前に、このシークを挟み込んだ。この命令は単純だし、

シークを行うのでぶぶっなんて音が出る。動いているのが体感でわかる。

これが正解かと考え、そのすぐ後にセクタリードを置いてみたんだけどエラーになってしまった。

なぜこれでエラーになるのか。これがさっぱりわからなかった。

セクタリードの部分をさんざんコネ回して泣きそうになってしまった。



見かねたKタンがアドバイスをくれた。「割り込み状態取得」だ。

ところがこれがややこしい。意味合いやどんな時に必要なのかが

よくわからなかったため、inthandler26にもぐりこませて固まって

しまったりで大変だった。なぜうまくいかないのかが解らなかったためだ。



次に、この「割り込み状態取得」は「とにかく割り込みが来た時にはしなくてはならない」と間違えて理解してしまった。

最後のハマリ所がこれ。

シーク命令発行→割り込み→割り込み状態取得・・・

っと、ここまでがなまじうまく行ってしまったので余計ドブボ。その後、

シーク成功→セクタリード命令発行→割り込み→割り込み状態取得→リザルト取得

・・・とこういう組み立てをしてしまい、これまた散々悩みまくりだった。



結局正解は、なんのことはない。

SEEK系では割り込み状態取得が必要」

ということ。逆に言えばSEEK系以外では必要ないわけ。

オイラは「全ての割り込みに対して割り込み状態取得が必要」という勘違いをし、

さらに「セクターリードもSEEK系」という二重の勘違いをしてしまっていたわけ。



いやはや。解ってしまえばなんてことはないんだけどねぇ。

でもまあ、大変だったけど収穫も多い一週間でございました。(^^



さ〜て!



それじゃこれらの経験を生かして、包括関数の再構築とまいりましょうか。



とにもかくにも「dirっぽい動作をする」ところまで仕上げて、

新ベータとしてリリースしたいにょ〜♪

 
name: @Guest  Comment:
Referer  (1)
00:43
FDアクセス:実機でいけた!??
 

ふぎゃあぁぁぁ!!!



・・・い・・・いけた・・・いけたか?・・・いやいけてる!!!!!



実機AB共に・・・・



FD読めた━━━━━━(゜∀゜)━━━━━━ !!!!!





やった・・・やったぞぉおぉ!!



これもひとえに天才的なhideyosiさんの実力Kタンの膨大な文書郡・タコなコードにアドバイスしてくれたうっちゃんのおかげだぁ!!



感謝!!





・・・とは言え、これは完成でもなんでもないんだよねぇ・・・

たかだか0セクタをベタ読みできただけなんだもん。

これから! これからが、新たなる戦いなのだ!



みんなぁぁ! これからが本当の戦いだあぁぁぁ!



おおぉぉぉぉぉぉぉぉぉぉぉぉ!!!!



第一部完       hideyosi先生の次回作にご期待ください



(打ち切りに言い訳してどーーーする!!!)



いろいろとまとめなきゃいかんな。
 
name: @Guest  Comment:
1 2 3 4 5 6 7 (8) » 

PopnupBlog V3 Denali created by Bluemoon inc.