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

●LXI、PUSH、POP、CALL、RETの回路を実装しました

SP(スタックポインタ)と、LXI、PUSH、POP、CALL、RETの各回路を実装しました。
これで基本的なレジスタはすべて実装したことになります。
レジスタでまだ実装していないのは、数値、論理演算用のレジスタだけになりました(およびローテイト命令用)。
最初はがらあきだった基板も大分埋まってきましたね。

写真をクリックすると、拡大画像を見られます。
拡大画像はサイズが大きい(約1MB)ので、インターネットの低速接続環境ではダウンロードに時間がかかります。ご注意ください。



そうそう。写真右上にあるd3−d0、s3−s0用LEDは当初は赤だったのですが、dを緑色、sを黄色のLEDに付け直しました。
やっぱりこの方がいいですね。

●まずはLXI命令のテストです

JP命令が使えるとなると、次はやっぱりCALLとRET(Return)です。
サブルーチンCALL命令が使えるようになれば、もう立派なCPUです。

CALL命令とRET命令が使えるようにするためには、SP(スタックポインタ)が必要です。
SP(スタックポインタ)については[第67回]で説明しましたので、詳細についてはそちらのページを参照してください。

SP(スタックポインタ)が使えるようにするには、LXI命令が必要です。
プログラムの先頭で、必ずSP(スタックポインタ)に初期値を設定しておかないことには、SP(スタックポインタ)を使うことはできません。
SP(スタックポインタ)に初期値を設定するには、LXI命令を使います。

SP以外の16ビットレジスタ、HL、DE、BCに値を設定するには、LXI命令を使わなくても、8ビットのMVI命令を使って、
MVI H,12
MVI L,34
というようにすることもできますが、SP(スタックポインタ)に対しては
LXI SP,8000
というように、LXI命令を使うしかありません。

ということで、CALL、RETを使うためには、SP(スタックポインタ)を使えるようにする必要がありますし、SP(スタックポインタ)が使えるようにするには、LXI命令が使えるようにしなければなりません。なかなかに、大変なことです。

SP(スタックポインタ)のテストをするためには、いきなりCALL、RET命令を実行して確かめるというのは、少し乱暴です。
ここはやはり定石通り、PUSH、POP命令を使って確認すべきでしょう。
と言うわけで、PUSH、POP命令も用意しておかなければなりません(やれやれ)。

LXI命令のテストは簡単です。

0000 013412  LXI B,1234
0003 117856  LXI D,5678
0006 21BC9A  LXI H,9ABC
0009 31F0DE  LXI SP,DEF0
000C 76      HLT

これだけのプログラムですから、テストは簡単です。
LXI命令のテストは特に問題もなく、OKになりました。

●次はPUSH命令とPOP命令のテストです

今度のプログラムは少し長くなります。

0000 310000  LXI SP,0000
0003 011234  LXI B,3412
0006 115678  LXI D,7856
0009 219ABC  LXI H,BC9A
000C 3E55    MVI A,55
000E C5      PUSH B
000F D5      PUSH D
0010 E5      PUSH H
0011 F5      PUSH PSW
0012 F1      POP PSW
0013 E1      POP H
0014 D1      POP D
0015 C1      POP B
0016 C30E00  JMP 000E

まずは、ステップ動作でマシンクロックごとに動作させてみました。
OKです。
いよいよ、本番です。
通常のCPUクロック、2MHzで実行開始です。

しばらく順調に動作していたのですけれど…。
そのうちに、値が変わってしまうレジスタが出てきました。
時間が経つうちに、Aも、Bも、Cも、突然ぽこんと値が変わってしまいます。
あれま。やっぱり…。
誤動作です(うう。疲れるぅ…)。

本日は時間が無くなってしまいました。この続きは、次回にて。
2009.1.30upload

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