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

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

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

今回は、STA命令でデータ”55”を書き込んだメモリアドレス、”1234”にJMP命令でジャンプします。
JMP命令のタイミングチャート([第61回])を参照しながら、写真を見ていくと、より理解しやすいと思います。

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

T4の写真です。


PC(プログラムカウンタ)は”000B”になっています。
OPコードレジスタには、JMP命令のOPコード、”C3”がラッチされています。
PCの値が外部アドレスバスに出力され、外部アドレスバスも”000B”になっています。
データバスにはメモリアドレス”000B”番地の値、”34”が出力されていて、WKLレジスタに読み込まれています。
JMP命令で指定するメモリアドレスの下位8ビットです。

WKレジスタはさきに実行したSTA命令、LDA命令でも使われました。
そのときのメモリアドレス”1234”がすでに入っていますので、WKLレジスタに”34”が書き込まれているのかどうかは、ちょっと見ただけではわかりません。
しかし、内部データバスも”34”になっていて、さらに、regWRが点灯し、d3〜d0が”0111”なので、WKLレジスタが選択され、WKLregWRが点灯しているので、WKLレジスタに内部データバスの値”34”が書き込まれていることがわかります。

T5の写真です。


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

T6の写真です。


PCclkが消灯し、PC(プログラムカウンタ)が+1されて”000C”になりました。
PCADoutが点灯していて、外部アドレスバスA15−A8、A7−A0にPCの値がそのまま出力されています。
外部データバスD7−D0にはメモリアドレス”000C”番地の値、”12”が出力されていて、WKHレジスタに読み込まれています。
JMP命令で指定するメモリアドレスの上位8ビットです。

内部データバスも”12”になっていて、さらに、regWRが点灯し、d3〜d0が”0110”なので、WKHレジスタが選択され、WKHregWRが点灯しているので、WKHレジスタに内部データバスの値”12”が書き込まれていることがわかります。

T7の写真です。


regWR、WKHregWRは消灯しました。
PCclkが点灯しています。

JMP命令のT4〜T7は、STA命令、LDA命令のT4〜T7と同じ動作です。
でも、次のT8からは違ってきます。

T8の写真です。


PCADoutもWKselも消灯しています。MEMRDもMEMWRもDataEnableも消灯しています。
外部アドレスバスA15−A8、A7−A0、外部データバスD7−D0は全点灯していますが、これはオール1が出力されているのではなくて、データが出力されていない状態(ハイインピーダンス)なのですが、抵抗でプルアップされているため全点灯しているのです。

JMP命令の、この期間は外部とは切り離されて、内部での処理だけをしています。
regRDとregWRが両方とも点灯しています。
s3−s0は”0111”で、データの送り元としてWKLレジスタが選択されています。
d3−d0は”0011”で、データの受け手としてPCL(プログラムカウンタの下位8ビット)が選択されています。
s3−s0、d3−d0とレジスタの関係については、「レジスタコード表」([第27回])を参照してください。

WKLregRDが点灯していて、JMP命令の下位8ビットを格納している、WKLレジスタから”34”が読み出されて、内部データバス(innerBUS)に出力されています。
PCLwrが点灯していて、PCLレジスタに”34”が読み込まれていることがわかります。
プログラムカウンタを書き換えているのです。

T9の写真です。


regWR、PCLwrが消灯しました。
PCLレジスタ(プログラムカウンタの下位8ビット)には”34”がラッチされました。

T10の写真です。


T8と同じように、regRDとregWRが両方とも点灯しています。
s3−s0は”0110”で、データの送り元としてWKHレジスタが選択されています。
d3−d0は”0010”で、データの受け手としてPCH(プログラムカウンタの下位8ビット)が選択されています。
s3−s0、d3−d0とレジスタの関係については、「レジスタコード表」([第27回])を参照してください。

WKHregRDが点灯していて、JMP命令の上位8ビットを格納している、WKHレジスタから”12”が読み出されて、内部データバス(innerBUS)に出力されています。
PCHwrが点灯していて、PCHレジスタに”12”が読み込まれていることがわかります。

T11の写真です。


regWRとPCHwrが消灯しました。
PCHレジスタ(プログラムカウンタの上位8ビット)に”12”がラッチされました。

JMP命令のジャンプ先メモリアドレス”1234”がPC(プログラムカウンタ)に書き込まれました。
JMP命令の動作はT11で終了です。
最後のT12は一瞬で終了し、次の命令のT0になります。

T12(次の命令のT0)です。


PCADoutが点灯し、PC(プログラムカウンタ)の値”1234”が外部データバスA15−A8、A7−A0に出力されています。
データバスD7−D0には、メモリアドレス”1234”の値”55”が出力されています。
JMP命令が実行された結果、”1234”番地にジャンプしたことがわかります。
2008.9.23upload

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