標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第71回]
●2枚目の基板が動き出しました!
まだ完全ではありませんが、1枚目の基板と接続して、いくつかの命令を正しく実行できるところまできました。
また写真をお見せしながら少しずつ説明していきたいと思います。
順序として、すでに説明した命令からテストしていくことにします。
メモリの0000番地から、次のプログラムを書いて、それをクロック毎に実行させてみます。
0000 01FF7F LXI B,7FFF
0003 04 INR B
0004 0C INR C
0005 05 DCR B
0006 0D DCR C
このうち今回は最初のLXI B命令の部分だけをお見せします。
●LXI B命令のクロックごとの動作の写真です
OPコードフェッチサイクルのT0です。
タイミングチャートを見ながら、写真を見ていただくと、理解しやすいと思います。
LXI命令のタイミングチャート([第65回])です。
LXI命令の回路は2枚目の基板にありますが、2枚目の基板のLEDは、LXI命令の動作には関係がありません。
1枚目の基板の上にあるLEDだけが光ります。
ですからLXI命令のステップ動作については、1枚目の基板の写真さえあれば十分なのですが、LXI命令の次にあるINR命令、DCR命令は2枚目の基板のLEDも動作の表示に加わります。
LXI命令だけではなくて、そのあとに続くINR命令、DCR命令の動作もあわせて写真に撮りましたので、LXI命令の部分についても、上の写真のように、1枚目と2枚目が一緒に写っています。
1枚目の基板にLEDを追加しました。
いままで各レジスタのWRITEのタイミングの表示はありませんでしたが、やはりあった方が動作がよくわかりますから、全てのレジスタのWR表示用LEDを追加しました。
上の写真はT0で、まだOPコードフェッチ前なのに、もうOPコードの01がデコードされて、d2とd1は0になっています。
LXI命令の回路図([第65回])を見ると、op5とop4が11以外のときは、マシンクロックでゲートせずに、すぐにop5とop4がd2とd1に出力されることがわかります。
LXI命令のタイミングチャート([第65回])でも、そのようになっています。
T1の写真です。
Aのみ点灯して、T1サイクルであることを示しています。
OPcodeFetchが点灯しています。
このタイミングでは命令コードは「筒抜け」になっているだけで、まだラッチはされていません。
OPcadeFetchの点灯→消灯のタイミングで、命令コードがOPコードレジスタにラッチされます。
T2の写真です。
クロックが進み、Bのみ点灯して、T2であることを示しています。
OPcodeFetchが消灯しました。
T3の写真です。
A、Bが点灯して、T3サイクルであることを示しています。
PCclk(PCinc)が点灯しました。
プログラムカウンタはT3の終了時にカウントアップされるので、この時点ではまだ変化はしません(PCincが点灯→消灯のタイミングでカウントアップされます)。
T4の写真です。
Cのみ点灯して、T4サイクルであることを示しています。
PCclkが消灯しました。
プログラムカウンタが+1されて、PC(L)は00000001になりました。
外部アドレスバスも”0001”になっています。
PCADoutが点灯していてプログラムカウンタの値が出力されていることがわかります。
MEMRDが点灯しているので、メモリアドレス”0001”の値(”FF”)が外部データバスに出力されていることがわかります。
DataEnableもDataDIRも点灯しているので、innerBUS(内部データバス)も、外部データバスと同じ11111111になっています。
画面左上、regWRが点灯しています。
regWRが点灯していてd3〜d0=1001なので、Cレジスタ(regC)が筒抜けになって、内部データバスと同じ11111111が表示されています。
CregWRが点灯しています。
Cレジスタは筒抜けになっているだけで、まだデータはラッチされていません。
CregWRが点灯→消灯に変わるタイミングでラッチされます。
T5の写真です。
AとCが点灯して、T5サイクルであることを示しています。
regWR、CregWRが消灯しました。
これでCレジスタにデータがラッチされました。
PCclkが点灯しました。
プログラムカウンタはT5の終わりのタイミングで+1されますから、この時点ではまだカウントアップされていません。
T6の写真です。
BとCが点灯して、T6サイクルであることを示しています。
PCclkが消灯しました。
プログラムカウンタが+1されて、PC(L)は00000010(”02”)になりました。
外部データバスには0002番地のメモリの値”7F”が出力され、内部データバスにも同じ”7F”が表示されています。
d0が消灯しました。
d3〜d0=1000で、regWRが点灯しているので、Bレジスタに書き込みが行われることがわかります。
BregWRが点灯しています。
Bレジスタが筒抜けになって、Bレジスタの値は、内部データバスと同じ”7F”になっています。
T7の写真です。
A〜Cが点灯して、T7サイクルであることを示しています。
regWR、BregWRが消灯しました。
PCclkが点灯しました。
ここまででLXI命令は完了です。
T8の写真です。
T8サイクルは一瞬で完了し、またT0サイクルに戻るため、A〜Dは全部消灯しています。
PCが+1進んで”03”になり、外部アドレスバスにも0003が出力されています。
データバスには、メモリの0003番地にある、次の命令コード”04(INR B)”が出力されています。
2008.9.18upload
前へ
次へ
ホームページトップへ戻る