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年製ですね。
P8185を買ったときついでにこんなのも一緒に買っていました。
TIのSNJ54ALS38AJ、オープンコレクタのNANDゲートです。
パッケージはセラミックのCERDIPですが、上面が賑やかですね。
1行目、GFAFは不明ですが9051Yはおそらくデートコードで1990年51週、台湾製です。
2行目のSNJ54ALS38AJが型番ですが、データシートを見ると少し不思議な点があります。データシートのタイトルにはSN54ALS38B(改良版のデータシートしか見つかりませんでした)とありますが、PACKAGING INFORMATIONの欄ではSNJ54ALS38BJと「J」が増えています。末尾のJはCERDIPを表すのでいいのですが、SNJのJは何でしょう?
Z280は特別な初期化をしなくても高速なZ80として動作するので何もしていませんでしたが、Z180の初期化を加えたのでZ280でもやってみました。ゆくゆくはトラップの対応などもやってみたいと考えています。
以下はCPU判別でZ280であると判定されたところです。
このところマイコン関係ばかりだったのでたまにはPC関係のものを。
何年か前にこんな感じのボードもらった記憶があるのですが、どこかのジャンク屋で見かけたものだったかも、記憶があいまいです。
HP製のPCI Expressネットワークボード、GbE×4というあまり家庭には縁のなさそうなボードですね。
Z180の判別と初期化でHD64180RとHD64180Z(Z180)の判別ができましたが、そうなるとZ8S180の判別もしたくなります。これは持っていないので新たに調達しました。
Zilog Z8S18010VSG、10MHz版になります。Z8S180には33MHz版などという高速なものもありますが目的が目的なのでこれで十分です。
デートコードは2007、なんと2020年製ですね。このZ8S180は現行品なので買ったのもいつものeBayやAliExpressではなくて真っ当なルートです。
まずはそのまま載せ替えてみます。
またちょっと面白いメモリ入手してみました。
IntelのD87C64というUVEPROMです。27C64と似たような型番ですね。
27C64は汎用のUVEPROMですが、87C64の方はマイクロプロセッサファミリの一員です。それで何が違うかというと87C64は8085, 8088, 8051といったマルチプレックスバスのプロセッサに接続しやすいようにアドレスラッチを内蔵していて、ALE/CEの立下りでA0~A7がラッチされます。
Z80180-Z80 ADAPTER for SBCZ80で久しぶりにPLCCを使ったのでPLCC引き抜き工具を探したら3本もありました。探せばもう何本か出てくるかもしれません。
これ3本とも同じに見えますね。
樹脂部分はまったく区別がつきません。この写真撮るときに表裏を揃えずに撮ってしまったのですが、向きを揃えるとパテント番号の刻印から型から抜く時のピンの位置までそっくりです。
ですが使い勝手はまったく異なっていました。
中央のものはまったく問題なく使えます。
左のはソケットによっては先端が片方しかソケットの溝に入らなかったりします。片方ずつ持ち上げたりすれば抜けないことはないのですが...
長らくお待たせしました、MC68000でのブレーク処理です。
MC68000でブレークに使いやすい命令は何かを考えてみます。命令を置き換えて埋め込むので1ワード長のもの、ユーザモードで実行中でもスーパバイザモードに戻ってくるためには例外を発生させるものが良さそうです。もちろん無条件で実行される必要があります。
これらの条件を満たすものとして以下が考えられます。
TRAP
命令TRAP
命令はAPI的に使われることが多いのでできれば残しておきたいところです。
スーパバイザモードでブレークしたくなることも考えると特権命令も避けたいですね。
未実装命令もMC68020+MC68881などでは使われます。X68000がIOCSコールに未実装命令を使用していたのですが、X68030開発時にコプロセッサ命令との衝突がありIOCSコールの番号を変更せざるを得なかったという事例があります。
Z8S180の前にやってみたいことがあります。
Z180には未定義な命令を実行しようとした時に発生するTRAP割り込みというものがあります。これを捕まえてRST 38H
によるブレークのようにアドレスやレジスタが表示できれば便利でしょう。
ということで調べ始めたのですが、思った以上にハードルが高く簡単ではありませんでした。
まず未定義な命令を実行しようとした時に何が起こるかです。
えっ、0000Hってリセットと同じではないですか。MMUで論理アドレス0000Hに異なる物理アドレスを設定していれば問題ありませんが、ROM, RAMともに16kBしかないSBCZ80でこのためだけにMMUを有効にするのはかなり面倒です。