Categories: R10コンピュータ

日立 MB-S1 Z80Bカードが不安定

MB-S1/10の実機環境も復活し、MP-3550も導入できたことから
S1用CP/M-80の移植作業を再開しました。

CP/M80 Ver2.2はこちらからDLしたZ80用ソースコードを60K用にしてアセンブル、
2D用のブートローダはsamさんに作成して頂いたものを活用させて頂いています。

BIOS09とBIOS80はメモリロード後のZ80の起動と最低限のI/Oを実装しています。
フラグ監視式のポーリング動作ですが、6809とZ80の共通領域にデータを書込んでI/Oを表示させることができるところまでたどりつきました^^

ブートローダのメッセージは

40文字モードの大きな文字で8ビットマシンをアピールし、グリーンディスプレーぽく緑色で出力。

60K CP/M80なので拡張メモリの$0D400番地からCP/M80本体+BIOS80をロードします。
BIOS09は$89000からロードして論理アドレス$6000から割り付けています。
6809もZ80も両方RUNしBIOS内の無限ループでフラグの変化に応じて処理をさせていますが、
6809側からZ80のメモリ領域を参照する場合はZ80を止める必要があるので、このままではかなり非効率です
(Z80を止めないとフローティング状態のS1バスが接続されない回路になっている)
毎ループごとにZ80が停止するのは無駄すぎで、最終的には割込み式にしないと実用性は厳しそう・・・

ロードが完了するとBIOS09が起動し
Z80スタンバイのYes/No, Z80リセットベクタのメモリへの書込みYes/No, Z80スタート(Yes/No)
を選択しフラグチェック式のI/Oループに入ります。

こんな感じでデバッグできるようにテスト項目を実装しました

Z80のリセットベクタは60KでBIOS80の先頭$EA00をセット
(これでいいのかな??)
現在はBIOS80の実装が悪いのか、Z80カードが正常に動作していないのか不明ですが、
データの授受はうまくいっていません。

テスト用にBIOS09のループ内でZ80との共通領域にデータとフラグを書込んで、
キーボードから入力したデータをZ80がデータを書いたと想定したプログラムを書いてループを回したところとりあえずフラグとデータ転送の処理はOKっぽいところまできていました。
ところが、色々デバッグしているとコードも変更しないのにプログラムが動作しなくな現象が発生・・・
(Z80側に移行できなくなる)

原因を調べるとZ80Bカードに取り付けたバス信号用のLEDに正常時と違う表示が出るようになっていました。
それは、Z80をスタンバイに切り替えた後にS1バスに向けての#BGIN信号がアクティブにならないこと正常時はZ80をスタンバイにすると#BGIN(一番左のLED)がアクティブになっていたのにおかしくなるとアクティブになりません。

赤い四角で囲った部分を手で押さえるとアクティブになります。

オシロで信号を見ているとZ80にBUSREQしてもBUSACKが返ってこないことが原因っぽいです。
BUSREQとBUSACKそしてWAITあたりの回路でどこかが外れているのかなぁ・・

やはり、ここまで雑な配線では安定して動作してくれることは無さそうです^^;;

少し前はICを押せばすぐに直っていたのですが、最近は配線面も挟むように押さえないと反応しなくなってきました。

いよいよ本格的に不具合箇所を探す必要がでてきました。
そういえば、昔読んだ雑誌にマイコンのデバッグは配線も含めてデバッグなのでソフトもハードも丁寧でないといけないという記事を読んだことがあります。

最近では、電源を入れた時は全滅、押さえて調子が戻っても1時間後には不具合発生といった具合で
まともに動作しているとは言えなくなってきました^^

そんなZ80カードが不安定になってしまった記録

kabekin