トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第229回]
●REGISTER回路(6)テストプログラム
今回はREGISTER試作基板の動作テストです。
今までと同様BASICプログラムを作ってテストします。
プログラムの理解を助けるために前回お見せした82C55との接続部分のコネクタ接続図を再掲します。
今回のプログラムはREGISTER_SELECT_WR、REGISTER_SELECT_RD、REGISTERの各テストプログラムを合体させたものになります。
それだけではなくて、REGISTER基板のaiレジスタアドレス)を設定するジャンパーピンを操作してREGISTER基板をbOからbVまで順に設定するとともに、テストプログラムではREGISTER_SELECT_WR、REGISTER_SELECT_RDに与えるセレクトデータを順に変化させながらREGISTER基板にテストデータをWRITE/READしてWRITEしたデータとREADしたデータを比較します。
不一致のときは「NG」と表示して次のアドレスのテストに進みます。
かなり複雑な処理です。
下が作成したテストプログラムのプログラムリストです。
10 OUT $87,$80 20 OUT $86,$FF 30 OUT $86,$C0:'c7(wr)=1,c6(rd)=1,c3=0,c2=0,c4=0,c5=0,c1=0,c0=0 40 OUT $85,0:'b6=0,b7=0 50 PRINT "000 "; 60 GOSUB 580 70 OUT $86,$D8:'c7(wr)=1,c6(rd)=1,c3=1,c2=0,c4=1,c5=0,c1=0,c0=0 80 OUT $85,0:'b6=0,b7=0 90 PRINT "001 "; 100 GOSUB 580 110 OUT $86,$E4:'c7(wr)=1,c6(rd)=1,c3=0,c2=1,c4=0,c5=1,c1=0,c0=0 120 OUT $85,0:'b6=0,b7=0 130 PRINT "010 "; 140 GOSUB 580 150 OUT $86,$FC:'c7(wr)=1,c6(rd)=1,c3=1,c2=1,c4=1,c5=1,c1=0,c0=0 160 OUT $85,0:'b6=0,b7=0 170 PRINT "011 "; 180 GOSUB 580 190 OUT $86,$C2:'c7(wr)=1,c6(rd)=1,c3=0,c2=0,c4=0,c5=0,c1=1,c0=0 200 OUT $85,$40:'b6=1,b7=0 210 PRINT "100 "; 220 GOSUB 580 230 OUT $86,$DA:'c7(wr)=1,c6(rd)=1,c3=1,c2=0,c4=1,c5=0,c1=1,c0=0 240 OUT $85,$40:'b6=1,b7=0 250 PRINT "101 "; 260 GOSUB 580 270 OUT $86,$E6:'c7(wr)=1,c6(rd)=1,c3=0,c2=1,c4=0,c5=1,c1=1,c0=0 280 OUT $85,$40:'b6=1,b7=0 290 PRINT "110 "; 300 GOSUB 580 310 OUT $86,$FE:'c7(wr)=1,c6(rd)=1,c3=1,c2=1,c4=1,c5=1,c1=1,c0=0 320 OUT $85,$40:'b6=1,b7=0 330 PRINT "111 "; 340 GOSUB 580 350 STOP 360 'code change a% to PC(d0-d7) 370 X%=0 380 IF BIT(A%,5)=1 THEN X%=X%+1 390 IF BIT(A%,4)=1 THEN X%=X%+2 400 IF BIT(A%,7)=1 THEN X%=X%+4 410 IF BIT(A%,6)=1 THEN X%=X%+8 420 IF BIT(A%,2)=1 THEN X%=X%+16 430 IF BIT(A%,3)=1 THEN X%=X%+32 440 IF BIT(A%,0)=1 THEN X%=X%+64 450 IF BIT(A%,1)=1 THEN X%=X%+128 460 RETURN 470 'code change PC to d0-d7 480 E%=0 490 IF BIT(C%,6)=1 THEN E%=E%+1 500 IF BIT(C%,7)=1 THEN E%=E%+2 510 IF BIT(C%,4)=1 THEN E%=E%+4 520 IF BIT(C%,5)=1 THEN E%=E%+8 530 IF BIT(C%,1)=1 THEN E%=E%+16 540 IF BIT(C%,0)=1 THEN E%=E%+32 550 IF BIT(C%,3)=1 THEN E%=E%+64 560 IF BIT(C%,2)=1 THEN E%=E%+128 570 RETURN 580 '00000001 to 10000000 590 A%=1 600 B%=0 610 GOSUB 360 620 OUT $83,$80 630 OUT $82,X% 640 OUT $87,$0E:'wr=0 650 OUT $87,$0F:'wr=1 660 OUT $83,$9B 670 OUT $87,$0C:'rd=0 680 C%=IN($82) 690 OUT $87,$0D:'rd=1 700 GOSUB 470 710 PRINT HEX$(X%),HEX$(E%),BI$(E%), 720 IF A%<>E% GOTO 760 725 PRINT 730 A%=A%*2 740 B%=B%+1:IF B%<=7 GOTO 610 750 RETURN 760 PRINT "NG!" 770 RETURN |
下が実行結果です。
ジャンパーピンの設定を変えてREGISTER基板のアドレスをbOからbVまで設定しながら8回実行しています。
>r. 000 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 001 40 FF 11111111 NG! 010 40 FF 11111111 NG! 011 40 FF 11111111 NG! 100 40 FF 11111111 NG! 101 40 FF 11111111 NG! 110 40 FF 11111111 NG! 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 010 40 FF 11111111 NG! 011 40 FF 11111111 NG! 100 40 FF 11111111 NG! 101 40 FF 11111111 NG! 110 40 FF 11111111 NG! 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 FF 11111111 NG! 010 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 011 40 FF 11111111 NG! 100 40 FF 11111111 NG! 101 40 FF 11111111 NG! 110 40 FF 11111111 NG! 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 FF 11111111 NG! 010 40 FF 11111111 NG! 011 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 100 40 FF 11111111 NG! 101 40 FF 11111111 NG! 110 40 FF 11111111 NG! 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 FF 11111111 NG! 010 40 FF 11111111 NG! 011 40 FF 11111111 NG! 100 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 101 40 FF 11111111 NG! 110 40 FF 11111111 NG! 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 FF 11111111 NG! 010 40 FF 11111111 NG! 011 40 FF 11111111 NG! 100 40 FF 11111111 NG! 101 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 110 40 FF 11111111 NG! 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 FF 11111111 NG! 010 40 FF 11111111 NG! 011 40 FF 11111111 NG! 100 40 FF 11111111 NG! 101 40 FF 11111111 NG! 110 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 111 40 FF 11111111 NG! break in 350 >r. 000 40 FF 11111111 NG! 001 40 FF 11111111 NG! 010 40 FF 11111111 NG! 011 40 FF 11111111 NG! 100 40 FF 11111111 NG! 101 40 FF 11111111 NG! 110 40 FF 11111111 NG! 111 40 1 00000001 80 2 00000010 10 4 00000100 20 8 00001000 2 10 00010000 1 20 00100000 8 40 01000000 4 80 10000000 break in 350 |
REGISTER基板のジャンパーピンの設定通りにアクセスできてアドレスが一致したときには正しくWRITE/READされることが確認できました。
以上でREGISTER_SELECT_WR、REGISTER_SELECT_RD、REGISTERの各試作基板の動作テストが完了しました。
トランジスタでCPUをつくろう![第229回]
2020.4.24upload
前へ
次へ
ホームページトップへ戻る