トランジスタで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
前へ
次へ
ホームページトップへ戻る