標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第333回]
●[8]LXI、PUSH、POP、CALL、Cx、RET、Rx命令回路の実装です
[第313回]で説明した作業です。
今回はLXI、PUSH、POP、CALL、RET命令の回路を実装します。
実装する部分は、こちらのシルク図で、茶色で着色したところです。
組立説明書の説明にしたがってICを取り付けていましたら、
ICが入りません。
[第326回]で作業をした、下図のR70に取り付けた抵抗が邪魔をして、IC205にICが入りません。
R70がIC205に近すぎたようです。
仕方がありませんから、R70に取り付けた抵抗を外して、基板裏に付け直しました。
基板裏側の写真です
写真中央に見える抵抗が、裏側に移動して取り付けたR70の抵抗です。
こういうことは実際に組み立ててみてはじめてわかることです。
●組立作業を終わったところの写真です
写真をクリックすると拡大画像を見られます。サイズが大きい(約1.4MB)ので、インターネットの低速接続環境では、ダウンロードに時間がかかります。ご注意ください。
●[8]LXI、PUSH、POP、CALL、Cx、RET、Rx命令回路の動作テストです(操作説明書から)
●13.LXI命令のテスト
MYCPU80組立説明書 V組立 [8]LXI、PUSH、POP、CALL、RET命令回路 の組立作業後に行う動作テストの説明です。
●13−1. LXI命令のテストプログラムをメモリに書く
メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。
0000 013412 LXI B,$1234
0003 117856 LXI D,$5678
0006 21BC9A LXI H,$9ABC
0009 31F0DE LXI SP,$DEF0
000C 76 HLT
(リスト9) LXI テストプログラム
プログラムは非常に簡単なものです。
ペアレジスタBC、DE、HLとSP(スタックポインタ)に2バイトの値を入れるだけのプログラムです。
●13−2. テストプログラムを実行する
プログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。
RESETSWを押しながら、ディップスイッチDS3−4をOFFにします。その後RESETSWを離すとプログラムが実行されます。
プログラムが実行されると、BCレジスタに1234が、DEレジスタに5678が、HLレジスタに9ABCが、SP(スタックポインタ)にDEF0がそれぞれ入れられます。
その状態でプログラムは停止して、HLT命令を実行し続けます。
☆☆☆操作説明書には図はありますが画像(基板の写真)はありません。でもせっかくのホームページですから、写真もUPいたします。☆☆☆
●テストプログラムを実行中の写真です
上列左のDレジスタに56が表示されています。その右のEレジスタには78が表示され、さらに右のBレジスタに12が、Cレジスタに34が表示されています。
その下の列のHLレジスタに9Aが、LレジスタにBCが表示され、その右のSP(スタックポインタ)にはDEF0が表示されています。
ADDRESS BUS(外部アドレスバス)には000Cが表示され、DATA BUS(外部データバス)、inner BUS(内部データバス)、OPcode register(命令コードレジスタ)には76が表示されていて、CPUがアドレス000CのHLT命令(コード76)を繰り返し実行していることがわかります。
●14.LXI、PUSH、POP命令のテスト
MYCPU80組立説明書 V組立 [8]LXI、PUSH、POP、CALL、RET命令回路 の組立作業後に行う動作テストの説明です。
●14−1. LXI、PUSH、POP命令のテストプログラムをメモリに書く
メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。
0000 310000 LXI SP,$0000
0003 3E55 MVI A,55
0005 013412 LXI B,$1234
0008 117856 LXI D,$5678
000B 21BC9A LXI H,$9ABC
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
(リスト10) LXI、PUSH、POP テストプログラム
このプログラムはリスト9にPUSH命令とPOP命令を追加したものです。
PUSH命令とPOP命令を繰り返し実行します。
[注意]PUSH命令、POP命令を使うプログラムは、SP(スタックポインタ)の設定が必要です。
このテストプログラムのようにSP=0000に設定した場合、スタックはそれ(0000)から−1したFFFFから使われていきます。
[参考]PC(プログラムカウンタ)以外のレジスタはリセットによってクリアされません。
●[アドレススイッチの設定]
今までのプログラムは短いものばかりでしたが、今回は少し長いプログラムです。
今までのプログラムはアドレスが000Fまでにおさまっていましたから、アドレス設定用のデイップスイッチは全ビットが0(全部下側)でしたが、今回のようにアドレスが000Fを越えるときは、アドレス設定用のディップスイッチも使うことになります。
例)アドレスを0010にする(DS2−1のみを1(上側)にする)。
この状態で、トグルスイッチのA3〜A0をセットすることによって、アドレス0010〜001Fを指定します。
アドレス0020は下の図のように、DS2−2を上に(DS2−1は下に)します。
この状態で、トグルスイッチのA3〜A0をセットすることによって、アドレス0020〜002Fを指定します。
アドレス0030は下の図のように、DS2−2とDS2−1を上にします。
トグルスイッチのA3〜A0がアドレスの下位4ビットを設定するために使われているのと全く同じように、デイップスイッチDS2はアドレスのA7〜A4の設定に使われ、またデイップスイッチDS3はアドレスのA15〜A8の設定に使われています。
長いプログラムを0000から順にメモリに書き込んでいくような場合、うっかりして、上位アドレスを設定するDS2、DS1を変更することを忘れてしまうと、プログラムが正しくメモリに書き込まれません。
長いプログラムを書き込むときはこのことによく注意してください。
●14−2. テストプログラムを実行する
プログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。
RESETSWを押しながら、ディップスイッチDS3−4をOFFにします。その後RESETSWを離すとプログラムが実行されます。
プログラムが実行されると、BCレジスタに1234が、DEレジスタに5678が、HLレジスタに9ABCが入れられ、Aレジスタには55が入れられます。
その後はレジスタBC、DE、HL、A(とフラグレジスタ)に対するPUSH命令とPOP命令が繰り返し実行し続けられます。
レジスタの値はPUSH命令によってスタック(メモリ)に一旦格納されたあと、POP命令によって再びメモリから読み出されてもとのレジスタに書き込まれます。
メモリ、レジスタへの書き込みが繰り返されますが、PUSH命令、POP命令とJMP命令が正しく実行されている限り、レジスタの値は変化しません。
●テストプログラムを実行中の写真です
●過去記事へのリンク
[第313回]でつけたリンクと同じですけれど、何かのお役に立てば、ということでここにも置くことにしました。
08/9/12 [第65回]●LXI命令●8080のニーモニックは不統一?●LXI命令のタイミングチャートです●LXI命令の回路図です
08/9/14 [第67回]●スタックポインタ●スタック
08/9/15 [第68回]●SP(スタックポインタ)の回路図です
08/9/16 [第69回]●PUSH命令の説明です●PUSH命令の回路図です●PUSH命令のタイミングチャートです●AレジスタはHighかLowか?
08/9/17 [第70回]●POP命令の説明です●POP命令の動作●POP命令のタイミングチャートです●POP命令の回路図です●2枚目の基板の追加配線作業が完了しました
08/9/18 [第71回]●2枚目の基板が動き出しました!●LXI B命令のクロックごとの動作の写真です
08/9/29 [第82回]●PUSH命令、POP命令のクロック毎の動作の写真を撮ったのですが…●PUSH、POPはわざと組み合わせを変えることがある●スタックの値が変わってしまう?
08/9/30 [第83回]●PUSH命令回路の問題点(前回の続きです)●MEMWR回路を変更しました●MEMWR回路変更後のPUSH命令のタイミングチャートです●regWR回路変更後のPOP命令のタイミングチャートです
08/10/1 [第84回]●LXI SP命令のクロック毎の動作の写真です●PUSH PSW命令のクロック毎の動作の写真です●PUSH H命令のクロック毎の動作の写真です
08/10/2 [第85回]●POP PSW命令のクロック毎の動作の写真です●POP H命令のクロック毎の動作の写真です
09/1/30 [第150回]●LXI、PUSH、POP、CALL、RETの回路を実装しました●まずはLXI命令のテストです●次はPUSH命令とPOP命令のテストです
09/2/4 [第153回]●LXI、PUSH、POPを使ったテストプログラムです●ND80Kのメモリマップです●テストプログラムの説明に戻ります
2009.9.12upload
前へ
次へ
ホームページトップへ戻る