U8088008(はちまるまるはち、と読まれることが多い)は、インテルによって開発製造された初期のマイクロプロセッサであり、1972年4月に発表された。14ビット外部アドレスバスを持つ8ビットCPUで、16KBまでのアドレス空間を扱える。いうチップに実装する予定だった。チップの提供が遅れたことと性能がCTCの目標に達しなかったため、2200には使われなかった(因みにDP2200は結局TTL素子で製作された)。インテルとCTCの契約により、インテルはそのチップを他の顧客(例えば電卓市場参入を表明していたセイコー)に販売する許可を得ていた。外部リンク歴史[編集]CTCは1968年、NASAの技術者だったオースティン・O・ロシュとフィル・レイがサン・アントニオで創業。ロシュはデスクトップ型コンピュータの製造を目論んでいた。タイプライターが置ける場所に置けるよう同じ底面積になっており、画面のアスペクト比はIBMのパンチカードと同じになっている[2]。回路を小さな空間に詰め込みすぎたため、発熱問題に悩まされることになった。発熱問題などに対処するため、CPU部分をワンチップ化して再実装するという設計変更が開始された。彼らが設計したチップを製造してくれる企業を探し、ロシュは当時メモリチップを製造していたインテルにたどり着いた[2]。ロシュはそのコンセプトに懸念を表明していたロバート・ノイスと会った。フラッサニートは後に「ノイスは、それが興味をそそるアイデアで、インテルなら実現可能だが、愚かな行動になると言った。彼は、コンピュータチップはコンピュータ1台につき1個しか売れないが、メモリチップはコンピュータ1台当たり数百個も売れると言った」と述べている[2]。1つの大きな懸念は、インテルの顧客がそれぞれ独自のプロセッサを設計しており、それに使うメモリチップをインテルから購入していた点で、インテルが自前のプロセッサを出荷すればライバルということになってメモリチップを買ってくれなくなる可能性があった。セカンドソースとして加わった。TIはインテルの設計図に基づいて1201のサンプルを作ったが、あまりにもバグが多く、使えなかった。インテル自身の製造は遅延した。CTCはワンチップCPUの完成を待てず、TTL素子でCPUを構成する方向で再設計することを決定した。リリースされ、1970年5月25日、ゼネラルミルズが最初の購入者となった[2]。CTCは2200のリリースで1201を必要としなくなったため、その開発を停止させた。6カ月後、セイコーは1201を科学技術電卓に採用したいとインテルに打診してきた。使ってビジネス用電卓で成功しているのを見てのことである。4004の設計にも関わり1201でもプロジェクトリーダーを務めたフェデリコ・ファジンの指揮で若干の再設計が行われ、ピン数を16から18に増やし、新たな1201が1971年後半に完成した[2]。開発しており、1201は新製品には非力すぎて使えないと判断。1201の知的財産権をインテルに譲渡する代わりに契約金5万ドルを支払わないということにした。インテルはこれを8008に改称し、1972年4月のカタログに120ドルという価格で掲載した[3]。従来の顧客が去ってしまうのではないかという懸念は現実にはならず、8008は商業的に成功を収めた。ファミリへと続いていくことになる[2]。共に簡単なOSが搭載されており、カラーディスプレイ、HDD、キーボード、モデム、磁気テープ/紙テープリーダ、プリンターを制御できる[4]。このプロジェクトはテクトロニクスの支援を得て1972年春にはじまり、約1年後に完成した。命令セットに影響を与えている。イギリスでは1972年、EMIの研究所でトム・スピンクが8008の出荷前のサンプル品を使いマイクロコンピュータを作った。ジョー・ハードマンが周辺回路を設計し、停電時のセーブ・リカバリ機能なども実現している。OSはDECのPDP-11用アセンブラを改造したメタアセンブラで書かれ[5]、PROMに搭載された。試作品がEMI経営陣に披露されたが、プロジェクトは中止となった。設計[編集]8008のブロック図10μmルールのPMOSロジックで実装されている。呼び、1命令は5から11T-statesで動作する[6]。レジスタ間の移動とALU操作は5T(0.5MHzの場合、20μs)、レジスタ-メモリ間の移動は8T(32μs)、コール命令やジャンプ命令は実際に分岐した場合11T-states(44μs)かかる[7]。4040に若干負けるのだが(0.8MHzで0.036MIPSから0.08MIPS)[8]、8008は8ビットの演算ができ、大きなメモリ空間にアクセスできたため、4ビットチップと比較して3~4倍の計算能力があるといわれた。トランジスタ数は3,500個である[9]。最初期のパーソナルコンピュータ製品にも採用されており、フランス製のMicral(キットではない)、アメリカ製のSCELBI(英語版)(キット)などがある。バイナリ互換ではないがアセンブリ言語レベルで8008と互換性があり、内部設計も基本的に似ている。設計に若干似ているともいえる。8008の各命令と対応する命令が8080(および8085、Z80など)の命令セットに存在するだけでなく、32ビット化されたx86の命令セットにも対応する命令が存在する(ただし、機械語のビット列はそれぞれ異なる)。チップは、(18ピンのDIPパッケージであるためにピン数が制限されていたので)ひとつの8ビットバスしか持たず、それをサポートするために大規模な外付け回路が必要とされた。設けてアドレス出力をラッチする必要があった(アドレス出力が1サイクルでは完了しないため)。8008は、8本の入力ポートと24本の出力ポートにアクセスできる。端末制御用に作られたものとしては納得できる設計だったが、他の用途に使うには困難がありすぎた。初期のごく少数のコンピュータ(最初に採用した会社はリコーといわれる)がこのマイクロプロセッサを使って設計されたが、一般に使われるようになったと言えるのは次の大幅に改良を加えられた8080である。アーキテクチャ[編集]メモリ空間は14ビット(16KB)。I/Oは入力ポートが8個、出力ポートが24個。A,B,C,D,E,H,Lの8ビットレジスタと、8レベルのハードウェアスタック(うち1つはプログラムカウンタ)、S,Z,P,Cのフラグをもつ。メモリへのアクセスはMレジスタ(HLレジスタペアによる間接指定)でしか行えない。それ以外のレジスタによる間接指定や、アドレス直接指定によるアクセスはできない。16ビットレジスタという概念は存在しない。B,C,D,Eレジスタは単なる8ビットレジスタである。スタックポインタはレジスタとしては存在しない。コール・リターン以外にスタックを操作する命令も存在しない。命令セット[編集]命令長は1〜3バイト。オペコードはすべて1バイト。2バイト命令は1バイトの即値、3バイト命令(ジャンプ・コール)は2バイトのアドレスをもつ。ニーモニックのオペコードはすべて3文字。RST/INP/OUT命令を除き、機械語でオペランドを持たない命令(1バイト命令)はニーモニックでもオペランドを持たない。機械語のオペコードにエンコードされているレジスタ指定はニーモニックでもオペコードに含まれる。その結果、「LCD」「LED」「ACE」「SUM」などといった特徴あるニーモニックが存在する。以下に命令一覧を示す。rはレジスタA,B,C,D,E,H,L,Mを表す。nは8ビット即値を表す。nnは16(14)ビットアドレスを表す。転送命令[編集]Lrr8ビットレジスタ間の転送。LrI8ビットレジスタに即値をロードする。算術演算命令[編集]ADr8ビットレジスタの内容をAレジスタに加算する。n即値をAレジスタに加算する。ACr8ビットレジスタの内容とCフラグをAレジスタに加算する。n即値とCフラグをAレジスタに加算する。SUr8ビットレジスタの内容をAレジスタから減算する。n即値をAレジスタから減算する。SBr8ビットレジスタの内容とCフラグ(ボロー)をAレジスタから減算する。n即値とCフラグ(ボロー)をAレジスタから減算する。CPr8ビットレジスタの内容をAレジスタから減算するが、結果は格納しない。n即値をAレジスタから減算するが、結果は格納しない。INr8ビットレジスタの内容をインクリメントする。DCr8ビットレジスタの内容をデクリメントする。論理演算命令[編集]NDr8ビットレジスタの内容とAレジスタの論理積をとる。n即値とAレジスタの論理積をとる。ORr8ビットレジスタの内容とAレジスタの論理和をとる。n即値とAレジスタの論理和をとる。XRr8ビットレジスタの内容とAレジスタの排他的論理和をとる。n即値とAレジスタの排他的論理和をとる。ローテート命令[編集]RLCAレジスタの内容とCフラグを連結して左ローテートする。RRCAレジスタの内容とCフラグを連結して右ローテートする。RALAレジスタの内容を左ローテートする。RARAレジスタの内容を右ローテートする。nn指定の番地にジャンプする。nnZフラグが0のとき指定の番地にジャンプする。nnZフラグが1のとき指定の番地にジャンプする。nnCフラグが0のとき指定の番地にジャンプする。nnCフラグが1のとき指定の番地にジャンプする。nnPフラグが0のとき指定の番地にジャンプする。nnPフラグが1のとき指定の番地にジャンプする。nnSフラグが0のとき指定の番地にジャンプする。nnSフラグが1のとき指定の番地にジャンプする。nn指定の番地をコールする。nnZフラグが0のとき指定の番地をコールする。nnZフラグが1のとき指定の番地をコールする。nnCフラグが0のとき指定の番地をコールする。nnCフラグが1のとき指定の番地をコールする。nnPフラグが0のとき指定の番地をコールする。nnPフラグが1のとき指定の番地をコールする。nnSフラグが0のとき指定の番地をコールする。nnSフラグが1のとき指定の番地をコールする。p*8番地をコールする。