トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第208回]
●命令デコード回路(10)DECODE2テストプログラム
命令デコード回路のテストプログラムは[第195回]で作りました。
そのときはDECODE1とDECODE2の回路を1つの基板に実装した試作基板に対してテストをするプログラムでしたが、そのうちのDECODE2回路に対するプログラム部分はDECODE2を分離させた今回の試作基板に対してもそのまま使えます。
ということで、[第195回]で作ったプログラムからDECODE2の部分だけを取り出してDECODE2のためのテストプログラムを作りました。
下がそのプログラムリストです。
DECODE2はジャンパーピンの設定によって入力コードの上位2ビットが”11”か”00”かを選ぶようになっていますが、下のプログラムは”11”を選択したときを想定しています。
10 OUT $83,$8B 20 PRINT "11xxxb2b1b0" 30 A%=3:OUT $80,A% 40 B%=IN($81) 50 PRINT "000 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 60 A%=$23:OUT $80,A% 70 B%=IN($81) 80 PRINT "001 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 90 A%=$13:OUT $80,A% 100 B%=IN($81) 110 PRINT "010 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 120 A%=$33:OUT $80,A% 130 B%=IN($81) 140 PRINT "011 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 150 A%=$83:OUT $80,A% 160 B%=IN($81) 170 PRINT "100 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 180 A%=$A3:OUT $80,A% 190 B%=IN($81) 200 PRINT "101 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 210 A%=$93:OUT $80,A% 220 B%=IN($81) 230 PRINT "110 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 240 A%=$B3:OUT $80,A% 250 B%=IN($81) 260 PRINT "111 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) |
プログラムの考え方については[第195回]で説明していますのでそちらを参照してください。
下が実行結果です。
>r. 11xxxb2b1b0 000 03 00000011 BF 10111111 001 23 00100011 7F 01111111 010 13 00010011 EF 11101111 011 33 00110011 DF 11011111 100 83 10000011 FB 11111011 101 A3 10100011 F7 11110111 110 93 10010011 FE 11111110 111 B3 10110011 FD 11111101 |
念のために上のプログラムを入力コードの上位2ビットが”00”の場合を想定したプログラムに書き換えました。
下がそのように書き換えたプログラムです。
10 OUT $83,$8B 20 PRINT "00xxxb2b1b0" 30 A%=0:OUT $80,A% 40 B%=IN($81) 50 PRINT "000 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 60 A%=$20:OUT $80,A% 70 B%=IN($81) 80 PRINT "001 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 90 A%=$10:OUT $80,A% 100 B%=IN($81) 110 PRINT "010 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 120 A%=$30:OUT $80,A% 130 B%=IN($81) 140 PRINT "011 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 150 A%=$80:OUT $80,A% 160 B%=IN($81) 170 PRINT "100 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 180 A%=$A0:OUT $80,A% 190 B%=IN($81) 200 PRINT "101 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 210 A%=$90:OUT $80,A% 220 B%=IN($81) 230 PRINT "110 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) 240 A%=$B0:OUT $80,A% 250 B%=IN($81) 260 PRINT "111 ",HEX$(A%,2),BI$(A%),HEX$(B%,2),BI$(B%) |
下が実行結果です。
>r. 00xxxb2b1b0 000 00 00000000 BF 10111111 001 20 00100000 7F 01111111 010 10 00010000 EF 11101111 011 30 00110000 DF 11011111 100 80 10000000 FB 11111011 101 A0 10100000 F7 11110111 110 90 10010000 FE 11111110 111 B0 10110000 FD 11111101 |
入力コードの上位2ビットが”11”と”00”でAポートに与えるデータは異なりますが出力されるデータはどちらも同じであることが確認できます。
想定した出力結果が得られています。
DECODE2が正常に機能することが確認できました。
トランジスタでCPUをつくろう![第208回]
2020.4.2upload
前へ
次へ
ホームページトップへ戻る