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

標準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

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