コンピュータの歴史を暗部も含めてていねいに掘り起こすことで定評のある大原雄介さんによる連載14回目。今回取り上げるのは、MotorolaのMC14500。知らない型番という人は多いと思いますが、ある業界では広く使われていた製品です。
昨年のことであるが、Xにこんな投稿をした。
すると、知り合いの京都人がこんなことをポストしてて。
そこで思い出したのがMC14500。いやこのPostが出てくるまで完全に失念していた(この連載のネタは、皆さまの情報で成立しております)。
PLCとは何か
ということで今月のお題はMotorolaのMC14500。ある種の業界で広く使われた1bit MCUである。
どんな業界かというと、PLC(Programmable Logic Controller)業界である。まずこのPLCというものを簡単にご紹介したい。
PLC、あるいはSequencerなどとも呼ばれる(ちなみにこれは三菱電機の商標だが、三菱以外の製品をSequencerと呼ぶこともある)が、これは現在も広く利用されている。PLCの目的は機器の外部制御である。具体的に言えば、工場におけるラインとか装置の制御である。例えばA・B・Cという3種類の加工装置があり、その間をベルトコンベアD・Eが繋いでいるとしよう。ここで手順は、
(1) Aに(多分手作業で)素材をセット
(2) Aで素材を加工
(3) 加工後の素材をDに載せて、Bに移動する
(4) Bで追加工を行う
(5) 追加工の素材をEに載せて、Cに移動する
(6) Cで追々加工を行う
(7) 加工完了
といった感じになる。
厳密に言えば、(3)で加工後の素材をDに載せるのは作業員なのか機械なのかとか色々あるのだが、話を簡単にしたいのでここでは機械がやるとしよう。
すると実際の作業員の手順は、
(1) Aに素材をセット
(2) Aを稼働させて加工を行う
(3) 加工完了後にAを止め、加工後の素材をDに載せる
(4) Dを動かして加工後の素材をBまで移動させる
(5) Bに加工後の素材をセット
(6) Bを稼働させて追加工を行う
(7) 追加工完了後にBを止め、追加工後の素材をEに載せる
(8) Eを動かして追加工後の素材をCまで移動させる
(9) Cに追加工後の素材をセット
(10) Cを稼働させて追々加工を行う
(11) 追々加工完了後にCを止め、追々加工後の素材を取り出す
てな感じになる。
問題はこのA・B・Cという機械とD・Eというベルトコンベア(さらに言えばコンベアに加工後の素材を載せたり、コンベアから素材を取り出して機械に載せたりする装置)は全部別々のメーカーだったり、同じメーカーでも別に連動する機構がついていなかったりする。
そもそもほとんどの工場の場合、製造装置や搬送装置は様々なメーカーのモノが混在するから、「お互いに連携して」なんて事が無い(いや昨今はだいぶ変わりつつあるのだが、PLCが登場した1960年代末期は、連携なんて話は全くなかった)状況だった。
んじゃどうしていたか?というと、機械やら搬送装置やらにものすごく沢山の作業員が張り付いて連携を取っていたのだが、これは当然人件費が高騰することになる。そこで、リレーなどを使って、ラダー回路と呼ばれるものを作成して制御する事が行われていた。
ラダー回路とは、(a)→(b)→(c)→……と、複数の処理を順に並べ、(a)が完了したら(b)に、(b)が完了したら(c)に、という具合に最初に並べた順に随時処理を行う仕組みである。
もうちょっと後になると、機器の制御(例えば温度を一定に保つために、温度センサーと組み合わせて細かく加熱したり止めたりを繰り返す)なんかも機能に入ったりした。
なのだが、このラダー回路、要するに物理的にリレーなり何なりを組み合わせて構成されるから、製造ラインにちょっとした変更が入るだけで修正が超大変(半田ごてを振り回す羽目になる)だし、細かいパラメータの修正も同じくである。
もうちょっと簡単に出来ないか?と言うことでGMが1968年に「電子制御に基づく制御システム」の要望を出し、これにBedford Associatesというコンサルタント会社に在籍していたDick Morley氏が(たまたま考えていた)PLCのアイデアを提案、これが受け入れられることになった。
Morley氏は同僚と一緒に、そのPLCを製品化するModicon(MOdular DIgital CONtrollerの略だそうだ)という会社を1968年に立ち上げ、1969年にModiconのPLCがGMに納入されることになった。ただPLCは勿論GM専用のものではなく他の顧客にも販売されるようになるし、またModiconの成功を見た競合メーカーも当然同種の製品を投入するようになる。
ModiconのPLC(Modicon 084)は16bitのミニコンをベースに構築されており(Photo01)、他社もこれに追従するようになる。
▲Photo01:Modicon 084とDick Morley氏。出典は"Electro Technique for Trading &Industry"のFacebook投稿
余談になるがModiconはその後Gould Electronicsに買収され、そのGould ElectronicsがSchneider Electricに買収されたことで、現在はSchneider Electricに吸収されているが、同社は現在もModiconの名前を冠するPLCを提供中である。
さて、Modicon 084の成功などもあってPLCの父と呼ばれるようになったMorley氏が、PLCの設計方針として定めたのが、
・No interrupts for processing(割り込み処理無し)
・Direct mapping into memory(メモリの直接マッピング:Pagingとかを入れない)
・No software handling of the repetitious chores(繰り返しの雑用をソフトウェアで行わない)
・Slow(低速:これのみ間違っていたと、Morley氏は後に語っている)
・A rugged design that really worked(確実に動く堅牢な設計)
・Language(言語:ラダー回路に適したプログラミング言語を利用)
といった事柄である。
ちなみにこの設計方針、1968年1月1日の朝、二日酔いの状態で30分で決めたらしい。
MC14500Bのアーキテクチャ
さて、ここまでは長い枕でここからが本題である。
PLCが普及を始めたことで、コンピュータメーカーもこのマーケットに向けたシステムの開発を始めるようになる。
そんなPLCのマーケットに向けて、MotorolaのVern GregoryがPLC向けのワンチップマイコンを考案する。
実際の設計は同じMotorolaのBrian Dellande氏が行った。それもあって"MC14500B Industrial Control Unit Handbook"(Photo2)は2人の共著となっている)。
▲Photo02:Manualの表紙ではICU(Industrial Control Unit)になっている
MC14500Bと名づけられたこのワンチップマイコン、筆者が記憶している限りは世界初の1bitマイコンである(Photo03)。
▲Photo03:MC14500Bの基本構成。PC(Program Counter)が外部に設けられているのが判る
"1bit"の定義だが、Photo04から判るようにData Busが1bitしかない。
▲Photo04:ちょっと判りにくいがData Busそのものは双方向である。ただInput Selectorの方は当然入力を持っていないから、矢印が片方向になってるだけである
ただPLCというかラダー回路がそもそもそういうもので、OnかOffかの入力を受け、OnかOffかの出力を行うものだから、1bitで十分足りる。
ただそうなると「1bitでAddress足りるのか?」と思われるかもしれないが、実を言うとMC14500BはAddressの管理を自分では行っていない。
Photo04を見直してもらうと判るが、MC14500BにはそもそもAddress生成機能が搭載されていない。
Program Counterすら外付けチップ(MC14516B)になっている時点でお察しである。MC14500Bはこの図にあるように、4bitのLD(命令バス)経由で命令を受け取り、それを解釈して1bitのData Busに対して入出力を行う、以上のことは出来ない。
なかなかにキマった構成である。もっともこれ、要するに制御対象となるシステムの規模に合わせてメモリ構成とかを自由に変えられる(というか、システムに合わせて外部回路を設計する)ので、今の常識からすれば考えにくいかもしれないが、当時としてはこちらの方が低コストで目的の制御回路を構築可能だった。
動作周波数は最大1MHzであるが、最小は0まで落とせた。CMOSで製造されているものの、Static回路を取っていたものと思われる。
「0まで落としてどうする」と言われそうだし、実際に0まで落とすことはなかったとは思うが、製造装置の中にはゆっくりとした動きが要望されるものも少なくない。そこに1MHzとかで処理を行っても空回りするだけである。
Photo02にもあるが、例えば1MHz駆動だと60Hz電源のHalf-Cycle(つまり1/120秒)の間に8300命令以上を処理できるが、明らかにこれは高速すぎる。
MC14500Bは内部にクロックオシレータを内蔵しており、最大1MHz駆動であるが、外部抵抗の値を変化させることでこれを10KHz程度まで落とすことが可能になっている。こういう低速な動作でも安定して稼働するためにはStatic回路を利用した方が確実であった(Photo05左上)。
▲Photo05:入出力を複数に分割することも可能で、その場合はこの一番下の図にあるMC14599BとかMC14512を併用することになるが、この際のチャネル選択を直接MC414500Bからは行えず、外部回路経由でアドレス指定を行う必要があったあたりが、ちょっと面倒な部分か
Photo06左下が内部構造である。
▲Photo06:こちらは1995年のデータシートから抜粋。つまり1995年の時点ではまだ生産されていたことになる
命令は4~7番ピンのI0~I3から入り、Instruction Registerで処理を確定する。これにあわせてLU(Logical Unit)が動作し、この際に3番ピンのData Busからラッチ経由でデータを取り込んだり、逆にRR(Result Register)からData Busにデータを送り出したりする。
ただLUから直接データを出力することはなく、かならず1bitのRRを経て送り出す仕組みである。また処理後にはFlag O/FやJMP/RTN/Writeといった信号ピンにパルス信号が送出される。
普通(?)のCPUだと、Status Registerなどに反映されるものが、MC14500Bでは全部外部に信号として送出されるので、外部回路でこれをハンドリングする必要がある。
命令はPhoto06のTable 1にあるように16種類で、
NOPO NOP。Flag Oにパルス出力
LD Load result Register。Data Busの内容をRR(Result Register)にロード
LDC Load Complement。Data Busの内容を反転してRRにロード
AND Data Busの値とRRの論理積を取ってRRにロード
ANDC Data Busの値を反転させたものとRRの論理積を取ってRRにロード
OR Data Busの値とRRの論理和を取ってRRにロード
ORC Data Busの値を反転させたものとRRの論理和を取ってRRにロード
XNOR Data Busの値とRRの排他的論理和。RRとData Busの値が一致したらRRに1をセット
STO RRの内容をData Busにセットし、Writeにパルス出力
STOC RRの内容を反転してData Busにセットし、Writeにパルス出力
IEN Input Enable。Data Busの内容をIEN Registerにロード
OEN Output Enable。Data Busの内容をOEN Registerにロード
JMP 無条件Jump。JMPにパルス出力
RTN Return。RTNにパルス出力し、次の命令をスキップ
SKZ RRが0なら次の命令をスキップ
NOPF NOP。Flag Fにパルス出力
となっている。
何というか、普通のCPUとはかなり命令の様相が異なっているのが判る。
ちなみに実行制御命令はIENとOENである。IENは、Data Busの値を読むか否か(IENを0にすると、Data Busの値と無関係に0がIEN Registerに設定される)を制御し、逆にOENは処理結果を出力するかどうかの制御に利用できる。
Handbookに掲載されているOENの利用例がこちら(Photo07)。
Photo07:いわゆる条件分岐命令とかではない辺りが流石である
要するにAとBという2つの値の論理積を取って、1ならパルスを2回、2ならパルスを1回出力するというものだが、論理積を計算して、その結果をOENに渡す。
もし論理積が1なら続く2回のSTO/STOCでパルスが2回でるが、0なら何も起きない。ついでRRの値を反転させてOENに渡す。すると続く1回のSTO/STOCは論理積の結果が1なら何も起きないが、0なら1回パルスが出ることになるという訳だ。
ちなみにJMP/ReturnとかNOPO/NOPFは、そこで何をするかは外部回路任せになっている。自由度が高いというか、単体では何もしてくれない仕組みである。
そんなMC14500Bであるが、先に示したMorley氏によるPLCの設計方針を非常に忠実に実装した構造である事が判る。
割り込み処理の機能はそもそも無いし、MemoryもDirectにMapping可能である(というか、そもそもMemory操作そのものを放棄している)。ソフトウェアは純粋にロジックだけを記述すればよい(というか、それ以外の事が出来ない)し、構造も簡単で堅牢と評しても差し支えない代物になっている。しかも遅い(笑)。
いや全ての命令を1cycleで処理できるから遅くは無いのだが、10KHzとかで動作できる商用CPUはそう多くない。処理はほぼ論理演算で、これはラダー回路をそのまま置き換えることが出来たし、この後出て来たラダー言語とも相性が良かった。
かくしてMC14500Bは1976年に発表されてから、1980年代を経て1990年代中旬頃まで広く使われた。
長く使われたが後継はなし
先にPhoto05で「1995年の時点ではまだ生産されていた」と書いたが、どうも1996年頃に生産中止となったらしい(最終出荷日は2000年2月)。
ちなみに1970年代にはPLCの世界では比較的ポピュラーだったらしく、1978年には産報出版から電子科学シリーズ No.81「マイクロプロセッサ(MC14500B, MC8085)シーケンス制御」(安居院猛、清弘智昭著)なんて本も出ていたらしい。
もっと言えば、既に生産はとっくに終了しており、Motorolaから分離したFreescaleを買収したNXP SemiconductorのサイトでもEOL(End of Life)のお知らせくらいしか情報が無いのだが、廃番製品を扱っているメーカーからはまだ購入できるあたり、まだ流通在庫が払底するところまでは行っていないらしい。
あるいは世界中探すと、まだMC14500Bを使ったPLCが現役で稼働しているところもあるのかもしれない。
なのだがMotorolaはこのMC14500Bの後継製品は用意しなかった。
1970年代にはMCUに色々突っ込んで複雑なものを作るより、最小限のコントローラの周囲にStandard Logic ICを組み合わせた方が確実かつ安価だったのだろうが、1980年代に入ってプロセスの微細化が進んだことで、もうワンチップでMC14500Bベースのシステム丸ごとを代替できるような機能が実現した。
また当初はPLCと言えばそれこそOn/Offが出来ればよかった訳だが、機器の制御が複雑化(上で温度制御を例に取ったが、これもPID制御とかが出てくると1bitではどうにもならない)してくると、MC14500Bの延長ではどうにもならなくなった。
Motorolaも1979年にはMC6809とかMC68000などを発表しており、これらを利用した方がより高機能なPLCを簡単に構築できる。
少量多品種の低価格向けPLCであっても、70年代はMask ROMの焼き付けコストが高価だったから敬遠されたが、80年代に入ってEPROMやEEPROMを搭載したMCUが登場、90年代に入るとFlash Memory内蔵MCUが投入されたことで、結局これらに代替されることになってしまった。
後継製品が出なかったのもむべなるかな、というところだ。
ただ1bit MCUという他にほとんど例がない製品のためか、MC14500Bを搭載したSBC(Single Board Computer)がまだ購入可能(パーツと基板込みだと49.00ドルだそうだ)だし、自分でSBCの基板を起こして、そのうえでゲームを動かしている強者もいたりする。ほとんど知名度はないが、恐らくもっとも高性能な1bit MCUであった。