NSC800
先日のZ80180アダプタとともにNSC800アダプタの基板もいただいていますのでデバイス買ってみました。Rレジスタや未定義命令の挙動も見てみたいですし。
National SemiconductorのNSC800N-4I、4Iは4MHzで動作温度範囲が-40~+85°Cを表します。1988年製ですね。
マイクロプロセッサ・マイクロコントローラ等です。
先日のZ80180アダプタとともにNSC800アダプタの基板もいただいていますのでデバイス買ってみました。Rレジスタや未定義命令の挙動も見てみたいですし。
National SemiconductorのNSC800N-4I、4Iは4MHzで動作温度範囲が-40~+85°Cを表します。1988年製ですね。
Z280は特別な初期化をしなくても高速なZ80として動作するので何もしていませんでしたが、Z180の初期化を加えたのでZ280でもやってみました。ゆくゆくはトラップの対応などもやってみたいと考えています。
以下はCPU判別でZ280であると判定されたところです。
Z180の判別と初期化でHD64180RとHD64180Z(Z180)の判別ができましたが、そうなるとZ8S180の判別もしたくなります。これは持っていないので新たに調達しました。
Zilog Z8S18010VSG、10MHz版になります。Z8S180には33MHz版などという高速なものもありますが目的が目的なのでこれで十分です。
デートコードは2007、なんと2020年製ですね。このZ8S180は現行品なので買ったのもいつものeBayやAliExpressではなくて真っ当なルートです。
まずはそのまま載せ替えてみます。
Z8S180の前にやってみたいことがあります。
Z180には未定義な命令を実行しようとした時に発生するTRAP割り込みというものがあります。これを捕まえてRST 38H
によるブレークのようにアドレスやレジスタが表示できれば便利でしょう。
ということで調べ始めたのですが、思った以上にハードルが高く簡単ではありませんでした。
まず未定義な命令を実行しようとした時に何が起こるかです。
えっ、0000Hってリセットと同じではないですか。MMUで論理アドレス0000Hに異なる物理アドレスを設定していれば問題ありませんが、ROM, RAMともに16kBしかないSBCZ80でこのためだけにMMUを有効にするのはかなり面倒です。
はせりん@haserin09さんよりはせりん工房の基板一式を頂きました。その中からすぐに部品の揃ったZ80180-Z80 ADAPTER for SBCZ80を組み立ててみました。
これは電脳伝説@vintagechipsさんのSBCZ80にZ180を搭載するためのアダプタです。
しばらく前に出てきたまま忘れていたボード、思い出したので動かせないか調べ始めました。
SH/7045のボードですね。シルクにはありませんが、秋月で買ったようなかすかな記憶があります。
秋月のサイトを見てもさすがに取り扱いは無い(買ったのは10年どころではない昔のはず)ですが、「回路図集」の中にキットの説明書がありました。やはり記憶はあっていたようです。
表面実装部品は実装済みだったはずなので自分で付けたのはコネクタ・ソケット・水晶・ケミコンだけです。
前回まででIN
/OUT
命令で8251にアクセスできるようになりました。これで実用上困ることはありませんが、F8にはさらにポートアドレスが0,1,4~15の場合にのみ使える短縮命令INS
/OUTS
があります。
汎用ロジックによるI/Oポートが動いたので、次は本命の8251を接続してみます。
回路はシンプルです。
SN74LS138NはAB2~AB7をデコードして8251のCSを作成しています。
8251の前にまずは単純なポートを試してみることにします。
テスト用のボード、ブレッドボードで十分な気がしますがどうも好きになれないので作ってしまいました。
機能は単純です。
IORに対しては下部ジャンパで設定した値をSN74HC541N経由でデータバスに送り込みます。アドレスをデコードしていないのでアドレスは任意です。
IOWに対してはアドレスの下位4ビットとデータの上位4ビットをSN74ALS574NでラッチしてLEDを点灯します。当初データのみの予定でしたがアドレスも見られたほうが便利だろうと変更しました。
これでIN
/OUT
命令実行時の動作と波形を見てみます。ロジックプローブの信号の対応は以下のとおりです。
前回メモリアクセスについて書いたので今回は本題のI/Oアクセスについてです。
最初はIN
命令です。