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

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

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

今回は、MOV M,H命令でデータ”01”を書き込んだメモリアドレス、”017F”に対してINR命令を実行します。
メモリに対してはデータのREAD、WRITEしかできません。
そのメモリのデータをincrement(インクリメント、+1)したりdecrement(デクリメント、−1)するにはどうするかというと、まず対象になるメモリアドレスからデータをINRレジスタに読み込んで、つぎにINRレジスタを+1(または−1)してから、もとのメモリアドレスにその結果を書き込むようにします。
INR M命令のタイミングチャート([第59回])を参照しながら、写真を見ていくと、より理解しやすいと思います。

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

T4の写真です。


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

PCADoutが消灯していてるので、PCの値は外部アドレスバスには出力されません。
代わりにHLselが点灯していて、HLレジスタの値が、外部アドレスバスA15−A0に出力されています。

MEMRDがアクティブになっているので、外部データバスD7−D0にはメモリアドレス”017F”番地の値、”01”が出力されています。
DataEnableとdataDIRが点灯しているので、内部データバス(innerBUS)も外部データバスと同じ”01”になっています。

ちょっと暗いのですがINRregWRが点灯していて、INRレジスタが筒抜けになっているので、INRレジスタに内部データバスの値”01”が入っています。
”INR”なのでINRregUPが点灯しています。
INRregUPはINRレジスタ74HC191のD/U選択端子pin5の入力信号を表示しています。
点灯がUP(INR)で消灯がDOWN(DCR)です。

INRレジスタの右にフラグレジスタがあります。
フラグの状態を示すLEDは、左からS(サイン)フラグ、Z(ゼロ)フラグ、H(ハーフキャリー)フラグ、P(パリティ)フラグ、C(キャリー)フラグです。フラグがセットされているとき点灯し、リセットされると消灯します。

T5の写真です。


MEMRDはまだ点灯していますが、INRregWRは消灯しました。INRレジスタに”01”がラッチされました。
INRregCLKが点灯しました。
INRregCLKが点灯→消灯のタイミングでINRレジスタの値が+1(または−1)されます。

T6の写真です。


INRregCLKが消灯して、INRレジスタの値が+1されて、”02”になりました。
”02”は正の数なのでS(サイン)フラグもZ(ゼロ)フラグもセットされません。ビット3からのキャリーもないのでH(ハーフキャリー)フラグもセットされません。

Sフラグは点灯→消灯したので、正しく機能したことが確認できます。
しかしZフラグとHフラグはもとから消灯していたので、正しく機能したのかどうか確認できません。この2つのフラグについては、このあとで実行する別のINR命令、DCR命令で動作の確認をします。
8080のP(パリティ)フラグは、本当はINR、DCR命令でも変化することがわかりましたが、ここでは「影響しない」ことにしてしまいましたので、点灯したままになっています。
C(キャリー)フラグは変化しないので、点灯したままになっています。

INRregRDが点灯し、INRレジスタの値”02”が内部データバスに出力されています。
DataEnableは点灯していますが、dataDIRは消灯しているので、データバスゲート74HC245の向きが、内部データバス→外部データバスになって、外部データバスD7−D0も”02”になっています。

MEMWRが点灯しているので、メモリアドレス”017F”に”02”が書き込まれます。

T7の写真です。


MEMWRが消灯しました。
これでメモリアドレス”017F”に”02”が書き込まれたはずですが、念のため、次のMOV A,M命令で確認してみます。

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


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

●MOV A,M命令のクロック毎の動作の写真です

MOV A,M命令は、上で実行したINR M命令が正しく実行されたかどうかを確認するためのものです。

T4の写真です。


PCADoutは消灯していて、代わりにHLselが点灯しています。
外部アドレスバスA15−A0にはHLレジスタの値”017F”が出力され、MEMRDが点灯しているので、外部データバスD7−D0には、メモリアドレス”017F”の値”02”が出力されています。

もうこれだけで、INR M命令によって、メモリアドレス”017F”のデータが”01”から+1されて”02”になったことが確認されました。
でもせっかくですから、MOV A,M命令の動作の最後まで見ていきます。

regWR、AregWRが点灯していて、Aレジスタにも”02”が入りました。

T5の写真です。


AregWRが消灯しました。

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


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

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