標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第347回]
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
●緊急のご連絡です!!!必ずお読みください(2009.9.30AM9:30)
組み立て中のお客様からメールをいただきました。
緊急ですのでとりあえず情報のみUPいたします。
(1)組立説明書28ページ 3−3.抵抗の取付け
R78が100KΩになっていますが1KΩ(茶黒赤金)の間違いです。1KΩ(茶黒赤金)に訂正願います。
YT様、ご指摘ありがとうございました。
(2)組立説明書22ページ 1−15.動作テスト でディップスイッチDS3についての説明がありません。
ここではDS3は全部OFF(上側)にしておいてください(そうしないと正しく動作しません)。
HT様、ご指摘ありがとうございました。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
●[10]IN、OUT、RLC〜RAR、STC、CMC、CMA命令回路の実装です
[第315回]で説明した作業です。
今回はIN、OUT、RLC〜RAR、STC、CMC、CMA命令の回路を実装します。
実装する部分は、こちらのシルク図で、レモンイエロー色で着色したところです(の、はずだったのですが…)。
試作の段階では、IN命令とOUT命令の動作テストをするのに、MYCPU80基板の外に、82C55をつないでテストしました([第107回]および[第166回]を参照してください)。
82C55というのは8080のファミリーLSIとして最もポピュラーなペリフェラルインタフェースです。双方向に設定可能な8ビットのI/Oポートを3組もっています。
うーん。しかし、ご購入いただいた皆様に、IN命令、OUT命令のテストをしていただくのに、「外部に82C55をつないでください」ってのは、いや、それはないでしょう。
それは応用篇としてならいいのかもしれませんが、基本的な動作テストで、それはちょっと、いくらなんでも、まずいでしょうねえ。
さて、どうしましょう。
おお、そうでした。
TK80回路の中に、何ビットか汎用に使えるIN、OUT回路を用意していました。
それを使えばよいじゃありませんか。
組立説明書を作成した時点では、I/O回路はTK80回路に含まれているため、当然その実装作業は一番最後の [13]TK80回路の実装 のところで行うことにしてありました。
その[13]の作業のうち、IN命令、OUT命令のテストに必要な回路だけは、今回の[10]の作業で行うように、変更しなければいけません。
そこで、IN命令、OUT命令をテストできるように、[13]で作業する予定になっていた下記の部品も[10]で組付けるように変更しました。
IC263 74HC138
IC264 74HC244
IC265 74HC32
IC266 74HC373
IC269 74HC02
B45 集合抵抗10KΩ×8
CN3 10pinストレートコネクタ
今回の追加作業を含めて着色し直したシルク図です(作業する部分が基板の広範囲に分かれているため、必要な部分だけを切り取って編集してあります)。
追加作業を含めて[10]で行う作業部分はレモンイエロー色で着色しています。
前回までの作業部分は灰色にしてあります。
シルク図をクリックすると、拡大画像を見られます。
●組立作業を終わったところの写真です
写真をクリックすると拡大画像を見られます。サイズが大きいので(約1.6MB)、インターネットの低速接続環境では、ダウンロードに時間がかかります。ご注意ください。
●[10]IN、OUT、RLC〜RAR、STC、CMC、CMA命令回路の動作テストです(操作説明書から)
●23.IN、OUT命令のテスト
MYCPU80組立説明書 V組立 [10]IN、OUT、RLC〜RAR、STC、CMC、CMA命令回路 の組立作業後に行う動作テストの説明です。
●23−1. テスト用の回路を準備する
IN命令は外部I/O回路から8ビットのデータを入力します。
OUT命令は外部I/O回路に8ビットのデータを出力します。
動作はメモリに対するREAD/WRITEとよく似ています。
メモリに対するMOV命令などでは外部アドレスバスA15〜A0にメモリアドレスを出力し、データバスD7〜D0を使ってデータの読み書きをします。
これに対してIN、OUT命令はアドレスバスの下位8ビットA7〜A0にI/Oアドレスを出力し、データバスD7〜D0を使ってデータの入出力を行います。
アドレスバスA7〜A0はメモリ回路と共通していますから、そのままではメモリ回路も同時にアクセスされてしまいます。
そうならないように、IN、OUT命令ではメモリ制御信号のMEMRD、MEMWRを使う代わりに、IORD、IOWR信号をアクティブにします。
IN、OUT命令回路のテストをするためには、A7〜A0とIORD、IOWRによってセレクトされるI/O入出力回路が必要です。
MYCPU80は基板上にそのための回路を実装しているので、外部にスイッチやLEDを接続するだけで簡単にIN、OUTの動作を確認することができます。
回路については
MYCPU80回路図bR1
MYCPU80回路図bR2
を参照してください(回路図の着色も変更しなければいけませんね。近いうちに直すことにします)。
I/Oアドレス98〜9Bでアクセスされる入出力信号端子がCN3の10pinコネクタに配置してあります。
CN3には10pフラットケーブルを接続します。
10pフラットケーブルのコネクタがついていない側にテスト用のLEDをとりつけます。
フラットケーブルの赤い色がついている側が1番pinです。5番、10番は緑色です。
フラットケーブルは隣同士のケーブル被覆が10cmごとにくっついていますが指先でつまんで引っ張るようにすると1本ずつばらばらにすることができます。
図のように1番、6番、9番、10番の被覆を先端から1cmほどはがして(*1)、できればハンダあげ(*2)をしておきます。
赤色LEDの長い側の端子に2.2KΩの抵抗をハンダづけします。
抵抗のもう一方のリード線にフラットケーブルの9番をハンダづけします。
赤色LEDの短い側の端子にフラットケーブルの6番をハンダづけします。
フラットケーブルの1番と10番は図のように何もつながない状態にしておきます。
[注意]フラットケーブルの9番は+5V、10番はGNDです。この2本が他の端子や基板配線などに接触しないように注意してください。とくに9番と10番が接触すると電源がショートしますので十分に注意してください。
(*1)ビニール被覆線の被覆のむきかた
(*2)ハンダあげ
23−2. フラットケーブルコネクタをCN3に接続する
以上のように作業した10pフラットケーブルコネクタをCN3に接続します。コネクタの△マークと基板面のシルク印刷の△マークを合わせる向きで接続します。このとき10本のコネクタ端子がずれたりしないで全部フラットケーブルコネクタにおさまっていることを確認してください。
●23−3. IN、OUT命令のテストプログラムをメモリに書く
メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。
0000 DB98 IN 98
0002 D398 OUT 98
0004 C30000 JMP $0000
(リスト20)IN、OUT テストプログラム
たったこれだけの非常に短いプログラムです。
I/Oアドレス98から入力したデータ(Aレジスタに読み込まれます)を、I/Oアドレス98に出力します。
同じアドレスですがINとOUTで回路は別になっていますから、入力ラインに出力されることはありません。
●23−4. テストプログラムを実行する
プログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。
RESETSWを押しながら、ディップスイッチDS3−4をOFFにします。その後RESETSWを離すとプログラムが実行されます。
プログラムが実行されると、IN 98命令でI/Oアドレスの98からデータがAレジスタに入力され、その後OUT 98命令でAレジスタに入力されたデータがI/Oアドレス98に出力されます。そしてそれを繰り返します。
CN3に接続された10pフラットケーブルの1番はI/Oアドレス98のビット7入力です。
また赤LEDを接続した6番はI/Oアドレス98のビット7出力です。
LEDはビット7出力がHのとき消灯し、Lのとき点灯します。
プログラムを実行させたまま、10pフラットケーブルの1番と10番をショートさせてみてください。
10番はGNDですが、1番は入力信号端子ですからGNDとショートさせても構いません。
するとI/O入力のビット7がGNDにショートしてLレベル(0)になりますから、そしてその他のビット入力は抵抗でプルアップされていてHレベル(1)が入力されますから、Aレジスタには7Fが入力されます。
AレジスタのLEDは左端のビット7だけが消灯します。
同時にそのデータがOUTアドレスの98に出力されるため、フラットケーブルに接続した赤LEDが点灯します。
そしてフラットケーブルの1番と10番を離すと1番の入力も抵抗でプルアップされているのでH(1)入力となり、AレジスタにはFFが入力されます。フラットケーブルにつないだ赤LEDは消灯します。
☆☆☆操作説明書には図はありますが画像(基板の写真)はありません。でもせっかくのホームページですから、写真もUPいたします。☆☆☆
●テストプログラムを実行中の写真です
ミノムシクリップで10pinケーブルの1番と10番をショートさせています。
Aレジスタのビット7が消灯し、フラットケーブルの6番に取り付けたLEDは点灯しています。
ミノムシクリップを離すと、Aレジスタのビット7は点灯し、フラットケーブルの6番に取り付けたLEDは消灯しました。
なおIN命令、OUT命令については、当社ホームページの
「つくるCPU[第166回]」(http://www.alles.or.jp~thisida/mycpu166.html)
でも説明をしています。
●24.OUT命令のテスト
MYCPU80組立説明書 V組立 [10]IN、OUT、RLC〜RAR、STC、CMC、CMA命令回路 の組立作業後に行う動作テストの説明です。
●24−1. OUT命令のテストプログラムをメモリに書く
メモリに次のプログラムを書きます(1. メモリにデータを書き込む の説明を参考にして操作してください)。
0000 3C INR A(8)
0002 D398 OUT 98(8)
0004 C30000 JMP $0000(12)
(リスト21)OUT テストプログラム
Aレジスタをインクリメント(+1)して、その結果をOUTアドレス98から出力します。
これを繰り返します。
●24−2. テストプログラムを実行する
プログラムの実行の仕方については 4. テストプログラムを実行する を参照してください。
RESETSWを押しながら、ディップスイッチDS3−4をOFFにします。その後RESETSWを離すとプログラムが実行されます。
プログラムが実行されると、Aレジスタがインクリメント(+1)され続けて、その値がOUTアドレス98から継続して出力されます。
OUTアドレス98の各ビットからの出力は、Aレジスタの各ビットの値と同じですから、それぞれの値のパルス出力になります。
23−1. テスト用の回路を準備する で作成し、CN3に接続した10pフラットケーブルの6番(赤LEDが接続されています)から出力されるパルスを計算してみます。
リスト21の各命令の後ろに()で示されているのが、その命令の実行クロック数です。
Aレジスタが+1され、OUTアドレスから出力される繰り返しの1回あたりのクロック数は、下の計算で求められます。
8+8+12=28クロック
10pフラットケーブルの6番はOUTアドレスのビット7で、それはそのままAレジスタのビット7ですから、128回の繰り返しごとに1と0が交互に出力されます(00〜7Fのとき出力は0、80〜FFのとき出力は1)。
28×128=3584クロック
1クロックは0.5μsですから、3584×0.5=1792μsです。
10pフラットケーブルの6番からは1.792msごとにHとLが交互に出力されることになります。
この出力をオシロスコープにつないで見ると、HとLがともに1.792msの方形波(周期は3.584ms)が観測できます。
周波数カウンタがあれば、1/3.584≒0.279ですから279Hzの測定値が得られます。
●オシロスコープで観測した出力波形の写真です
●24−3. オシロスコープや周波数カウンタを使わないで観測する
次のプログラムをメモリに書いて、実行してください。
0000 04 INR B(8)
0001 C20000 JNZ $0000(12 or 8)
0004 3C INR A(8)
0005 D398 OUT 98(8)
0007 C30000 JMP $0000(12)
(リスト22)OUT テストプログラム(2)
実行クロック数を計算します。
Bレジスタが256回インクリメント(+1)されるごとにAレジスタが+1されます。
Aレジスタが+1されるときのクロック数をまず求めます。
(8+12)×256−4+8+8+12=5144クロック
−4は256回に1回、Bレジスタが00になったときだけJNZ命令が8クロックになることによる補正です。
これが128回繰り返されるごとに10pフラットケーブルの6番からの出力が反転します。
5144×128=658432クロック
658432×0.5=329216μs
0.33秒ごとに10pフラットケーブルの6番に取り付けた赤LEDが点滅するのが確認できます。
AレジスタのLEDもインクリメントするのが観測できます。下位ビットは点滅が速いので(最下位ビットは2.5ms毎に点滅)、全点灯しているようにしか見えませんが、上位ビットは見分けが可能です。
最上位のビット7は10pフラットケーブルに取り付けた赤LEDも同じ周期で点滅することがわかりますが、点灯、消灯の状態は逆になっています。
AレジスタのLEDはビットが1のときに点灯するのに対し、10pフラットケーブルに取り付けた赤LEDは0のときに点灯するようになっているからです。
2009.9.29upload
2009.9.30一部修正&追記
前へ
次へ
ホームページトップへ戻る