トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第213回]
●命令デコード回路(15)DECODE3テストプログラム(2)
DECODE3のテストプログラムは[第211回]で作りました。
DECODE1とDECODE2からの出力を合わせることで命令回路をアクティブにする回路のテストでした。
今回はDECODE3のもうひとつの回路、DECODE5基板の回路をアクティブにするための信号回路のテストです。
その回路については[第209回]で回路図をお見せしましたがプログラムの説明の参考にするため下に再掲します。
回路は2つの部分に分かれています。
1つは図の右下にあるIC219セレクト回路です。
OP7=0、OP6=0、OP2=0、OP1=1、OP0=0のときに出力がアクティブ(H)になります。
OP7=OP6=0は”00”信号としてDECODE1から出力されます。
OP2〜OP0の信号もDECODE1から出力されていずれも20pinコネクタに配置されています。
DECODE3のもう1つの回路はIC9セレクト回路です。
こちらは少し複雑です。
DECODE2(”11”に設定)からの出力信号とT4、T8のANDをとってそれをOR回路を通して出力します。
具体的にはDECODE2のY0出力とT4のAND、Y2とT8のAND、Y4とT8のANDです。
最終的に出力される信号はアクティブHです。
IC219セレクト回路は1つだけですがIC9セレクト回路は3つの回路のORですから都合4通りの回路をテストすることになります。
各回路の出力に接続されるDECODE5回路はOP5〜OP3が000〜111である場合にそれぞれの出力をアクティブにします。
そのDECODE5をテストするときにも利用できるようにと考えてプログラムを作りました。
下がそのプログラムリストです。
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 |
いずれの回路のテストも入力はAポートからの出力で、結果はBポートから入力されます。
そこで共通する部分をサブルーチンにまとめました。
200〜の部分です。
今回のAポートからの出力データはビット並びの変換を行なっていないためちょっとわかりにくいところがあります。
実はAポートに出力するところのOP5〜OP3の部分は[第195回]のテストプログラムの後半部分を利用しました。
サブルーチンのA%のところの定数項はそのプログラムからの引用です。
それと合成するX%の値はOP7、OP6、OP2、OP1、OP0のビットの値をビット並びを変換しないでAポートに与えるときの値です。
下が実行結果です。
>r. 00b5b4b3010 000 10 00010000 96 10010110 001 50 01010000 96 10010110 010 14 00010100 96 10010110 011 54 01010100 96 10010110 100 18 00011000 56 01010110 101 58 01011000 56 01010110 110 1C 00011100 56 01010110 111 5C 01011100 56 01010110 11b5b4b3010 T4 000 03 00000011 A9 10101001 001 43 01000011 A9 10101001 010 07 00000111 A9 10101001 011 47 01000111 A9 10101001 100 0B 00001011 69 01101001 101 4B 01001011 69 01101001 110 0F 00001111 69 01101001 111 4F 01001111 69 01101001 11b5b4b3010 T8 Y2 000 13 00010011 A9 10101001 001 53 01010011 A9 10101001 010 17 00010111 A9 10101001 011 57 01010111 A9 10101001 100 1B 00011011 69 01101001 101 5B 01011011 69 01101001 110 1F 00011111 69 01101001 111 5F 01011111 69 01101001 11b5b4b3010 T8 Y4 000 83 10000011 A9 10101001 001 C3 11000011 A9 10101001 010 87 10000111 A9 10101001 011 C7 11000111 A9 10101001 100 8B 10001011 69 01101001 101 CB 11001011 69 01101001 110 8F 10001111 69 01101001 111 CF 11001111 69 01101001 end break in 170 |
最初はIC219セレクト回路のテストです。
219S出力はBポートのビット1から入力されます。
結果はBポートのビット1は全て1(アクティブH)になっています。
なおビット0は9S出力です。
ここでは全て0になっています。
このときの入力信号の組み合わせでは9S出力はアクティブにならないことが確認できます。
今回のテストではそのほかのビットは無視します。
次の3グループはIC9セレクト回路のテストです。
9S出力はBポートのビット0から入力されます。
いずれの結果もBポートのビット0は1(アクティブH)になっています。
なおこのときのビット1はすべて0になっています。
このときの入力信号の組み合わせでは219S出力はアクティブにならないことが確認できます。
以上でDECODE3試作基板の動作テストが完了しました。
トランジスタでCPUをつくろう![第213回]
2020.4.8upload
前へ
次へ
ホームページトップへ戻る