【S1】Z80Bカードが不安定^^

スポンサーリンク

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カードが不安定になってしまった記録

 

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。 本文に全角文字を2文字以上含めて下さい (スパム対策)