マルチCPUシステムの工夫
実家をあさっていると、このシステム(たぶん)の回路図や資料も出てきました。
今見ても面白い点があるので、一度まとめて紹介します。
まず一番の売りは、「6809からZ80のサブルーチンをコール」したり、逆に「Z80から6809をコール」したり自由に(多重に)できることです。
これを使って、CP/MのBIOSを6809のコードで書いたりしています。
この機能は、ハードとソフトの連携で実現しているのですが、ハード側は、単にCPUを切り替えるだけの回路で大変シンプルです。
■CPU切り替えのハード側の仕組(アービトレーション)
このシステムは、68B09(2MHz)とZ80(4Hz)、ふたつのCPUのアドレスバスとデータバスを完全にパラ接続する完全密結合のマルチCPUシステムで、ダイナミックにふたつのCPUが切り替えられます。
切替には1bitの切替ポートが用意されており、最初は6809側になっています。
6809が動いているときはZ80は*BUSREQ状態のためアドレス/データバスを開放(ハイインピーダンス状態に)して止まっています。
そこで6809が切替ポートをダミーライト(青矢印)すると、切替ポート(LS393)がZ80側に代わります。緑矢印により6809にHALTが掛けられ、6809がバスを開放して停止したのをBSとBAにより確認してから、Z80の*BUSREQを外しZ80が動き出します。
逆にZ80が切替ポートにダミーライトすると(このポートはトグル動作なので)こんどは6809側になり、Z80に*BUSREQをかけます。こんどはZ80がバスを開放して停止したのを*BASACKにより確認してから、6809の*HALTを外し6809が動き出します。
このように6809とZ80がたすき掛けになったフリップフロップのような動作をして、とてもシンプルなバスアービトレーションを実現しています。
D-FFは、RESET時にZ80を起動させない働き(リセットを解除させない)をします。
最初の切り替えアドレスに6809がダミーライトして初めてZ80のリセットが外れます。
この仕掛けにより、6809側のソフトとZ80側のソフトをCPU切り替えハンドラに導くことが出来ます。
具体的には、
① リセットで起動した6809はCPU切り替えハンドラに到達し、Z80に切り替える。
② Z80のリセットが外れ、Z80もCPU切り替えハンドラに到着し、6809に切り替える。
③ 制御は6809に戻り、かつZ80は切り替えハンドラで切り替えられるのを待機する状態になっている。
ソフト側の仕掛けは次回