標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第50回]
●MVI r,I8の動作をクロックごとに実行させてみました
MVI r,I8命令とMVI M,I8命令を、クロック毎にステップ動作をさせて確認するために、次のプログラムを使いました。
0000 2600 MVI H,00
0002 2E06 MVI L,06
0004 3676 MVI M,76
0006 AA ”AA”
このプログラムを実行すると、まず0000〜0003のHレジスタとLレジスタに対するMVI命令によって、HLレジスタに”0006”が入れられます。
次の0004番地のMVI命令のMのアドレスは、HLレジスタで示される0006番地になりますから、0006番地に76が書き込まれることになります。
0006番地には初期値として適当なデータ(”AA”)を入れておきます。
このプログラムは全部MVI命令ですが、今回のMVI r,I8のステップ動作の観察としては、0002〜0003のMVI L,06について見てみることにします。
●クロック毎の動作の様子です
最初の写真はプログラムカウンタ0002から始まります。
MVI L,06 の、OPコードフェッチサイクルのT0です。
アドレスバス下位8ビット(A7−A0)には00000010が表示され、データバスには、命令コード00100110が表示されています。
プログラムカウンタ下位8ビットPC(L)の値は00000010です。
PCADoutが点灯していて、プログラムカウンタの値が外部アドレスバス(A0〜A15)に出力されていることを示しています。
MEMRDがアクティブなので、メモリから0002番地の値2E(00101110)が外部データバスに出力されています。
DataEnableもDataDIRも点灯していて、innerBUS(内部データバス)に、外部データバスから00101110が入っていることがわかります。
OPreg(OPコードレジスタ)には、まだひとつ前の命令(”26”)がラッチされたままです。
Hレジスタ(regH)には、0000、0001番地の2600(MVI H,00)の実行によって、00が入っています。
写真中央右上寄りにあるA〜Dは、T、M、Wパルスの元になる74HC161からの出力信号Qa〜Qdです。今はT0ですから全部消灯しています(Qa〜Qd=0)。
T1の写真です。
Aのみ点灯して、T1サイクルであることを示しています。
T1になって、OPコードレジスタに命令コード00101110(2E)が表示されました。
ラッチパルスが入力されていることを示す、OPcodeFetchが点灯しています。
このタイミングでは命令コードは「筒抜け」になっているだけで、まだラッチはされていません。
OPcadeFetchの点灯→消灯のタイミングで、命令コードがOPコードレジスタにラッチされます。
d2〜d0は101(Lレジスタ)に変わりました。
s2〜s0は110ですが、MVI r,I8ではs2〜s0は使われません。
d3、s3は通常はHです。
T2の写真です。
ステップが進み、Bのみ点灯して、T2であることを示しています。
OPcodeFetchが消灯しました。
T3の写真です。
A、Bが点灯して、T3サイクルであることを示しています。
PCincが点灯しました。
プログラムカウンタはT3の終了時にカウントアップされるので、この時点ではまだ変化はしません(PCincが点灯→消灯のタイミングでカウントアップされます)。
T4の写真です。
Cのみ点灯して、T4サイクルであることを示しています。
PCincが消灯しました。
プログラムカウンタが+1されて、PC(L)は03(00000011)になりました。
外部アドレスバスも”0003”になっています。
PCADoutが点灯していてプログラムカウンタの値が出力されていることがわかります。
MEMRDが点灯しているので、メモリアドレス0003の値(”06”)が外部データバスに出力されていることがわかります。
DataEnableもDataDIRも点灯しているので、innerBUS(内部データバス)も、外部データバスと同じ00000110になっています。
画面左上、regWRが点灯しています。
regWRが点灯していてd2〜d0=101なので、Lレジスタ(regL)が筒抜けになって、内部データバスと同じ00000110が表示されています。
Lレジスタは筒抜けになっているだけで、まだデータはラッチされていません。
regWRが点灯→消灯に変わるタイミングでラッチされます。
OPコードレジスタにはまだMVI L,06命令の00101110がラッチされています。
T5の写真です。
AとCが点灯して、T5サイクルであることを示しています。
regWRが消灯しました。
これでレジスタLにデータがラッチされました。
しかしPCADout、MEMRD、DataEnable、DataDIRは点灯していて、メモリアドレス0003のデータがまだ内部データバスにあることがわかります。
PCincが点灯しました。
プログラムカウンタはT5の終わりのタイミングで+1されますから、この時点ではまだカウントアップされていません。
T6の写真です。
T6サイクルは一瞬で完了し、またT0サイクルに戻るため、A〜Dは全部消灯しています。
プログラムカウンタPC(L)が+1されて、0004になりました。
PCADoutが点灯していて、プログラムカウンタの値が外部アドレスバスA0〜A15に出力されていることがわかります。
2008.8.28upload
前へ
次へ
ホームページトップへ戻る