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

●INR、DCR命令のクロック毎の動作確認の準備です

前回は設定が悪くてS(サイン)フラグの確認ができませんでした。
またH(ハーフキャリー)フラグの回路にミスがあって、Hフラグがセットできませんでした。
メモリ(M)に対するINR、DCR命令の回路もHLsel信号とdataOUT信号の出力を追加しました。
今回はそれらの確認ができるように、テストプログラムを作りました。

0000 217F01   LXI H,017F
0003 74       MOV M,H
0004 34       INR M
0005 7E       MOV A,M
0006 2C       INR L
0007 25       DCR H

このプログラムをクロック毎に動作させて、写真に撮りました。

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

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

LXI命令のクロック毎の動作は、[第71回]で説明済みですから、説明は簡単に済ませます。

T4の写真です。


PC(プログラムカウンタ)は”0001”になっています。
OPコードレジスタには、LXI H命令のOPコード、”21”がラッチされています。
PCの値が外部アドレスバスに出力され、外部アドレスバスも”0001”になっています。
データバスにはメモリアドレス”0001”番地の値、”7F”が出力されていて、Lレジスタに読み込まれています。

regWRが点灯し、d3〜d0が”1101”なので、Lレジスタが選択され、LregWRが点灯しています。

T5の写真です。


PCclkが点灯しました。
regWR、LregWRは消灯しました。

T6の写真です。


PCclkが消灯し、PC(プログラムカウンタ)が+1されて”0002”になりました。
PCADoutが点灯していて、外部アドレスバスA15−A8、A7−A0にPCの値がそのまま出力されています。
外部データバスD7−D0にはメモリアドレス”0002”番地の値、”01”が出力されていて、Hレジスタに読み込まれています。

内部データバスも”01”になっていて、さらに、regWRが点灯し、d3〜d0が”1100”なので、Hレジスタが選択され、HregWRが点灯しています。

T7の写真です。


regWR、HregWRは消灯しました。
これでHLレジスタに”017F”が書き込まれました。

PCclkが点灯しています。

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


T8は一瞬で終了し、次の命令のT0になります。

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

MOV命令のクロック毎の動作は、[第46回]で説明済みですから、簡単な説明だけで済ませます。

T4の写真です。


PC(プログラムカウンタ)は”0004”になっていますが、PCADoutが消灯しているので、外部アドレスバスA15−A0には出力されません。
代わりにHLselが点灯していて、HLレジスタの値”017F”が外部アドレスバスA15−A0に出力されています。

OPコードレジスタには、MOV M,H命令の命令コード、”74”がラッチされています。

regRDとregWRが点灯しています。
s3−s0は”1100”なので、Hレジスタが選択され、HregRDがアクティブになっています。
内部データバスにはHレジスタの値”01”が出力されています。
DataEnableが点灯、dataDIRが消灯しているので、内部データバスから外部データバスにデータが出力され、外部データバスの値も”01”になっています。

MEMWRが点灯していて、メモリアドレス”017F”にデータ”01”が書き込まれていることがわかります。

T5の写真です。


regWR、MEMWRが消灯しました。

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


T6は一瞬で終了し、次の命令のT0になります。
PC(プログラムカウンタ)も外部アドレスバスA15−A0も”0004”になっています。
メモリの0004番地にある、INR Mの命令コード”34”がデータバスに出力されています。

やっとここまできて、いよいよINR命令の動作なのですが、時間がなくなってしまいました。
INR命令のクロック毎の動作については、また次回に説明することにいたします。
2008.9.26upload

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