上は1 MHzクロックで動作するMB8861Nです。1977年製。下はMB8861Hで2 MHzクロック品。製造は1981年。
インデックスレジスタ操作命令やビット操作命令がほんの少しだけ追加されています。基本となるアーキテクチャや命令体系はMC6800のものを参照してください。追加命令は、こうなっています。
意味
ニーモニック IMMED DIRECT INDEX EXTEND IMPLIED 動作
And Immed. with Memory NIM
71 8 3
Bp & M -> M
Or Immed. with Memory OIM
72 8 3
Bp or M -> M
Eor Immed. with Memory XIM
75 8 3
Bp eor M -> M
Test under Mask with M.TMM
7B 7 3
(Bp & M) eor Bp
Add Index Register ADX EC 4
2
FC 7 3 X + M -> X
NIM, OIM, XIM命令はインデックスアドレッシングモードで指定されたメモリの内容に論理演算を施すための命令です。TMM命令は、インデックスアドレッシングモードで指定されたメモリのビットパターンを調べるための命令です。ビットパターンを指定するイミディエート値のBpという値は、命令の2
Byte目に配置されます。インデックス修飾値は3 Byte目に配置されます。これらの命令はアキュムレータの内容を壊さずに特定メモリの内容を変更したりテストしたりできます。インデックスレジスタにI/Oポートのアドレスを指定することも可能ですから、I/O回りの処理でも便利に使えます。
これらの命令で特徴的なのはフラグの変化です。NIM, OIM, XIM命令では、ZフラグとNフラグが影響を受けます。演算結果が0になればZフラグがセットされNフラグがリセットされます。0以外の値になればZフラグがリセットされNフラグがセットされます。普通のNフラグの意味と異なりますから、注意が必要です。NIM命令とOIM命令ではVフラグがリセットされますが、XIM命令ではVフラグは変化しません。さらにどちらの場合でもHフラグやCフラグは変化しません。
さらにややこしいのがTMM命令のフラグ変化です。イミディエート値で指定されるBpが0の場合(命令動作としては無意味ですが)、Zフラグがセットされ、N,
V両フラグがリセットされます。Bpのマスクビットに対応するオペランドデータのビットがすべて0であれば、やはりZフラグがセットされ、N,
V両フラグがリセットされます。逆にBpのマスクビットに対応するオペランドデータのビットがすべて1であれば、Vフラグがセットされ、NフラグとZフラグがリセットされます。上記のどれでもない場合、Nフラグがセットされて、ZフラグとVフラグがリセットされます。HフラグとCフラグは変化しません。うまく使えば、I/Oのビットテストが簡単になる命令ですが、フラグの役割が通常の命令とは異なりますから、注意しなくてはなりません。
ADX命令はインデックスレジスタへの加算ですが、イミディエートモードではインデックスレジスタに1
Byteのイミディエート値を加算します。エクステンドアドレッシングモードでは、インデックスレジスタに2
Byteの値を加算します。アドレッシングモードによって動作に違いがあるので、注意してください。MC6800には1命令で16
bit演算を行うようなものがなくて、不便な場合もありましたが、このADX命令で8080並みになりました。また、ブロック転送などの場合に、転送元や転送先のメモリアドレスが最初から決まっている場合、ADX命令でインデックスレジスタを操作することで、インデックスレジスタを退避せずに2本のポインタを使い分けることができます。sourceとdestのポインタを使い分ける場合、sourceを保持していたインデックスレジスタを保存してdestをXにロードし直す代わりに、Xにあらかじめ計算しておいた(dest
- source)の値を加算してしまうのです。逆の操作には(source - dest)も計算しておいて、destの入っているXにその値を加算します。インデックスレジスタのロードとストアをダイレクトアドレッシングで実行するだけで9クロック必要で、しかもポインタのインクリメントも片方の分は省略できますから、7クロックで加算できるADX命令は実行時間の点でも有利です。
当然ながらこのMB8861はマスクレベルでMC6800と同一でないため、未定義命令の動作が異なっていたのが話題になっていましたっけ。この頃のプロセッサは、未定義命令を実行した場合に例外を生成せずに、なにか変な動作をして(あるいな何もしないで)プログラムを実行し続けました。中には便利かもしれない動作をするものがあったのです。もちろん、将来のプロセッサで継続サポートされる保証はないのでプロは使ったりできませんが、アマチュアなら、そういう変な小技も自慢の種にすることも許されたってことです。
富士通はマイクロプロセッサ本体以外にも、クロックジェネレータなどの周辺ICを独自に開発して供給していました。また、MC6820やMC6850などの周辺LSIと互換のある製品も供給していました。ただ、独自の型番を付けて、対応がわかりにくかったですけどね。さらに、周辺回路を複合したMC6802相当のマイクロプロセッサでCPUコアがこのMB8861になっている、MB8871もありました。
これは富士通独自のMB8861/MC6800用クロックジェネレータのMB8867で1977年製のもの。バイポーラプロセスで作成され、8
MHzや16 MHzの水晶発振子を外付けしてMB8861のクロック端子を直接駆動できるようになっています。ダイナミックメモリのリフレッシュサイクルやDMA用のタイミングを作成するため、クロックを引き延ばす回路も内蔵していたように思いますが、詳細な資料がないので、あやふやなままです。
採用したコンピュータ製品
富士通 Lkit-8, FACOM L-8AシリーズReturn to IC Collection