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

トランジスタで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

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