MC14500 ICU

完全なCPUとは言いがたいのですが、シーケンス制御回路で使われているリレー回路の置き換え用に、Motorola社は1 bit CPUの主要部分を構成するモジュールとして、1977年にMC14500を発表しました。Industrial Control Unit (ICU)という名称が与えられています。

MC14500

なんの変哲もない、16ピンプラスチックDIPパッケージの14500シリーズのC-MOS ICに見えますね。実際、このICのスペックはマイクロプロセッサ関係のデータがまとめられているMotorola Microprocessors Data Manualでなくて、汎用C-MOSロジックICのデータが集められたMotorola CMOS Dataの方に記載があります。
1 bitのALUとアキュムレータ、条件判定出力などが内蔵されていますが、プログラムカウンタや全体の制御回路は外部に自分で設計して接続しなくてはなりません。

ピン配置はこうなっています。
RST   1      16 VDD
Write 2      15 RR
Data  3      14 X1
I3    4      13 X2
I2    5      12 JMP
I1    6      11 RTN
I0    7      10 Flag0
VSS   8       9 FlagF
RST信号はリセットで、Writeが書き込みパルス、Dataは双方向のデータバスです。1 bitデータを扱うので、データバスは1本しかないのですね。I0からI3が命令入力です。FlagF, Flag0, RTN, JMPの各端子は、それぞれNOPF, NOP0, RTN, JMP命令を実行したときにパルスが出力されます。X1とX2はクロック発振回路で、抵抗を1本接続するだけで抵抗値に応じた周波数で発振します。RRはアキュムレータに相当するResult Resisterの内容が常に出力されています。VSSとVDDは電源で、3 Vから18 Vまでの電圧範囲で動作保証されています(電圧が高いほど高速)。

命令は4 bitの入力になっていることからわかるように、16種類あります。ただし、このICが読み込む命令は4 bitですが、分岐命令などの場合、MC14500の外部のプログラムカウンタに読み込ませる定数が別に必要ですし、I/O命令などでもI/Oポートアドレスを指示しないといけません。そのため、命令を16 bit幅くらいに設計して、残りの12 bitをそのような定数として使用するのが普通です。プログラムカウンタやI/Oポートアドレスの仕組みなどはすべてMC14500を用いるシステムの設計者が独自に考えるので、命令体系には自由度があります。これから解説する命令定義は、あくまでMC14500内部の解釈です。

命令 記号 意味
0000  NOP0  No Operation, Flag0にパルス出力
0001  LD    Load result register, Data -> RR
0010  LDC   Load complement, NOT(Data) -> RR
0011  AND   Logical AND, RR & Data -> RR
0100  ANDC  Logical AND complement, RR & NOT(Data) -> RR
0101  OR    Logical OR, RR | Data -> RR
0110  ORC   Logical OR complement, RR | NOT(Data) -> RR
0111  XNOR  Exclusive NOR, if RR = Data, 1 -> RR else 0 -> RR
1000  STO   Store, RR -> Data, Writeにパルス出力
1001  STOC  Store complement, NOT(RR) -> Data, Writeにパルス出力
1010  IEN   Input enable, Data -> IEN register(後述)
1011  OEN   Output enable, Data -> OEN register(後述)
1100  JMP   Jump, JMPにパルス出力
1101  RTN   Return, RTNにパルス出力, 次の命令をスキップ
1110  SKZ   RR = 0のときに次の命令をスキップ
1111  NOPF  No Operation, FlagFにパルス出力

プログラムカウンタなどは内蔵していませんから、JMP端子にパルス出力が行われた瞬間に命令の残りのビットをプログラムカウンタにロードするような回路を外付けして始めてJMP命令の意味になります。逆にNOP0で出力されるFlag0パルスで特定のアドレスへジャンプするように外付け回路を設計することも可能で、その場合は命令の呼び方を変えた方がいいでしょうね。
Result Resisterの他にInput Enable Register (IEN)とOutput Enable Register (OEN)という1 bitのレジスタが内蔵されています。IENが1ならData端子から読み込んだデータがそのまま演算対象になりますが、IENが0ならData端子に何が入力されていようとDataから0が読み込まれたものと解釈されるようになっています。また、OENが0ならWriteパルスがSTO, STOC命令で出力されなくなります。ある種の条件実行に使用できる仕組みです。
 

1 bitで何ができるかと思われるかもしれませんが、たとえばあるスイッチが押されたらモータに電源を供給するけれどもその最中に別のあるスイッチがONになったら停止させなくてはならない、といった種類の作業なら、1 bitの論理演算と条件分岐と1 bit単位の入出力機能があればなんとかなります。工場の自動加工装置なんかでも、単純なものならこの程度の処理ができれば充分なのです(人がボタンを押すと、台が移動して指定位置にきたら何かして元の状態に台を戻す程度のシーケンス制御などは結構あります)。そこでマルチチップのマイクロコンピュータは高価すぎるとか、マスクROMの1チップコンピュータを発注するほど生産量がないなんて場合に、このICUとメモリと10 - 20個のCMOS ICで実現したらどうかというわけです。
結局は、4 bitや8 bitの1チップマイクロコンピュータ、特にマスクROM版でなくてユーザがPROMにプログラム可能なタイプが普及すると、少量生産であってもハードウェアコストがそちらの方が安くあがり、ソフトウェアも作成しやすくなるので、消えてしまいました。
でもねぇ、遊びで設計して作ってみたら、命令体系の決定とかの自由度が設計者に残されているし、結構楽しかったですけどね。そういうROMさえ手に入れば、3 Vから18 Vの間の任意の電源電圧で動作する(006Pの電池動作も可能なくらい低消費電力で!)変わったコンピュータ(というよりシーケンス制御装置)ができるしね。

Return to IC Collection