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

●HLT命令の動作をクロックごとに実行させてみました

[第52回]でMVI M,I8命令をクロックごとに実行させたときに使ったプログラムと同じものを使いました。

0000 2600     MVI H,00
0002 2E06     MVI L,06
0004 3676     MVI M,76
0006 AA       ”AA”

0004のMVI M,76命令の実行の結果、メモリアドレス”0006”に、データ”76”が書き込まれました。
プログラムカウンタは、0006になるので、MVI M,76命令の実行によって、0006番地に書き込まれたコード”76”(HLT命令)が、次に実行されます。
今回は、その様子を見ていきます。

●クロック毎の動作の様子です

最初の写真は、MVI M,76の実行が完了して、次のHLT命令の最初のステップに移ったところです(MVI M,76命令のときの最後の写真と同じです)。
OPコードフェッチサイクルのT0です。


プログラムカウンタ下位8ビットPC(L)の値は00000110です。
アドレスバス下位8ビット(A0−A7)にも00000110が表示されています。
PCADoutが点灯しているので、プログラムカウンタの値が外部アドレスバス(A0〜A15)に出力されていることがわかります。

MEMRDがアクティブなので、メモリから0006番地の値”76”(01110110)が外部データバスD0−D7に出力されています。
DataEnableもDataDIRも点灯していて、innerBUS(内部データバス)に、外部データバスから01110110が入っていることがわかります。
OPreg(OPコードレジスタ)には、まだひとつ前の命令(”36”)がラッチされたままです。

写真中央右上寄りにあるA〜Dは、T、M、Wパルスの元になる74HC161からの出力信号Qa〜Qdです。今はT0ですから全部消灯しています(Qa〜Qd=0)。

T1の写真です。


Aのみ点灯して、T1サイクルであることを示しています。

T1になって、OPコードレジスタに命令コード01110110(”76”)が表示されました。
ラッチパルスが入力されていることを示す、OPcodeFetchが点灯しています。
このタイミングでは命令コードは「筒抜け」になっているだけで、まだラッチはされていません。
OPcadeFetchの点灯→消灯のタイミングで、命令コードがOPコードレジスタにラッチされます。

d2〜d0はOP5〜OP3がそのまま出力されるので、”110”が表示されています。
s2〜s0もOP2〜OP0と同じ”110”が表示されています。

T2の写真です。


ステップが進み、Bのみ点灯して、T2であることを示しています。
右下に9個並んでいる黄色LEDの一番右端がHLTAです。
HALTAは、T2のタイミングで点灯しました。

T3の写真です。


A、Bが点灯して、T3サイクルであることを示しています。
今までのMOV、MVI命令では、T3のときにPCincが点灯しました。
しかしHLTAが点灯している状態のときには、PCincは出力されません。
PCincは消灯したままです。

T4の写真です。


T4サイクルは一瞬で完了し、またT0サイクルに戻るため、A〜Dは全部消灯しています。
PCincが出力されなかったので、プログラムカウンタの値は変わりません。
PCADoutが点灯していて、プログラムカウンタの値が外部アドレスバスA0〜A15に出力されていることがわかりますが、さきほどと同じ0006のままなので、また同じHLT命令をくりかえし実行することになります。
HLT命令はすでに一回実行されているので、HLTAは点灯しています。
2008.9.2upload

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