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

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第217回]



●命令デコード回路(19)DECODE4テストプログラム(2)

前回はDECODE4の回路のうち、命令コードの上位2ビットが”11”のときにアクティブになる回路をテストしました。
今回は命令コードの上位2ビットが”00”のときにアクティブになる回路をテストするプログラムを作成します。
今回のプログラムは前回よりも複雑です。
DECODE4の回路図を再掲します。

命令コードの上位2ビットが”00”の命令は2つのグループに分かれています。
第1のグループはY2(DAA)、Y4(CMA)、Y5(STC)、Y7(CMC)でこの4本の出力信号はCN5に配置されていて、そこにはBポートからのケーブルが接続されています。
第2のグループはY8(NOP)、Y9(DAD)、Y10(LXI)、Y11(RLC〜RAR)でこの4本の出力信号はCN6に配置されていて、そこにはCポートからのケーブルが接続されています。

DADの命令コードは09、19、29、39の4通り、LXIの命令コードも01、11、21、31の4通りです。
またRLC(07)、RRC(0F)、RAL(17)、RAR(1F)も4通りです。
その全てのコードを入力してテストします。
下が作成したテストプログラムです。
今回も[第211回]で作ったDECODE3のテストプログラムをもとにして作りましたがDECODE4からの出力が2つのコネクタに分かれていて、そこにBポートとCポートをつけてそこから読み込みますからCポートから読み込んで表示する部分の変換サブルーチンが追加になっています。

    10 OUT $83,$8B
    20 D%=$C5:GOSUB 330:OUT $80,A%
    30 B%=IN($81):GOSUB 440
    40 PRINT "PUSH C5",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
    50 D%=$D5:GOSUB 330:OUT $80,A%
    60 B%=IN($81):GOSUB 440
    70 PRINT "PUSH D5",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
    80 D%=$E5:GOSUB 330:OUT $80,A%
    90 B%=IN($81):GOSUB 440
   100 PRINT "PUSH E5",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   110 D%=$F5:GOSUB 330:OUT $80,A%
   120 B%=IN($81):GOSUB 440
   130 PRINT "PUSH F5",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   140 D%=$C1:GOSUB 330:OUT $80,A%
   150 B%=IN($81):GOSUB 440
   160 PRINT "POP C1",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   170 D%=$D1:GOSUB 330:OUT $80,A%
   180 B%=IN($81):GOSUB 440
   190 PRINT "POP D1",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   200 D%=$E1:GOSUB 330:OUT $80,A%
   210 B%=IN($81):GOSUB 440
   220 PRINT "POP E1",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   230 D%=$F1:GOSUB 330:OUT $80,A%
   240 B%=IN($81):GOSUB 440
   250 PRINT "POP F1",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   260 D%=$E9:GOSUB 330:OUT $80,A%
   270 B%=IN($81):GOSUB 440
   280 PRINT "PCHL E9",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   290 D%=$F9:GOSUB 330:OUT $80,A%
   300 B%=IN($81):GOSUB 440
   310 PRINT "SPHL F9",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   320 STOP 
   330 'code change d0-d7 to PA
   340 A%=0
   350 IF BIT(D%,6)=1 THEN A%=A%+1
   360 IF BIT(D%,7)=1 THEN A%=A%+2
   370 IF BIT(D%,4)=1 THEN A%=A%+4
   380 IF BIT(D%,5)=1 THEN A%=A%+8
   390 IF BIT(D%,1)=1 THEN A%=A%+16
   400 IF BIT(D%,0)=1 THEN A%=A%+32
   410 IF BIT(D%,3)=1 THEN A%=A%+64
   420 IF BIT(D%,2)=1 THEN A%=A%+128
   430 RETURN 
   440 'code change PB to out0-out7
   450 E%=0
   460 IF BIT(B%,6)=1 THEN E%=E%+1
   470 IF BIT(B%,7)=1 THEN E%=E%+2
   480 IF BIT(B%,4)=1 THEN E%=E%+4
   490 IF BIT(B%,5)=1 THEN E%=E%+8
   500 IF BIT(B%,2)=1 THEN E%=E%+16
   510 IF BIT(B%,3)=1 THEN E%=E%+32
   520 IF BIT(B%,0)=1 THEN E%=E%+64
   530 IF BIT(B%,1)=1 THEN E%=E%+128
   540 RETURN 


下が実行結果です。

>r.
DAA 27       B8           10111000     04           00000100
CMA 2F       F8           11111000     10           00010000
STC 37       BC           10111100     20           00100000
CMC 3F       FC           11111100     80           10000000
NOP 00       00           00000000     01           00000001
DAD 09       60           01100000     02           00000010
DAD 19       64           01100100     02           00000010
DAD 29       68           01101000     02           00000010
DAD 39       6C           01101100     02           00000010
LXI 01       20           00100000     04           00000100
LXI 11       24           00100100     04           00000100
LXI 21       28           00101000     04           00000100
LXI 31       2C           00101100     04           00000100
RLC 07       B0           10110000     08           00001000
RRC 0F       F0           11110000     08           00001000
RAL 17       B4           10110100     08           00001000
RAR 1F       F4           11110100     08           00001000

break in 530

DAA〜CMCの出力はBポートから入力しています。
NOPから後ろの出力はCポートから入力しています。
いずれもアクティブ出力のビットのみが1になっています。
前回に続いてDECODE4の回路をテストしましたが、いずれも正しく機能していることが確認できました。

なお前回のテストと今回のテストとではDECODE2のジャンパーピンの設定とDECODE2の出力コネクタケーブルをDECODE4に接続するコネクタが異なります。
今回のテストでの接続も写真に撮りました。
前回の写真([第215回]にあります)と見比べてみてください。

右上のDECODE2のジャンパーピンの設定(写真で見て基板の左上)が”00”になっています。
またDECODE2の10pin出力コネクタケーブルがDECODE4のCN1(写真で見て基板下左側のコネクタ)に接続されています。
ちょっと小さくて見にくいですね。
その部分を拡大しました。




こちらは[第215回]の写真の同じ部分を拡大したものです。




トランジスタでCPUをつくろう![第217回]
2020.4.12upload

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