標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第75回]
●2回目のMVI命令の動作の写真(前回の続き)です
今回は前回の続きです。
前回はSTA命令が終わったところまで説明をしました。
このあと、STA命令でAレジスタの値を書き込んだ、同じメモリアドレスをLDA命令で指定して、データを読み出して、再びAレジスタに書き込みます。
Aレジスタに同じ値を書き込んでも、なにをやっているのか見ただけではしっかり確認できないことになりますから、その前にAレジスタを別の値で書き換えておきます。
STA命令でメモリに書き込んだときのAレジスタの値は”55”でした。
Aレジスタにふただび”55”を書き込んだことがわかるように、一旦Aレジスタに”55”以外の値を書き込んでおきます。
”55”以外ならどんな値でもよいのですが、ここでは”F0”を書いておくことにしました。
MVI命令は今回のプログラムの最初にも実行しています。その様子は前回に写真でお見せしました。
今回のMVI命令も、書き込む値が異なっているだけで、前回説明したMVI命令と同じ動作ですから、途中の写真は省略して、Aレジスタに値がラッチされた、最後のマシンクロック(T5)の写真だけをお見せします。
MVI A,F0のT5の写真です。
Aレジスタに”F0”がラッチされています。
PCclkが点灯しています。
●LDA命令のクロック毎の動作の写真です
LDA命令のタイミングチャート([第64回])を参照しながら、写真を見ていくと、より理解しやすいと思います。
例外を除いては、T0〜T3のOPコードフェッチサイクルは、どの命令もみな同じ動作です。
ですからタイミングチャートもT0〜T3は省略しています。
クロックごとの動作の写真も、これからは、T0〜T3は省略して、T4からお見せすることにします。
T4の写真です。
PC(プログラムカウンタ)は”0008”になっています。
OPコードレジスタには、LDA命令のOPコード、”3A”がラッチされています。
PCの値が外部アドレスバスに出力され、外部アドレスバスも”0008”になっています。
データバスにはメモリアドレス”0008”番地の値、”34”が出力されていて、WKLレジスタに読み込まれています。
LDA命令で指定するメモリアドレスの下位8ビットです。
WKレジスタはさきに実行したSTA命令でも使われました。
そのときのメモリアドレス”1234”がすでに入っていますので、WKLレジスタに”34”が書き込まれているのかどうかは、ちょっと見ただけではわかりません。
しかし、内部データバスも”34”になっていて、さらに、regWRが点灯し、d3〜d0が”0111”なので、WKLレジスタが選択され、WKLregWRが点灯しているので、WKLレジスタに内部データバスb0−b7の値”34”が書き込まれていることがわかります。
T5の写真です。
PCclkが点灯しました。
regWR、WKLregWRは消灯しました。
T6の写真です。
PCclkが消灯し、PC(プログラムカウンタ)が+1されて”0009”になりました。
PCADoutが点灯していて、外部アドレスバスA15−A8、A7−A0にPCの値がそのまま出力されています。
外部データバスD7−D0にはメモリアドレス”0009”番地の値、”12”が出力されていて、WKHレジスタに読み込まれています。
LDA命令で指定するメモリアドレスの上位8ビットです。
T4のところでも説明しましたが、WKレジスタはさきに実行したSTA命令でも使われました。
そのときのメモリアドレス”1234”がすでに入っていますので、WKHレジスタに”12”が書き込まれているのかどうかは、ちょっと見ただけではわかりません。
しかし、内部データバスも”12”になっていて、さらに、regWRが点灯し、d3〜d0が”0110”なので、WKHレジスタが選択され、WKHregWRが点灯しているので、WKHレジスタに内部データバスb0−b7の値”12”が書き込まれていることがわかります。
T7の写真です。
regWR、WKHregWRは消灯しました。
PCclkが点灯しています。
T8の写真です。
PCclkが消灯し、PC(プログラムカウンタ)が+1されて”000A”になりました。
しかしPCADoutは消灯しています。PC(プログラムカウンタ)の値は外部アドレスバスには出力されていません。
代わりにWKselが点灯していて、WKH、WKLレジスタの値”1234”が外部アドレスバスA15−A8、A7−A0に出力されています。
MEMRDが点灯していて、外部データバスD0−D7にはメモリアドレス”1234”の値”55”が出力されています。
DataDIRとDataEnableが点灯していて、内部データバスb0−b7も”55”になっています。
regWRとAregWRが点灯しています。
regWRがアクティブでd3−d0が”1111”なのでAレジスタ(regA)が選択され、内部データバスの値、”55”がAレジスタにも入力されています。
T9の写真です。
regWR、AregWRが消灯しました。
Aレジスタには”55”がラッチされました。
T9でLDA命令の動作は終了です。
T10は一瞬で終わり、次の命令のT0になります。
T10(次の命令のT0)の写真です。
PCADoutが点灯し、PC(プログラムカウンタ)の値”000A”が外部アドレスバスA15−A8、A7−A0に出力されています。
データバスD7−D0には、メモリアドレス”000A”の値、”C3”が出力されています。
”C3”はJMP命令のOPコードです。
2008.9.22upload
前へ
次へ
ホームページトップへ戻る