標準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
前へ
次へ
ホームページトップへ戻る