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

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

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