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