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

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


[第216回]



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

前回書きましたようにDECODE4の論理ゲート回路の入力信号はDECODE3に比べて複雑なところがあります。
DECODE4の回路図は[第214回]でお見せしましたが以下の説明の助けにするために再掲します。

左側の入力信号の#1はDECODE1からの信号で、#2はDECODE2からの信号です。
#2の信号をよく見ると#2の後ろに"00”と書かれたものと"11"と書かれたものがあります。
DECODE2はジャンパーピンの設定によって命令コードの上位2ビットが”00”のときに出力がアクティブになる基板として使う場合と、”11”のときにアクティブになる基板として使う場合の2つの異なる回路基板としての役割をもっています。
実はDECODE3との接続のところでは説明してなかったのですが、DECODE3と接続するときはDECODE2は”11”基板として使います。
DECODE3から出力される信号は命令コードの上位2ビットが”11”の命令回路をアクティブにするからです([第209回]の回路図参照)。
それに対して上の回路図でわかるようにDECODE4は上位2ビットが”00”の命令をアクティブにする回路とと”11”の命令をアクティブにする回路が混じっています。
そして”00”の回路には”00”に設定したDECODE2からの出力が入力され、”11”の回路には”11”に設定したDECODE2からの出力が入力されます。
ですからDECODE4の入力用コネクタには”00”に設定したDECODE2からの出力を受けるコネクタ(CN1)と”11”に設定したDECODE2からの出力を受けるコネクタ(CN3)が用意されています。
最終的にはDECODE2基板を2枚用意してそのうちの1枚を”00”基板として、もう1枚を”11”基板としてDECODE4に接続することになります。
しかし今はテストですので1枚のDECODE2基板を”00”と”11”に使い分けて、テストプログラムもそれぞれに合わせて2本に分けて作成することにしました。
今回作成するテストプログラムは命令コードの上位2ビットが”11”の命令に対応する回路のみをテストします。
上の回路図のY0(PUSH)、Y1(POP)、Y3(PCHL)、Y6(SPHL)です。
PUSHの命令コードはC5、D5、E5、F5の4通り、POPの命令コードもC1、D1、E1、F1の4通りありますから、その全てのコードを入力してテストします。
下が作成したテストプログラムです。
[第211回]で作ったDECODE3のテストプログラムをもとにして作りました。

    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.
PUSH C5      A3           10100011     01           00000001
PUSH D5      A7           10100111     01           00000001
PUSH E5      AB           10101011     01           00000001
PUSH F5      AF           10101111     01           00000001
POP C1       23           00100011     02           00000010
POP D1       27           00100111     02           00000010
POP E1       2B           00101011     02           00000010
POP F1       2F           00101111     02           00000010
PCHL E9      6B           01101011     08           00001000
SPHL F9      6F           01101111     40           01000000

break in 320

PUSHのときの出力はY0(ビット0)のみが1になっています。
POPのときはY1が1になっています。
PCHLではY3が、SPHLではY6が1になっています。
ここまでのところはDECODE4の回路は正しく機能していることが確認できました。

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

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