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

●INR L命令のクロック毎の動作の写真です

今回は前回、前々回の続きです。
前回はMOV A,M命令が終わったところまで説明をしました。

今回は、前回確認できなかったS(サイン)フラグとZ(ゼロ)フラグの変化を確認するために、INR L命令とDCR H命令を見ていくことにします。 

例外を除いては、T0〜T3のOPコードフェッチサイクルは、どの命令もみな同じ動作なので、クロックごとの動作の写真も、T0〜T3は省略して、T4からお見せします。

基板が2枚になったので、写真が横に長くなってしまいました。
フラグの変化を見ようとすると、そのたびに画面を横にスクロールさせなければいけません。
LEDの点灯している様子を見たいだけで、毎回同じ基板の表面を見てもしょうがないので、INRレジスタとフラグレジスタの部分の写真を切り取って、1枚目の基板の、LEDが無い部分に貼り付けました。
2枚目の基板は、LEDの無い、写真の右側部分をカットしました。

T4の写真です。


PC(プログラムカウンタ)は”0007”になっています。
OPコードレジスタには、INR L命令のOPコード、”2C”がラッチされています。

INR L命令は、T4からはCPU内部の処理だけで、外部バスは関係がありません。
PCADoutもHLselも消灯していて、外部アドレスバスA15−A0、外部データバスD7−D0には、なにも出力されないのでハイインピーダンスになります。
外部アドレスバスと外部データバスは抵抗でプルアップしているので、ハイインピーダンスのときは全ビットが1になります。

regRDが点灯し、s3−s0が”1101”なので、Lレジスタが選択されます。
LregRDが点灯し、内部データバス(innerBUS)には、Lレジスタの値”7F”が出力されています。
少し暗いですが、INRregWRが点灯し、INRレジスタが筒抜けになって、内部データバスの値”7F”が入っています。
”INR”なのでINRregUPが点灯しています。

T5の写真です。


INRregWRは消灯しました。データ”7F”がINRレジスタにラッチされました。
INRregCLKが点灯しました。

T6の写真です。


INRregCLKが消灯して、INRレジスタの値が+1されて、”80”になりました。
”80”は負の数(−128)なのでS(サイン)フラグがセットされました。
”7F”から”80”になるときに、ビット3からキャリーが出るのでH(ハーフキャリー)フラグもセットされました。
結果はゼロではありませんから、Z(ゼロ)フラグはセットされません。

8080のP(パリティ)フラグは、本当はINR、DCR命令でも変化することがわかりましたが、ここでは「影響しない」ことにしてしまいましたので、点灯したままになっています。
C(キャリー)フラグは変化しないので、点灯したままになっています。

INRregRDが点灯し、INRレジスタの値”80”が内部データバスに出力されています。
regWRが点灯し、d3−d0が”1101”なので、Lレジスタが選択されます。
LregWRが点灯しているので、Lレジスタに内部データバス(innerBUS)に出力されている”80”が書き込まれます。

T7の写真です。


regWR、LregWRは消灯しました。

T8(次の命令のT0)の写真です。


T8は一瞬で終わってしまい、次の命令のT0になります。
外部アドレスバスA15−A0にはPC(プログラムカウンタ)の値”0007”が出力され、データバスD7−D0には、そのメモリアドレスのデータ”25”(DCR H命令のOPコード)が出力されています。

●DCR H命令のクロック毎の動作の写真です

今度はDCR命令です。
Hレジスタの値は”01”です。DCR命令を実行すると、値は”00”になります。
Z(ゼロ)フラグがセットされることを確認します。

T4の写真です。


PC(プログラムカウンタ)は”0008”になっています。
OPコードレジスタには、DCR H命令のOPコード、”25”がラッチされています。

regRDが点灯し、s3−s0が”1100”なので、Hレジスタが選択されます。
HregRDが点灯し、内部データバス(innerBUS)には、Hレジスタの値”01”が出力されています。
少し暗いですが、INRregWRが点灯し、INRレジスタが筒抜けになって、内部データバスの値”01”が入っています。
”DCR”なのでINRregUPは消灯しています。

T5の写真です。


INRregWRは消灯しました。データ”01”がINRレジスタにラッチされました。
INRregCLKが点灯しました。

T6の写真です。


INRregCLKが消灯して、INRレジスタの値が−1されて、”00”になりました。
結果が0なのでZ(ゼロ)フラグが点灯しました。
結果はマイナスではありませんから、S(サイン)フラグは消灯しました。
”01”から”00”になるときには、ビット4からビット3へボローは出ませんのでH(ハーフキャリー)フラグは消灯しました。

8080のP(パリティ)フラグは、本当はINR、DCR命令でも変化することがわかりましたが、ここでは「影響しない」ことにしてしまいましたので、点灯したままになっています。
C(キャリー)フラグは変化しないので、点灯したままになっています。

INRregRDが点灯し、INRレジスタの値”00”が内部データバスに出力されています。
regWRが点灯し、d3−d0が”1100”なので、Hレジスタが選択されます。
HregWRが点灯しているので、Hレジスタに内部データバス(innerBUS)に出力されている”00”が書き込まれます。

T7の写真です。


regWR、LregWRは消灯しました。
DCR H命令はT7で終わりです。
次のT8は一瞬で終了して、次の命令のT0になります。
次の命令のT0は今回は関係ありませんから、ここまでで今回の説明は終わりです。
2008.9.28upload

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