本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。

ここでは代表として二つの命令だけを取り上げたが、設計に当たっては、このような各サイクルの動作の規定を全ての命令について行う。これを行ったものを次の表に示す。

  • 4004の各命令の動作を整理した表

    4004の各命令の動作を整理した表

このように動作を整理すると、赤印をつけたFIN命令を唯一の例外として、全ての命令でA1~3、M1、M2サイクルの動作は同じであり、4ビット内部データバスを使うデータ転送は、次のようになる。

  • A1サイクル:送り出し元(SRCと略)はPClow、送り先(DSTと略)はデータバスバッファ
  • A2サイクル:SRCはPCmid、DSTはデータバスバッファ
  • A3サイクル:SRCはPChigh、DSTはデータバスバッファ
  • M1サイクル:SRCはデータバスバッファ、DSTはOPR
  • M2サイクル:SRCはデータバスバッファ、DSTはOPA

X1サイクルは命令をデコードして内部の制御レジスタに格納し、各種コントロール信号の生成の準備を行うサイクルであるが、データシートによると、使用していない機能であるがOPAの内容が外部バスに出力されるとあるので、

  • X1サイクル:SRCはOPA、DSTはデータバスバッファ

となる。これに続くX2、X3サイクルは実際に命令を実行する部分であり、ここは命令ごとにSRCとDSTが異なる。前に挙げたLD命令の場合は、

  • X2サイクル:SRCはRSで指されるインデックスレジスタ(R[RS])、DSTはTemp
  • X3サイクル:SRCはALU、DSTはアキュムレータ(ACC)

であり、JCN命令の場合は、命令の前半では、

  • X2サイクル:SRCはOPA、DSTはTemp
  • X3サイクル:バス動作なし

となる。

命令の後半も、

  • A1サイクル:送り出し元(SRCと略)はPClow、送り先(DSTと略)はデータバスバッファ
  • A2サイクル:SRCはPCmid、DSTはデータバスバッファ
  • A3サイクル:SRCはPChigh、DSTはデータバスバッファ
  • M1サイクル:SRCはデータバスバッファ、DSTはOPR
  • M2サイクル:SRCはデータバスバッファ、DSTはOPA
  • X1サイクル:動作なし
  • X2サイクル:SRCはOPA、DSTはPClow。但し、条件不成立の場合は、DSTに書き込みを行わない。
  • X3サイクル:SRCはOPR、DSTはPClmid。但し、条件不成立の場合は、DSTに書き込みを行わない。

という処理となる。唯一の例外はFIN命令の後半の8サイクルで、レジスタペア0と1の内容をアドレスとしてROMに送る必要があり、

  • A1サイクル:SRCはR[0]、DSTはデータバスバッファ
  • A2サイクル:SRCはR[1]、DSTはデータバスバッファ

となる。

これらの内部バス経由のデータ転送のSRCとDSTを纏めたものが、次の表である。

  • 内部バス制御表

    内部バス制御表

この表では、命令の最初の8ビットの処理は1stByteと書き、後半の8ビットの処理は2ndByteと書いている。そして、"-"が記されている欄は動作が不要なことを示し、SRC欄に"-"が記されている場合はDon't Careであり、何を4bit内部バスに載せても良い。一方、DST欄に"-"が記されている場合は、どのレジスタにも書き込んではならない。ALU操作の欄に"-"が記されている場合はDon't Careであり、ALUの動作は何でも良い。

この表でBUSと表記したのは4ビットの外部バスと内部バスを繋ぐデータバスバッファで、BUSがSRCになっている場合は、外部データバスのデータを受け取って内部バスに流し、DSTになっている場合は、内部バスのデータを受け取って外部バスをドライブする。