|
最近のコンピュータ技術者は、ハード系、ソフト系と専門化しているね。
これは、ハード、ソフト 各々の技術レベルが 高くなった事が原因だけど、 技術者も、大変だよね。
でも 良いシステム、良い仕事をするには、ハード、ソフトの両知識が必要だと思う。
特に、制御機器の開発現場では、 マネージャーは、両分野の知識無しでは、勤まらないだろうね。
どこまでハード、どこまでソフトでやるか。
汎用性、生産性、価格・資材調達・・の最適化は、両方の知識が必要だね。
ハード・ソフトの境界の話。 レベル的には低い話だけれど、MZ80KのFDを接続し、動作させる時に 起きた。
FDのデータの読み出し、書き込みに失敗する。 原因は?・・、
FDが、両面倍密を採用したので、タイミングが早く、データ処理が遅れる。
FDがインテリジェント化していない為、Z80の管理下にある事。
Z80が2MHzの低速あった為、インストラクションの実行速度が遅い事。
W君(仮名)が担当していたが、悩んでいた。 時々、エラーが発生するトラブルだった。
障害は、トラック・セクタを指定して、シークの後、ヘッダー信号を掴んでから、レディ信号を出力してくる。
レディ信号をセンスして、データ処理をするのだが・・、
ポーリングのレディ信号確認の時間が かかり過ぎ、時々失敗する。
GET_DATA IN A、FDC ; 制御データの取り込み
AND A,$01 ; 制御フラグの確認
JR Z GET_DATA ; レディ信号なしの場合 繰り返し,有りの場合 下に抜ける。
対策は?。FDドライブを、Z80の直接管理下から外し、インテリジェント化する。価格上昇・・。
では 他の対策・・?。
ドライバーソフトのLOOP番地を固定し、インストラクションの最初のバイト読み込み時、
3ビット(b3)の位置にレディ信号を突っ込み、0x20 又は 0x28 で CPUを騙す。
即ち、レディ信号ない時 JR NZ LOOP (0x20、0xFE)、
レディ信号検出時 JR Z LOOP (0x28、0xFE)
GET_DATA OR A、$01 ; Zフラグを0とする
LOOP JR (N)Z、LOOP ; レディ信号なしの場合 繰り返し、有りの場合 下に抜ける。
コンピュータは、『 ダマシの哲学』・・。 どんな 手段でも確実・安全に動作すれば・・、
♪どうせ だますなら 死ぬまで だまして 欲しかった。♪ 途中で バレるの ダメよ(笑)
結果よければ、すべて 良し・・。 とは言え・・、あまりに、マニアックな事は 避けた方が良いかも・・。
実用化? Z80が4MHzバージョンの見通しが付いたので、タイミング余裕が出来ソフト方式で商品化できた。
< つづく >
MZ−80開発記録は連載物です。 最初のページは、↓をクリック。
http://blogs.yahoo.co.jp/nagusa_kei/10285931.html?p=1&pm=c
***** 余談 *****
専門的な話よりも、モノを開発する喜び、悩み、苦しみ・・逸話を充実して欲しい・・とか、
仕事に対する意欲が出ない・・、職場の人間関係・・など、生き方、どうした良いかの質問など・・、
メールを頂いていますが、 どう お答えしたら 良いのか 迷っています。
僕自身の生き方・・、田舎での貧困な子供時代、空海伝承の影響、這い上がり、授業料の安い学校
大仏師松久宗淋先生の日曜仏所への通いなど、技術を離れた話題の方が タントありますので・・。
時々 余談で、人間nagusa_keiを書き込んで いきたいと思います。
|
* ドライバーソフトのLOOP番地を固定し、インストラクションの最初のバイト読み込み時、 3ビット(b3)の位置にレディ信号を突っ込み、0x20 又は 0x28 で CPUを騙す。 即ち、レディ信号ない時 JR NZ LOOP (0x20、0xFE)、 レディ信号検出時 JR Z LOOP (0x28、0xFE) GET_DATA OR A、$01 ; Zフラグを0とする LOOP JR (N)Z、LOOP ; レディ信号なしの場合 繰り返し、有りの場合 下に抜ける * すげーっ。こんなことやってたのか。理解するのに60秒かかりました。アドレスを固定しておいて、CPUのオペコードフェッチのときにオペコードのb3をレディ信号で操作するのね。^_^; ほかにどんな手品をやったのか、ちょっとほかの話題で間を置いて教えてください。
2006/8/22(火) 午後 10:48 [ かの ]
純粋ソフトな人にはこの話、なかなか理解しにくいですね。回路図があるとわかりやすい…というものでもないでしょうし▼(このブログはコメントに改行の挿入を許さないようなので、新聞記事みたいな記号を使ってみます)▼CPUが命令をフェッチするときはまずアドレスバスに番地を乗せますね。そのアドレスバスにLOOP番地だけをデコードする回路を付けておき、その出力信号でデータバスのBit3だけを、[メモリ側]<-->[FDCのレディ端子側]、というふうに切り替える。そうするとおなじLOOP番地をフェッチしているのに、レディ時は$28、ノットレディ時は$20が読み出される。そんなことは知らないZ-80は、それをオペコードと解釈して実行サイクルに入る…という具合ですね?▼逆アセンブルしてもわからんなぁ、これは。^^;
2006/8/23(水) 午前 7:59 [ かの ]
かのさんへ。 其のとお〜りです。 変化するオペコードを解釈して実行サイクルに入る。 僕の説明不足もあり ご苦労させました。 Z80の ニューモニックは、何十年ぶりでしょうか、殆ど 忘れてた?。 今は、VC、VB。マイコンはCだけでは、トロイ面もあり、所々、関数の中は、ASMで処理してますが・・。若い人が出来ないような、簡潔・円熟のソフトと誤動作のないハード回路を、目標に・・やってます。
2006/8/23(水) 午前 10:43 [ nag*sa_*ei ]
うーん、それにしてもスゴいなぁ。「ソフトでハードを動かす」というのは普通ですが、「ハードでソフトを動かす」例ですね。ポートからハードの状態を読み込んで動作を変えるんじゃなくて、ハードの状態がソフト自体を書き換えちゃうんだもんなぁ。▼たしかに特殊ではありますが、こういう事例を見ると、組み込みにおいてソフトはハードの一部。ソフトとハードは一体だという実感があります。▼勉強になります。
2006/8/23(水) 午後 1:07 [ かの ]