標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第588回]

●232C受信でハングアップ?

昨日は、またまたとんでもない落とし穴にはまってしまって、猛烈な残暑の中で一日もがいておりました。
といいましても、もちろんこの暑さですからエアコンなしでは1時間もたたないうちにオーバーヒートしてダウンしてしまいますから、そりゃあもう、エアコンと扇風機とダブルで冷やしながらがんばりましたよお。

ええ。なんとか原因はわかりましたけれど。
こんなの有りかぁ?
暑い夏が、ことさらに暑く感じてしまいました、その顛末です。

なにしろ、早いところ、説明書を完成させなければいけません。
組立説明書だけは、もう1ヶ月も前に完成しておりますが、そのほかの説明書は手付かずのまま、ずっと附属ソフトウェアの作業にかかりっぱなしで来てしまいました。

で、やっとここ何日かの間は、TK80モニタ操作説明書やND80Zモニタ操作説明書の作成作業にかかっておりました。
ここのところずっと、USB(HID)でWindowsバソコンと接続して、リモートプログラムやらZ80BASICやらで動作させることばかり追及してきたのですけれど、それはあくまで附属ソフトウェアを使っての機能です。

いちばん肝心なのは、USB(HID)で接続しないで、ND80ZVだけで、単独でちゃんと操作できることです。
RS232Cの送受信についても、Z80BASICでREAD #1、WRITE #1命令を使うプログラムを書いて、その動作テストをしてきましたが、ND80ZV単独でも、その機能は使えます。

TK80では、STORE、LOADキーを使ってプログラムやデータをカセットテープレコーダに録音、再生することができました。
いまどきカセットテープレコーダというわけにはいきませんから、ND80ZVでは、SAVE、LOADキーを使って、カセットテープの代わりにUSB(HID)経由でWindowsパソコンのハードディスクに、プログラムやデータを書き込み、読み出しをします。

ND80ZVはTK80と同じ動作をするTK80モニタプログラムと、当社オリジナルのND80Zモニタプログラムの両方のモニタプログラムを搭載していて、ディップスイッチで切り換えて使うことができるようになっています。
TK80モニタでは[SAVE]、[LOAD]キーを使います。
ND80Zモニタでは、[*(I/O)][SV](16進キーのC)と、[*(I/O)][LD](16進キーのD)を使います。

オリジナルのTK80モニタプログラムにはRS232Cの機能はありませんでしたが、ND80ZVではPIC18F14K50を利用してRS232Cの送受信をすることができます。
せっかくRS232Cの機能が使えるのですから、TK80モニタのもとでも、RS232Cの送受信ができるように、送信と受信のプログラムも組み込みました。
TK80モニタでは、ROMに組み込んだRS232C送信プログラム、受信プログラムに、キー操作([ADRSSET][RUN])でジャンプすることで、RS232C送信、受信を行います。
ND80Zモニタでは、[*(I/O)][SO](16進キーの2)で、RS232Cの送信、[*(I/O][SI](16進キーの3)でRS232Cの受信ができるようになっています。

操作説明書を書いていて、そこのところの操作の説明を書くために、実際に操作してみましたら…。
なんと。
232Cの受信でハングアップしてしまいます。
いや、何回かやっていますと、まれに数バイト受信できたこともありましたが、でもほとんどは、だんまりを決め込んで、1バイトも受信できずにハングアップ状態になってしまいます。

うう。
あせってしまいます。
むむ。
232Cケーブルの接続がおかしいのか、はたまた相手のプログラムがおかしいのか…。

その確認をするために、Z80BASICを起動して、BASICのプログラムで受信してみますと。
つるっと受信できてしまいます。
基本的には、BASICの受信ルーチンもモニタプログラムの受信ルーチンも同じはず。
念の為に両方のリストを突き合わせてみましたが、特におかしなところはありません。

●オシロスコープで見てみました


上側(CH1)はZ80CPU側からの232Cセレクト信号の出力です。
下側(CH2)は、PIC18F14K50のSTB出力です。
まだ送信側から送信を開始していませんから、バッファエンプティの出力(15μsec程度のLパルス)が繰り返し出されています。

ところが写真でわかりますように、それが途中で止まってしまっています。
Z80CPUからの232Cセレクト出力に対して、PIC18F14K50からはちゃんとバッファエンプティが返されているのに、232Cセレクト信号がHにならずに、ずっとLのままになってしまっています。
プログラムリストを何回調べてみても、こんなバカなことはありえません。

むむむ。
CPUが突然暴走してしまったとしか考えられません。
が…。
より複雑な、Z80BASICでは暴走もしないでちゃんと正しく動作するのに、単純なND80Zモニタプログラムで、毎回必ず暴走してしまうっていうのは、そりゃあ、余りにおかしい。
どこかに、何か、見落としているものがあるはず、なのですが…。
思い当たりませんでした(この時点では)。

●ロジアナで確認してみました

わからないときは、わらをもつかむ気持ちで、カメレオンUSB+ロジアナの登場です。

PROBE0が232Cセレクト信号で、PROBE1がPIC18F14K50からのSTB出力です。
これじゃオシロスコープと同じでさっぱりわかりません。
途中で止まってしまうことだけは確かなようです。

クロックを速くして2MHzで観測してみました。

Z80CPUの側の動作に怪しいところがありそうなので、Z80のIORQ(pin20)とRD(pin21)とD5(pin9)も調べてみました。
IN命令でPICSTBの状態を読んだとき、データバスのD5にその状態が現れます。
クロックの関係でちょっと変な現れ方をしているように見えるところもありますが、ここには問題はなさそうです。

ここが問題のところです。

むむ。
なんだ?
この怪しげな、間延びしたところは?

あ。あ。あ。
ひょっとしたら…。
2010.8.21upload

前へ
次へ
ホームページトップへ戻る