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

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


[第234回]



●命令DECODE回路(24)DECODE5テストプログラム(2)

[第232回]ではDECODE5だけを直接82C55と接続することで動作テストを行ないました。
今回は前回の接続図のようにDECODE5をDECODE1〜DECODE3と接続して最終的な動作テストを行ないます。
DECODE1〜DECODE3を接続して行なった動作テストではDECODE5を接続したときでも使えるように考えたテストプログラムを作りました([第213回]参照)。
下はそのテストプログラムです。
このテストプログラムをそのまま使ってテストを行ないました。

    10 OUT $83,$82
    20 PRINT "00b5b4b3010"
    30 X%=$10
    40 GOSUB 200
    50 PRINT "11b5b4b3010 T4"
    60 X%=$03
    70 OUT $82,$02
    80 GOSUB 200
    90 PRINT "11b5b4b3010 T8 Y2"
    95 X%=$13
   100 OUT $82,$40
   110 GOSUB 200
   120 PRINT "11b5b4b3010 T8 Y4"
   130 X%=$83
   140 OUT $82,$40
   150 GOSUB 200
   160 PRINT "end"
   170 STOP 
   200 A%=X%:OUT $80,A%
   210 B%=IN($81)
   220 PRINT "000 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   230 A%=$40+X%:OUT $80,A%
   240 B%=IN($81)
   250 PRINT "001 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   260 A%=$04+X%:OUT $80,A%
   270 B%=IN($81)
   280 PRINT "010 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   290 A%=$44+X%:OUT $80,A%
   300 B%=IN($81)
   310 PRINT "011 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   320 A%=$08+X%:OUT $80,A%
   330 B%=IN($81)
   340 PRINT "100 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   350 A%=$48+X%:OUT $80,A%
   360 B%=IN($81)
   370 PRINT "101 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   380 A%=$0C+X%:OUT $80,A%
   390 B%=IN($81)
   400 PRINT "110 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   410 A%=$4C+X%:OUT $80,A%
   420 B%=IN($81)
   430 PRINT "111 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%)
   440 RETURN 


プログラムは[第213回]のテストのときと同じですが、そのときはDECODE3の出力用10pinコネクタに82C55のBポートを接続しました。
今回はDECODE5の出力用10pinコネクタに82C55のBポートを接続しました。
そこのところだけが異なっています。
下は実行結果です。

>r.
00b5b4b3010
000          10           00010000     BF           10111111
001          50           01010000     7F           01111111
010          14           00010100     EF           11101111
011          54           01010100     DF           11011111
100          18           00011000     FB           11111011
101          58           01011000     F7           11110111
110          1C           00011100     FE           11111110
111          5C           01011100     FD           11111101
11b5b4b3010 T4
000          03           00000011     FF           11111111
001          43           01000011     FF           11111111
010          07           00000111     FF           11111111
011          47           01000111     FF           11111111
100          0B           00001011     FF           11111111
101          4B           01001011     FF           11111111
110          0F           00001111     FF           11111111
111          4F           01001111     FF           11111111
11b5b4b3010 T8 Y2
000          13           00010011     FF           11111111
001          53           01010011     FF           11111111
010          17           00010111     FF           11111111
011          57           01010111     FF           11111111
100          1B           00011011     FF           11111111
101          5B           01011011     FF           11111111
110          1F           00011111     FF           11111111
111          5F           01011111     FF           11111111
11b5b4b3010 T8 Y4
000          83           10000011     FF           11111111
001          C3           11000011     FF           11111111
010          87           10000111     FF           11111111
011          C7           11000111     FF           11111111
100          8B           10001011     FF           11111111
101          CB           11001011     FF           11111111
110          8F           10001111     FF           11111111
111          CF           11001111     FF           11111111
end

break in 170
>r.
00b5b4b3010
000          10           00010000     FF           11111111
001          50           01010000     FF           11111111
010          14           00010100     FF           11111111
011          54           01010100     FF           11111111
100          18           00011000     FF           11111111
101          58           01011000     FF           11111111
110          1C           00011100     FF           11111111
111          5C           01011100     FF           11111111
11b5b4b3010 T4
000          03           00000011     BF           10111111
001          43           01000011     7F           01111111
010          07           00000111     EF           11101111
011          47           01000111     DF           11011111
100          0B           00001011     FB           11111011
101          4B           01001011     F7           11110111
110          0F           00001111     FE           11111110
111          4F           01001111     FD           11111101
11b5b4b3010 T8 Y2
000          13           00010011     BF           10111111
001          53           01010011     7F           01111111
010          17           00010111     EF           11101111
011          57           01010111     DF           11011111
100          1B           00011011     FB           11111011
101          5B           01011011     F7           11110111
110          1F           00011111     FE           11111110
111          5F           01011111     FD           11111101
11b5b4b3010 T8 Y4
000          83           10000011     BF           10111111
001          C3           11000011     7F           01111111
010          87           10000111     EF           11101111
011          C7           11000111     DF           11011111
100          8B           10001011     FB           11111011
101          CB           11001011     F7           11110111
110          8F           10001111     FE           11111110
111          CF           11001111     FD           11111101
end

break in 170

