タイトルが長いですが….
「CPUの創り方」に出ているTD4という4bit CPUのROM代わりに、TTLメモリーで作れないか? と思って試作した話です。
ちなみに、まだ4bit CPU TD4ボードは作ってません。(だめじゃん)
4bit CPU TD4とは
ご存じの方も多いと思いますが TD4とは、以下の「CPUの創り方」という書籍で紹介されているロジックICを駆使したCPUであります。
この本、表紙がちょっと萌え萌えですけど中身はたいへんしっかりした電子工作本となっておりまして、Amazonのレビューを読んでみていただけるとわかりますがデジタル回路の基礎、コンピューターCPUの基礎をたいそう分かりやすく解説してくている名著です。
この書籍で紹介されているのが、ロジック回路を組み合わせて組み上げるTD4というCPUです。”TD4″のキーワードでググっていただけると、様々な方が思い思いのかたちで実装していらっしゃいます。
TD4のROM
TD4のROM部分ですが、たとえばこちらの方が回路図も公開されていますけども、8P DIPスイッチ+ダイオードアレイで構成するかたちとなっています。
以下のリンク先の方は8Pジャンパピンとダイオードを並べておられます。画像の一部を引用させていただきます。
私の電子工作作品集〜161. CPUの創りかた TD4
ちなみに、TD4は4bit CPUでアドレスバスは4bit。つまり最大16バイト分のメモリーをアドレシングできます。16バイト分ということは16セットのDIPスイッチ(またはジャンパピン)+ダイオードの群れというわけです。
回路は単純ですので作るのは割と機械的にできそうですが、ここは電子的回路にしてみたい。ただ、いままでKZ80マイコンなどで使っていたフラッシュROMにすると256k bit(32kB)中16バイトしか使わないなんてことになっちゃうわけで、ちょいともったいないです。
プログラムコントローラー
わたしが中学、高校時代に愛読していた電子工作雑誌に誠文堂新光社の「初歩のラジオ」誌がありまして、その1978年7月号、8月号「プログラム・コントローラーの作り方」という松本悟さんの記事が出ていました。
この作例、当時ゲルマニウムトランジスタ・ラジオキットをつくっても、よく壊していた私が試作しても一発では動かず、友人に泣きついて直してもらったという悲しい過去がありますが….
ブロック図としては以下のような感じで、プログラムカウンター(SN74193)とメモリー(SN7489)を中心として、スイッチによるデータエントリー回路と、LEDや外部出力バッファの先にあるユニジャンクショントランジスタで構成された音程発生回路がセットとなっていました。
初歩のラジオの作例では4bitx16ステップの記憶回路でしたが、SN7489を2つ使えば8bit x 16ステップ(バイト)の記憶回路にできそうです。TD4のROM(記憶回路)に使えそうです。
TTLメモリー SN7489を使った回路
いまや入手性はだいぶ悪い標準TTLのメモリーSN7489ですが、データシートによると以下のようなフリップフロップの群れが内蔵されているようです。
いまどきのSRAMとは違ってデータの入力と出力が別端子になっているのと、出力がTTLっぽく負論理(論理値1はLレベル)となっています。
SN7489 DataSheet
SN7489x2個と、動作確認用にデータ/アドレスエントリー用のスイッチ、アドレスステップアップ/ダウン用のカウンタ(74193)、手動のクロック回路、アドレス・データの表示用LEDなどを装備してTD4で使える(はず)のROMっぽいメモリーボードの回路図を考えてみました。
将来的に外部からアドレスバスなどを接続したいので、74LS244で切り替えることにしました。4bitづつのトライステートバッファを排他で切り替えです。
ユニバーサル基板での試作と動作確認
いつもの秋月電子Bタイプユニバーサル基板で試作してみました。ギリギリ乗りそうな感じ。電源スイッチとかを忘れていたりして、若干キツキツな部分もありますが….
LEDが一つ点灯せず
試作して一発目の起動ではデータバスのLEDが1つ点灯しませんでした。テスターで電圧を測ったり、2つ搭載した7489メモリーを逆にしてみたり色々と試しました。
結局はLEDをVccにつなすでいる集合抵抗の端子にポリウレタン線でハンダ面で配線したところがありまして、どうもそこのはんだ付け不良でした。
やはりポリウレタン線は鬼門だ….
手動クロックが動作せず → 動作してもチャタリング
カウンターIC 74193へ供給するクロック発生用の手動クロック回路は、「CPUの創り方」本に出ていた回路を参考に作成しました。当初TTLの74LS14を使ってみたところスイッチを押してもパルスが出ませんでした。
書籍の回路を見直してみたら74HC14でして….ロジックICをLS14→HC14、LS244→HCT244へ変更して挿し直したところ無事パルスが出ました。
ただ、チャタリングがひどくてカウントが1プッシュで2つ、3つ進んでしまいます。ちょっと残念。配線間違ったかな….
外部クロックにNE555
こんなこともあろうかとw、クロックも外部供給できるように配線していたので外部端子のCLK端子に、みんな大好き NE555をつかった外部クロックをブレッドボードで作成して接続してみました。
こちらだとチャタリングの心配もなく、無事メモリーのアドレスをカウントアップして表示することができました。
上記の動画は、0番地から16番地まで8bit分のデータを保存した後に、NE555のカウンターで順次表示してみたものです。
無事データが保存できることが確認できましたので、今後 4bit CPU TD4をつくった暁にはROM代わりのメモリーボードとして活躍してくれるものと期待しているであります。
さて….そのうちTD4のCPU部分ができたらまた記事にします。
中学時代、初ラを見ながら自分のコンピューターを夢見つつプログラムコントローラーを作ったのですが、その回路にCPUが接続されるのは本当に楽しげです。
(まだできてないけど)
コメント
ZOB.clubさんのTD4EX4とかもすごいです。以下のスペックで電卓を実装しています。
ビット幅:4bit
命令形式:1命令1~2バイト (可変長)
プログラム記憶領域:4KB
データ記憶領域:最大16語 (1語4bit)
使用IC数:16個
オレンジピコショップさんで74HC181を、樫木総業さんで74HC182を入手できたので、いつか自分も作ってみたい。
enakajiさん、コメントありがとうございます。
すごい! プログラム記憶域に4kBもあったら何でもできそうですね。^^)
わたしも、だいぶ前にCPUボード用のICは買ってあって、大事にしまってあるのでw
そのうち作ってみたいと思ってます。
ロジックICは樫木総業さん、若松通商さんが色々と揃ってますよね。