87C64と8185
カテゴリー:
またちょっと面白いメモリ入手してみました。
IntelのD87C64というUVEPROMです。27C64と似たような型番ですね。
27C64は汎用のUVEPROMですが、87C64の方はマイクロプロセッサファミリの一員です。それで何が違うかというと87C64は8085, 8088, 8051といったマルチプレックスバスのプロセッサに接続しやすいようにアドレスラッチを内蔵していて、ALE/CEの立下りでA0~A7がラッチされます。
またちょっと面白いメモリ入手してみました。
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を有効にするのはかなり面倒です。
今回はZ80180-Z80 ADAPTER for SBCZ80のソフトウェア編です。
SBCZ80にZ80180-Z80 ADAPTER for SBCZ80を載せてもそのままでは正常に動作しません。
Z180ではZ80から追加された機能をコントロールするための内蔵レジスタがI/O空間の00H~3FHに配置されていますが、SBCZ80ではZ80 SIOがI/O空間の00H~03Hに配置されており、アドレスが重なってしまっているからです。SBCZ80を改造してZ80 SIOのアドレスを変更する手もありますが、Z180の内蔵レジスタはI/O Control Register(ICR, 3FH)で移動可能なのでこちらを移動することにします。
以上の変更で一応動作するようにはなりますが、さらにいくつかのレジスタを設定することでパフォーマンスが上がりますので設定しておきます。
はせりん@haserin09さんよりはせりん工房の基板一式を頂きました。その中からすぐに部品の揃ったZ80180-Z80 ADAPTER for SBCZ80を組み立ててみました。
これは電脳伝説@vintagechipsさんのSBCZ80にZ180を搭載するためのアダプタです。
今回はブレーク処理についての予定でしたが、MC68010の判別で書き足らなかったことがいくつかありますのでそちらを書くことにします。
MC68008の判別もできないか考えたのですが...
MC68010の判別は例外処理に必要なのに対し、MC68008の判別はどうしても必要というわけではありません。3.を試すにしても優先度はかなり低いですね。
SH7045ボードへのUniversal Monitorの移植に着手したのですが、その前にMC68000系で動くようになっていますのでそのあたりの話を何回かに分けて書こうと思います。
MC68000自体は30年ほど前にいじっていて(だから未経験のプロセッサを優先して後回しになっていました)サクサク書いていたのですが、これまで書いたことがなかったのがプロセッサの識別です。
当時からMC68010は載せていましたがモニタは専用にアセンブルしていました。
ですからMPUを載せかえる時はROMも一緒に交換です。
今回は基本部分がすんなり動作したので識別ルーチンに挑戦することにします。
識別の原理はもちろんプロセッサによる挙動の違いを検出するわけですが、これにはいくつかのパターンがあります。
ここ数日Universal MonitorのMC68000系への移植をやっていて、ある程度まとまったら何か書くつもりです。
で気がつくともう2月も終わりですね。