最初にDECODE5をジャンパーピンの設定で「219S」に設定してプログラムを実行しました。
プログラムは4つのパートに分かれています。
最初のパートでは「219S」用の設定をテストしています。
次の3つのパートは「9S」用の設定のテストです。
1回目の実行ではDECODE5を「219S」に設定しましたので最初のパートではBポートにデータが出力されましたが、残りの3つのパートでは出力は全てFFになっています。
2回目の実行ではDECODE5を「9S」に設定して行ないました。
今度は1回目とは逆に最初のパートの出力はFFですが、残りの3つのパートでは正しい出力が得られています。
しかしもとのプログラムではND80Z3.5の82C55のBポートから入力されるデータをそのまま表示しているためビットの並びがわかりにくい並びになっています。
82C55のコネクタの端子配列とDECODE5の10pinコネクタの端子配列が異なっているためです。
そこでその部分を見易くするためにデータを変換するサブルーチンをコールするようにプログラムを変更しました。
サブルーチンは以前作ったものをそのままコピーしました。

下が変更後のプログラムです。

    10 OUT $83,$82
    20 PRINT "00b5b4b3010"
    30 X%=$10
    40 GOSUB 190
    50 PRINT "11b5b4b3000 T4 Y0"
    60 X%=$03
    70 OUT $82,$02
    80 GOSUB 190
    90 PRINT "11b5b4b3010 T8 Y2"
   100 X%=$13
   110 OUT $82,$40
   120 GOSUB 190
   130 PRINT "11b5b4b3100 T8 Y4"
   140 X%=$83
   150 OUT $82,$40
   160 GOSUB 190
   170 PRINT "end"
   180 STOP 
   190 A%=X%:OUT $80,A%
   200 B%=IN($81):GOSUB 440
   210 PRINT "000 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   220 A%=$40+X%:OUT $80,A%
   230 B%=IN($81):GOSUB 440
   240 PRINT "001 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   250 A%=$04+X%:OUT $80,A%
   260 B%=IN($81):GOSUB 440
   270 PRINT "010 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   280 A%=$44+X%:OUT $80,A%
   290 B%=IN($81):GOSUB 440
   300 PRINT "011 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   310 A%=$08+X%:OUT $80,A%
   320 B%=IN($81):GOSUB 440
   330 PRINT "100 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   340 A%=$48+X%:OUT $80,A%
   350 B%=IN($81):GOSUB 440
   360 PRINT "101 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   370 A%=$0C+X%:OUT $80,A%
   380 B%=IN($81):GOSUB 440
   390 PRINT "110 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   400 A%=$4C+X%:OUT $80,A%
   410 B%=IN($81):GOSUB 440
   420 PRINT "111 ",HEX$(A%,2),BI$(A%),HEX$(E%,2),BI$(E%)
   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.
00b5b4b3010
000          10           00010000     FE           11111110
001          50           01010000     FD           11111101
010          14           00010100     FB           11111011
011          54           01010100     F7           11110111
100          18           00011000     EF           11101111
101          58           01011000     DF           11011111
110          1C           00011100     BF           10111111
111          5C           01011100     7F           01111111
11b5b4b3000 T4 Y0
000          03           00000011     FF           11111111
001          43           01000011     FF           11111111
010          07           00000111     FF           11111111
011          47           01000111     FF           11111111
100          0B           00001011     FF           11111111
101          4B           01001011     FF           11111111
110          0F           00001111     FF           11111111
111          4F           01001111     FF           11111111
11b5b4b3010 T8 Y2
000          13           00010011     FF           11111111
001          53           01010011     FF           11111111
010          17           00010111     FF           11111111
011          57           01010111     FF           11111111
100          1B           00011011     FF           11111111
101          5B           01011011     FF           11111111
110          1F           00011111     FF           11111111
111          5F           01011111     FF           11111111
11b5b4b3100 T8 Y4
000          83           10000011     FF           11111111
001          C3           11000011     FF           11111111
010          87           10000111     FF           11111111
011          C7           11000111     FF           11111111
100          8B           10001011     FF           11111111
101          CB           11001011     FF           11111111
110          8F           10001111     FF           11111111
111          CF           11001111     FF           11111111
end

break in 180
>r.
00b5b4b3010
000          10           00010000     FF           11111111
001          50           01010000     FF           11111111
010          14           00010100     FF           11111111
011          54           01010100     FF           11111111
100          18           00011000     FF           11111111
101          58           01011000     FF           11111111
110          1C           00011100     FF           11111111
111          5C           01011100     FF           11111111
11b5b4b3000 T4 Y0
000          03           00000011     FE           11111110
001          43           01000011     FD           11111101
010          07           00000111     FB           11111011
011          47           01000111     F7           11110111
100          0B           00001011     EF           11101111
101          4B           01001011     DF           11011111
110          0F           00001111     BF           10111111
111          4F           01001111     7F           01111111
11b5b4b3010 T8 Y2
000          13           00010011     FE           11111110
001          53           01010011     FD           11111101
010          17           00010111     FB           11111011
011          57           01010111     F7           11110111
100          1B           00011011     EF           11101111
101          5B           01011011     DF           11011111
110          1F           00011111     BF           10111111
111          5F           01011111     7F           01111111
11b5b4b3100 T8 Y4
000          83           10000011     FE           11111110
001          C3           11000011     FD           11111101
010          87           10000111     FB           11111011
011          C7           11000111     F7           11110111
100          8B           10001011     EF           11101111
101          CB           11001011     DF           11011111
110          8F           10001111     BF           10111111
111          CF           11001111     7F           01111111
end

break in 180


以上でDECODE5の動作テストは終わりです。

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

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