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