本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。
ここでは代表として二つの命令だけを取り上げたが、設計に当たっては、このような各サイクルの動作の規定を全ての命令について行う。これを行ったものを次の表に示す。
このように動作を整理すると、赤印をつけた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になっている場合は、内部バスのデータを受け取って外部バスをドライブする。