標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
やっと(!)MYCPU80の改良型基板製作に着手しました!!
[第847回]
●[8]LXI、PUSH、POP、CALL、RET回路
今回の組立は基板全体のあちこちに部品を埋め込みます。
今回の作業で基板左側のレジスタ回路部分はほとんど埋まりました。
●BOXヘッダーの組付順を変更しました
上の写真の左側と下側に見える26pinBOXヘッダーと16pinBOXヘッダーは今まで取り付けていませんでした。
このヘッダー(フラットケーブル用コネクタ)はデータバス、アドレスバスと制御信号を外部に取り出すためのもので、CPU回路の組立作業中には使うことはありません。
ですので一番最後に組み付けるつもりでした。
しかし写真を見ていただければわかる通り下側の2個はともかくとして、左側の2個を取り付けようとするとそのすぐ右にあるボタン電池の背が高すぎて邪魔になります。
ですのでこれらのBOXヘッダーはボタン電池ホルダよりも先に取り付けることにしました。
●LXI命令のテスト
MYCPU80操作説明書にあるLXI命令のテストプログラムをメモリに書いて実行します。
下のリストがLXIテストプログラムです。
0000 013412 LXI B,$1234 0003 117856 LXI D,$5678 0006 21BC9A LXI H,$9ABC 0009 31F0DE LXI SP,$DEF0 000C 76 HLT |
ペアレジスタBC、DE、HLとSP(スタックポインタ)に2バイトの値を入れたあとホルトするだけの簡単なプログラムです。
プログラムを実行しました。
BCレジスタに1234、DEレジスタに5678、HLレジスタに9ABCが入れられ、SP(スタックポインタ)にDEF0が入れられました。
SPはBCレジスタの下、HLレジスタの右にあります。
●LXI、PUSH、POP命令のテスト
MYCPU80操作説明書にあるLXI、PUSH、POP命令のテストプログラムをメモリに書いて実行します。
下のリストがテストプログラムです。
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 |
このプログラムはさきほどのLXIテストプログラムにPUSH命令とPOP命令を追加したものです。
プログラムを実行すると各レジスタに値をいれたあと、PUSH命令とPOP命令を繰り返し実行します。
テストする以外に意味のあるプログラムではありません。
PUSH命令とPOP命令はペアで使う必要があります。
また実行に先立ってSP(スタックポインタ)にスタックアドレスの設定が必要です。
プログラムを実行しました。
さきほどのプログラムはプログラムの最後のHLT命令を実行したためPC(プログラムカウンタ)はHLT命令のアドレス0006を表示して停止しましたが、今回のプログラムはPUSHとPOPを繰り返し実行し続けているため、SPは全点灯しているように見えます。
またPC(プログラムカウンタPCH、PCL)はアドレス000E〜0018の間を繰り返し実行しているため、下位5ビットが点灯しているように見えます。
●CALL、RET命令のテスト
MYCPU80操作説明書にあるCALL、RET命令のテストプログラムをメモリに書いて実行します。
下のリストがテストプログラムです。
0000 310000 LXI SP,$0000 0003 3E00 MVI A,00 0005 210000 LXI H,$0000 0008 110000 LXI D,$0000 000B 3C INR A 000C CC2000 CZ $0020 000F C30B00 JMP $000B 0020 2C INR L 0021 C0 RNZ 0022 24 INR H 0023 C0 RNZ 0024 1C INR E 0025 C0 RNZ 0026 14 INR D 0027 C9 RET |
このプログラムはCALL命令とRET命令のテストをするものです。
CALL命令、RET命令の実行に先立ってSP(スタックポインタ)にスタックアドレスの設定が必要です。
CALL命令は無条件CALL命令と条件付のCZ、CNZ、CC、CNC、CPO、CPE、CP、CMがありますがここではそのうちのCZをテストしています。
CZ命令はZ(ゼロ)フラグが立っているときにサブルーチンをCALLします。
またRET命令は無条件RET命令のほかにRZ、RNZ、RC、RNC、RPO、RPE、RP、RMがありますがここではRNZとRETをテストしています。
プログラムを実行するとAレジスタがインクリメントされ、00になる度に0020番地のサブルーチンがCALLされます。
サブルーチンではLレジスタをインクリメントし、Lレジスタが00になる度にHレジスタがインクリメントされ、同様にしてさらにE、Dの順にインクリメントされます。
プログラムを実行しました。
Aレジスタが256回インクリメントされるのには3.6mSしかかかりません。
Aレジスタは全点灯しているようにしか見えません。
その上位のLレジスタが256カウントされる時間は0.9秒です。
ですからLレジスタの上位2、3ビットは点滅しているのが目視できます。
その上のHレジスタは0.9秒ごとにインクリメントされます。
組立と動作テストの作業はもっと先まで進んでいるのですが、本日も時間がなくなってしまいましたので、ここまでにします。
TTLでCPUをつくろう![第847回]
2018.2.21upload
前へ
次へ
ホームページトップへ戻る