標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第214回]

●DAD命令の回路図です

前回はDAD命令の動作を、タイミングチャートを使って説明しました。
今回はDAD命令の回路図の説明です。
回路図の説明といっても、前回のタイミングチャートの説明と変わるところはありません。
でも、なかにはタイミングチャートでは見えないところもありますから、そのあたりのところを簡単に説明することにいたします。

M2でADDFFclrをアクティブにしています。
DAD命令は、下位8ビットの加算では、キャリーの加算を行わない(つまりADCではなくて、ADDの計算をする)ので、74HC283の加算回路へのキャリーをここでクリアしています。

M2は、下位8ビットの加算で、Lレジスタの値を内部データバスに読み出します。M5は上位8ビットの加算で、Hレジスタの値を内部データバスに読み出します。
そのため、s1=0にして、regRDをアクティブにします。
M5はHレジスタをセレクトするために、さらにs0も0にします。

内部データバスに読み出された、L、Hレジスタの値は、ALUのレジスタ”A”に入れられます。
そのため、T4とT10でreg”A”WRをアクティブにします。

次のM3では、HLレジスタに加算されるレジスタの下位レジスタの値が、内部データバスに読み出され、M6では、上位レジスタの値が読み出されます。
OP5とOP4がともに1のときは、スタックポインタが選択されますから、s3=0、s1=0にします。
そのほかのときは、s2=OP5、s1=OP4にします。
M6はHレジスタをセレクトするために、さらにs0も0にします。

内部データバスに読み出された、レジスタの値は、ALUのレジスタ”B”に入れられます。
そのため、T6とT12でreg”B”WRをアクティブにします。

M4とM7では、加算の結果を内部データバスに読み出すため、AddRDをアクティブにします。
M4では、内部データバスに読み出された、下位8ビットの加算の結果をLレジスタに入れます。
M7では、上位8ビットの加算の結果をHレジスタに入れます。
H、Lレジスタを選択するために、d1=0にします。
M7ではHレジスタをセレクトするために、さらにd0も0にします。

H、Lレジスタに値を書き込むために、T8、T14で、regWRをアクティブにします。
同時に、計算結果によって、C(キャリー)フラグをセット、リセットするために、ADDFenblをアクティブにします。

じつは、ここまで書いてきて、気がついたことがあります。
DAD命令は、C(キャリー)フラグだけをセット、リセットします。
しかし、ADDFenblをアクティブにすると、C(キャリー)フラグだけではなくて、H(ハーフキャリー)フラグもセット、リセットされてしまいます。
うーん。これをいまから直すというのは、ちょっと…。

H(ハーフキャリー)フラグはそれほど重要なフラグではありませんから、まあ、このくらいの差異はあってもよいことにしておきましょう。
2009.4.26upload

前へ
次へ
ホームページトップへ戻る