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

標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
やっと(!)MYCPU80の改良型基板製作に着手しました!!





[第853回]


●IN、OUT、RRC、RLC命令のテスト

IN命令とOUT命令は外部I/O回路に対して働く命令です。
今回の改良を行なう前のMYCPU80は基板の左側部分のTK−80回路にI/O回路も搭載していましたので、その回路を使ってIN命令、OUT命令のテストを行ないました。
今作業中の新MYCPU80はTK−80回路を切り離して別基板にしましたので、その別基板を接続しないことにはIN、OUT命令のテストはできません。
MYCPU80本体が完成したら次はTK−80回路基板も製作しますので、それができてからテストをしてもよいのですが。
私の場合、新MYCPU80の命令回路が正しく働くかどうかのテストも兼ねて作業していますので、せっかくIN、OUT命令の回路を実装したからには、できれば今のうちにテストをしておきたいと思います。
それで思い出しました。
以前にMYCPU80用増設I/Oボードを作りました。
それを新MYCPU80の拡張用バスコネクタに接続すれば、IN、OUT命令のテストができます。
ということでさっそく簡単なテストプログラムを作ってテストをしてみることにしました。
どうせテストをするのですから、IN、OUT命令と一緒にRRC、RLC命令のテストも兼ねることにしました。
下がそのプログラムリストです。

2018/2/23  10:6  iotest1.txt
END=0022
              ;;; I/O TEST for MYCPU80B
              ;18/2/23
              ;
                T500MS=$0030
              ;
                ORG $0000
0000 310000     LXI SP,$0000
0003 3E81       MVI A,81
0005 D383       OUT 83
0007 0601       MVI B,01
0009 0E80       MVI C,80
000B 78       LOOP:MOV A,B
000C 07         RLC
000D 47         MOV B,A
000E D380       OUT 80
0010 79         MOV A,C
0011 0F         RRC
0012 4F         MOV C,A
0013 D381       OUT 81
0015 DB82       IN 82
0017 07         RLC
0018 07         RLC
0019 07         RLC
001A 07         RLC
001B D382       OUT 82
001D CD3000     CALL T500MS
0020 C30B00     JMP LOOP
              ;
                LOOP         =000B  T500MS       =0030 

MYCPU80用増設I/Oボードは8080ファミリーLSIの8255のCMOS版82C55を実装しています。
82C55には8ビットのI/Oポートが3ポートあります。
Aポート、Bポート、Cポートの3ポートです。
AポートとBポートは8ビット全部をまとめて入力ポートか出力ポートに初期設定して使います。
CポートはAポート、Bポートと同じ使い方もできますが、そのほかに上位4ビットと下位4ビットを分けて片方を入力、片方を出力に初期設定して使うこともできますし出力に設定した場合、他のビットを変化させずに特定の1ビットのみを出力させることもできます。
この増設I/Oボードは基板上のジャンパピン設定でI/Oアドレスを設定して使います。
今回はI/Oアドレスを80〜83に設定します。
Aポートが80、Bポートが81、Cポートが82、コントロールワードアドレスが83です。

テストプログラムの説明です。
プログラムの先頭でI/Oアドレス83に81を出力しています。
81はAポートとBポートを出力、Cポートの上位4ビットを出力、下位4ビットを入力に設定するコントロールワードです。
最初にBレジスタに01、Cレジスタに80を入れます。
そのあとBレジスタを左に1ビット回転させてからAポートに出力します。
次にCレジスタを右に1ビット回転させてからBポートに出力します。
そのあとCポートの下位4ビットから入力した値を左に4ビット回転(シフト)させてCポートに出力します(このようにすることでCポートの下位4ビットから入力した値を上位4ビットに出力することができます)。
そのあと0.5秒タイマールーチンをコールしてから、上の動作を繰り返します。
プログラムを実行中の写真です。

82C55からの出力をモニタする回路が必要です。
随分昔に作ったテスト用のLED表示回路を接続しています。
この表示回路のLEDはポート出力が0のときに点灯し1の時に消灯します。
右の1列がAポート、中がBポート、左がCポートです。
下側がビット0で上側がビット7です。
Cポートはビット0の入力をGNDにショートしています。
そのためビット0のLEDが点灯していますが、その入力を上位4ビットから出力しているため、ビット4も点灯しています。

●RAR、RAL、STC、CMC命令のテスト

このテストプログラムも新しく作りました。
RARはC(キャリー)フラグとAレジスタをつなげて9ビットとして右に1ビット回転する命令です。
RALはそれとは逆に左に回転する命令です。
STCはC(キャリー)フラグをセットする命令で、CMCはC(キャリー)フラグの値を反転(1を0に、0を1に)する命令です。
下は新しく作ったテストプログラムのリストです。

2018/2/23  10:46  rartest1.txt
END=0019
              ;;; RAR TEST for MYCPU80B
              ;18/2/23
              ;
                T500MS=$0030
              ;
                ORG $0000
0000 310000     LXI SP,$0000
0003 1608       MVI D,08
0005 0600       MVI B,00
0007 0EFF       MVI C,FF
0009 78       LOOP:MOV A,B
000A 37         STC
000B 1F         RAR
000C 47         MOV B,A
000D 79         MOV A,C
000E 37         STC
000F 3F         CMC
0010 17         RAL
0011 4F         MOV C,A
0012 CD3000     CALL T500MS
0015 15         DCR D
0016 C20900     JNZ LOOP
0019 76         HLT
              ;
LOOP         =0009  T500MS       =0030  

初めにBレジスタに00、CレジスタにFFを入れ、Dレジスタにカウンタの値として08を入れます。
Bレジスタの値をAレジスタに入れた後、STCを実行してからRARを実行し、結果をBレジスタに戻します。
その結果Bレジスタが右に1ビットシフトしてC(キャリー)フラグの値(STCを実行するため1になる)がビット7に入れられます。
次にCレジスタの値をAレジスタに入れた後、STCを実行し、続いてCMCを実行してからRALを実行し、結果をCレジスタに戻します。
その結果Cレジスタが左に1ビットシフトしてC(キャリー)フラグの値(STCに続いてCMCを実行するため0になる)がビット0に入れられます。
この動作を8回繰り返す結果、BレジスタはFFになり、Cレジスタは00になります。
テストプログラムを実行した後の写真です。


TTLでCPUをつくろう![第853回]

2018.2.27upload

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