コンピュータの歴史を暗部も含めてていねいに掘り起こすことで定評のある大原雄介さんによる連載16回目。MicroprocessorではなくてNanoprocessorという製品名がつけられたプロセッサをHPが開発していた頃の話。
"Microprocessor"という用語はどこから生まれたか? CHM(Computer History Museum)の2018年9月20日のブログエントリによれば、Maurice Vincent Wilkes卿がMicroprogram方式という概念を発明した時に、そのMicroprogramを処理するものをMicroprocessorと名付けたらしい。
1960年代後半にはごく一般的な用語になったようで、我々もMicroprocessorという用語を特に疑問なく使っている訳だが、あえて自社の製品にNanoproecssorという名称を付けたメーカーがある。
正式名称というかパーツ型番は「1820-1692」であるが、Nanoprocessorという名前の方が通りが良い(Photo01)。
▲Photo01:LIDは"Loveland Instrument Division"の略である
このNanoprocessorも、なかなか面白い経緯で生まれた。
HPは1939年にカリフォルニア州のパロアルトにあるガレージで創業したのは有名な話で、現在この場所は"Birthplace of Silicon Valley"という扱いになっているが、それもあって創業から20年ほどはHPはカリフォルニア州から動かなかった(流石にガレージからはさっさと転居したが)。
ただ1950年代後半になってくると、HPの企業規模もどんどん拡大しており、そろそろカリフォルニア以外の場所にも拠点を構えるべき、という話が出てきた。
シリコンバレーではないHP拠点
創業者の片方であるDavid Packard氏は元々コロラド州プエブロという、デンバー(コロラド州都)から南に160Kmほどの街で生まれており、それもあってコロラド州で土地を探す。最初に候補に挙がったのは、デンバーから北西に40Kmほどのボールダーで、コロラド大やNBS(現在のNIST:アメリカ国立標準技術研究所)が比較的近いというメリットがあった。
ところがこの候補地探しをたまたま聞きつけたラブランド(デンバーから北に70Kmほど)の地元の銀行家と家電ショップの社長(のちにラブランド市長)の2人がHPにラブランドを強力にプッシュ。コロラド州最初のHPの拠点の誘致に成功する。
こうして1960年に生まれたのがHPのLoveland Facilityである。当初は製造拠点だけで研究開発や設計拠点は引き続きカリフォルニアという予定だったが、研究開発や設計と製造が物理的に離れていると、いろいろやりにくいことが出てくる。
結果、HPはLovelandに限らず追加されたその他の拠点にも、それぞれ独立したR&Dや設計拠点を設けるようになり、カリフォルニア一極集中体制が崩れることになった。
このLoveland FacilityにはLID(Loveland Instrument Division)、CPD(the Calculator Products Division)、CED(Civil Engineering Division)という3つの部門が存在した。ただCPDはその後DCD(Desktop Computer Division)に改編され、ラブランドから北に20Km程のフォートコリンズに移転する。
またCEDは一時期距離測定器の製造で大きく成長したものの、1982年には閉鎖されてしまった。LIDは最後まで残り、1999年に計測器部門のHPからの分離に伴いAgilentとなるが、Lovelandの拠点そのものは2003年にテキサスのBenchmark Electronicsに売却されている。
さてそのCPDが開発し、1977年に発売したのがHP 9845である(Photo02)。
▲Photo02:当時の広告より。当初は9845ではなくSystem 45という名称で販売されていた(型番そのものはHP 9845)
上でCPDはDCDに改編されたと書いたが、このDCDの"Desktop Computer"というのがまさにこれである。発表時の価格は1万1500ドル(1万1000ドルという数字もあって、どっちが正確なのか良く判らない)。当時の為替レートだと大体293万円~306万円といった価格になる。
このHP 9845は同社が1968年に発表したHP 9100からスタートする卓上型電子計算機シリーズのハイエンドともいえる位置づけで、今の分類で言うならDesktop ComputerというよりはWorkstationに近い。
さて、最初のHP 9845Aのシステム構成が見つからなかったので、後継であるHP 9845B/Cの構造をPhoto03に示す。
▲Photo03:出典は"The HP 9845 Project"の"The 9845 System Architecture"。何というか、妙に複雑な構成になっているのが判る
ちなみにHP 9845AはMemory周りが若干異なるらしい。それは兎も角として肝心なのは、HP 9845ではLPU(Logical Processing Unit)とPPU(Peripheral Processing Unit)という2種類のCPUが存在し、しかも並行で動くヘテロジニアスな構成になっていたことだ。
ここでLPUはBASICなどのプログラムの実行を担い、PPUは周辺のI/OとかCRTへの画面出力などを担う格好である。どちらも16bitで、しかもHP独自のものであった。
というか、実際にはLPUとPPUは「ほぼ」同じものである。アーキテクチャそのものは、HPが1966年に発表したHP 2116Aという16bitミニコンのものを踏襲している。
もっともHP 2116Aはディスクリートで組んだCPUボードにコアメモリという構成だったが、その後4Kbit SRAMに切り替わっている。
1977年にはこのHP 2000シリーズのミニコンはHP 1000シリーズに名前が変わり、1980年代に入るとAMDのAm2900シリーズを利用して実装されるようになってた。
ただHPはこれに先んじて、このHP 2116AのアーキテクチャをDesktop Computerに持ち込んだ。
1968年に発表されたHP 9100シリーズはまだディスクリート部品を使ってBCD演算を実装しているものだったが、1971年にこの9100シリーズの後継として登場したHP 9810シリーズはHP 2116AのアーキテクチャをTTL ICで実装している。
これはHP 9830シリーズまで続いたが、HP 9840シリーズでは更に集積度を上げたLSIを構築した。といってもHP 2116AのCPUをまるごとワンチップで構築することは不可能であり、LPUは命令フェッチや実行制御、整数演算を行うBPC(Binary Processor Chip)と、BCD浮動小数点演算を行うEMC(Extended Math Chip)、それとI/O関連(割り込みやDMA処理を含む)を行うIOC(I/O Chip)の3チップ+4つのBIB(Bi-directional Interface Buffer)から構成された(Photo04)。
▲Photo04:この3つのCPU+4つのBIBが、一つの基板の上に実装される形になっていた。HPではこれを"Hybrid Micro Processor"と呼んでいた
一方PPUの方はBPCとIOC、BIBから構成されており、EMCは省かれている。のちのバージョンには、より広大なメモリ領域を利用可能にするためにAEC(Address Extension Chip)が追加されたりもしたが、そちらは本題ではない。
CPDは、このLPUを単体でも発売した(Photo05)だけでなく、PPUの外販も行った。
▲Photo05:といってもHP外ではなく、HP内の他の事業部にも販売したというあたりではないかと思う。ヒートシンクの下にLPUが隠れている
このPPU、当初は間違いなくHP 9845のI/O制御用に開発されたプロセッサであるのだが、意外に機器制御にこれが重宝するということになった。
ただIOCは無くても良いという話になり、そこでHPはこのBPCを単体で製品化した。
BPC Processor、パーツ型番は1818-2500となったが、これはHP 9871AというディジーホイールプリンタやHP 9872シリーズのプロッタ、HP 9874Aというデジタイザ、HP 9875Aというデュアルテープカートリッジドライブなど、HP 9845の周辺機器の制御用に広く使われることになった。
さて、ここまではCPDでの事業であるのだが、ここからLIDが絡んでくる。
Nanoprocessorの登場
BPC Processorはたしかに便利なのだが、別に16bit構成である必要は無い。実際の所BPC Processorは16bitなために製造コストがちょっと高めである。BPCと同じような用途をもっと低価格に実現出来ないか?ということで、LIDがBPC Processorを元に8bitベースで開発したのがNanoprocessorである。
ちなみにこのNanoprocessorもまた、HP 9845シリーズで使われている。具体的には内蔵の熱転写プリンタの制御が、このNanoprocessorである。
他にもHP 98034 HP-IB I/FとかHP 98035 RTC(Real Time Clock)など、細かい周辺機器に多用されることになった。他にもHP 3585A(Spectrum analyzer)、HP 3325A/HP 3336(Synthesizer/Function Generator)、HP 9885(FDD Drive)、HP 3070B(Data capture terminal)、HP 7970E(Tape drive interface)、HP 4262A(LCR meter)、HP 3852(Spectrum Analyzer)、HP 3455A(Voltmeter)、HP 9411(Switch Controller)、HP3437A(System Voltmeter)が、やはりNanoprocessorを利用していたことが判明している。
ということでやっとNanoprocessorの話に移る。
NanoprocessorはNMOSベースで、動作周波数は4MHzという資料と5MHzという資料の2つがあってどちらが正確か判らない。命令は2cycleで処理され、cycle timeが400nsと500nsという2つの数字があるためだ。初期版は4MHz、のちに5MHzになったということだろうか?
内部構造はこんな感じ(Photo06)である。
▲Photo06:Address BusがPCの先から出てることに注意
11bitのAddress Busと8bitのData Busを持つ。つまり最大利用可能なメモリ量は2KBである(ブロック切り替えを入れることで最大512KBまで拡張可能)。内部構成は、
・Control Logic Unit
・8bit Accumulator
・8bit Comparator
・8bit Storage Register×16
・1bit Extend Register
・7本のDirect Control I/O
・11bitのPCとSubroutine Stack Register(SSR)、及びInterrupt Stack Register(ISR)
からなる。
ちなみにData Busは8bitだが、Control Busは4bitであり、このControl Busの内容がDevice Addressとして使われる。要するに8bitのI/O Portを最大16個接続できる格好だ。
さてここまでの説明で、Nanoprocessorと呼ばれる理由が概ね判った方は鋭い。
HPがこれをMicroprocessorと呼ばなかった最大の理由は、ALUが無いことだ。
Accumulatorはあるから累積はできるし、Comparatorもあるから値の比較も可能だが、それ以外の算術演算は不可能である。というよりも、そもそも命令の中に加算とか減算命令が存在しない。
命令セットは表の通り。
マニュアルには42命令とか書いてあるが、一覧を数えると48命令ある。それはともかく、AccumulatorのIncrement/Decrementこそあるが、いわゆる加算/減算にあたるものは無いのが判る。Program controlのセクションを見ても、条件分岐にあたるものは無い。
ではどうするか?というとComparatorグループの命令を使い、条件にあわせてR0なりAccumulatorに0あるいはNon-Zeroの値を設定する。
その設定値をDirect Control I/Oに出力する形だ。要するにNanoprocessorは機器制御用なので、条件分岐というのは最終的には外部に対して信号を出すか出さないか、に帰着する。
Nanoprocessorの場合、この制御はDirect Control I/O部にあり、DC0~DC7の7本の信号線のOn/Offをここで担っている。このDirect ControlにAccumulatorの値をセットする訳で、これがZeroかNon-Zeroかで制御信号を出す/出さないという条件分岐が可能になる訳だ。
この考え方は、MC14500がInput/Output Selectorを使って条件分岐を実装していたものに近い。機器の制御用と割り切っているから、こんな実装も可能なわけだ。
ちなみにそんな訳でALUは存在しないが、アプリケーションによってはALUを欲しい、というケースもあり得る。そうした場合には、外付けALUをデータバスに接続する(Photo07)、という方法が示されている。
▲Photo07:ちなみにマニュアルによればNanoprocessor単体だと20ドル未満、外付けのALUとRAMを加味しても27ドル未満で構成できるとしているが、このALUを使うのはLatencyが大きそうだ
ここでRAMが湧いているのは、実はNanoprocessorにはRAMを扱う能力が無いからだ。
Photo06に戻るが、Program Counterの先は"Program Address Bus"、要するにROMへのアドレスバスになっている。で、ROMからの読み出した命令はData Busに入り、Instruction Registerに格納される訳だが、RAMをここに取り付けようとしても、Data BusからRAMに直接戻るパスがどこにもないのがお判りいただけよう。だからもしRAMを付けたければ、I/O DeviceとしてPhoto07のようにぶら下げるしかない訳だ。
このあたりも、MicroprocessorではなくNanoprocessorという名称を付けた遠因の一つになっているかと思う。
社外での販売を目論んだが……
この成功に気を良くした(?)のか、LIDはNanoprocessorの外販も目論んだらしい。カタログを見ると、Cycle Time 500nsの1820-1692以外に、後追いでCycle Time 750nsの1820-1691という製品が用意されているのだが、あいにくほとんど売れなかった。理由はいくつかあり、
・確かに制御には使えるが、ALUすらないのは「制御にしか使えない」という話であって、応用があまり効かない。確かに値段は安いが、安いなりの理由があったとしか言いようがない。
・電源電圧としてVGGが+12V(1820-1692)/+9V(1820-1691)とVDDが+5V、それとVBGが-2V~-5Vと3種類の電圧が必要となっているが、問題はこのVBGでTypical -3Vではあるのだが、実際には必要とする電圧がIC表面にマーキング(ものによってはマジックで数字が書いてある)されており、これに合わせる必要があった。これ、少量を手作業で実装している分にはまだ何とかなるが、量産に流すのにはかなり面倒な話になる。CPDはよくこんなチップで量産できたな、と思わなくもないのだが、HP 9845シリーズは何しろ高額商品だったから、毎日何百台も量産する訳ではないので許容されたのかもしれない。
・Nanoprocessorのアセンブラとローダーは、HP 2100シリーズ(や、後にはHP 9830シリーズ)上で動作するものが提供された。ということはNanoprocessorを使うためにはHP 2100シリーズのミニコンか、HP 9835(ちなみおにお値段は1978年の発売当時で$9,900)が必要になる。これは開発環境としては相当高額な方に分類される。
といったあたりが考えられる。
そもそも1976年にはZ80が発売され、1980年頃には6MHz位の動作が可能な製品も入手可能だったし、Radio ElectronicsのAugust 1981号のActive Electronicsの広告によれば、4MHzのZ-80Aの価格は9.45ドルでしかない。4MHzの1820-1692の価格は18.00ドル、2.67MHzの1820-1691の価格は13.00ドルだったそうで、どう考えても太刀打ちできる筈も無かった。HP社内で使う分にはともかく、外販しても売上はほとんど見込めない状況だった。
HPもこれ以上Nanoprocessorをどうにかしようとは思わなかったようだ。
というのはそれこそZ80に代表される、もっと安価で高性能な8bit CPUが容易に入手できる状況で、LIDの売上を立てるためだけにNanoprocessorを採用するのは筋が通らないし、これを改良したところでこうした競合製品より安価かつ優れたコントローラが作れるという保証もない。後継製品が出なかったのも無理ないことであろう。