第二次改善策として、低性能プロセッサと小容量ROMメモリーを使い、高いコストパフォ-マンスの達成を目的として、ホフとメイザーと交渉した。システムとしての性能向上、プログラム・ステップ数の減少、プログラムを使った入出力機器のリアルタイム制御などを達成するために、命令セットと機能の変更と追加と応用への最適化などを議論した。

 さんざん議論をして納得したと思われたが、命令の定義の違いが判明し、ROM容量を削減する命令セットや外部メモリー容量の拡張案がなかなか理解されなかった。議論の結果をメモに走り書きしただけだったのが原因だった。また、具体的な設計を担当するインテル側が書類化するものだと勝手に解釈した。第二次改善策からの具体的な作業と書類化はすべてビジコン側が行った。

 4004の命令セットの進化を見ると、アイデアの創出後、紆余曲折を経て最終製品案が決定したことがわかる。アイデアをアイデアのまま採用すると失敗する可能性があることの具体的な例である。

 命令セットを決めるにあたっては、例えば、条件分岐命令の条件、シフト命令またはローテート命令のどちらか一つの選択、データ転送命令の種類、サブルーチンからの分岐時の戻り値、応用に特化した命令の種類などなどがある。したがって、応用技術者が命令セットの最適化に関する指導権を握ることになる。応用を広く深く知れば知るほど開発における成功の度合いが高くなる。役に立つかどうかわからないような技術と経験の蓄積が、後になって、役に立つことが多い。

 ホフが提案した基本命令は、コンピュータの基本命令に、電卓向け命令をほんの少し追加した命令セットだった。電卓向け命令として、加算後の10進補正(DAA: Decimal Adjust Accumulator)、キーボード入力読み込み(RDKB)、データ用レジスタの符号の読み書き(RDSGN、WRSGN)と小数点情報の読み書き(RDDP、WRDP)、プロセッサを一時停止させタイミング回路との同期(HALT)、表示出力のイネーブルとディスエイブル(DSPON、DSPOFF)などの命令があった。最終的に採用されたのは加算後の10進補正命令だけだった(表1)。

表1 4004命令セットの進化
表1 4004命令セットの進化
[画像のクリックで拡大表示]