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

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第283回]



●ラーメンタイマー

本日は大晦日です。
何も出来ないままあっという間に過ぎてしまった1年でした。
この連載も途中でつい「トランジスタ技術」版CPU互換のHCMOS版CPU回路をつくるという脇道に入ってしまったため、本来のテーマでありますトランジスタ版CPUをつくるはずのところ、それも途中で止まったままとうとう年末を迎えることとなってしまいました。

実は「トランジスタ版CPU」の基礎編といいますか、入門用のロジック回路組立キットはもう半年も前に出来ています。
何年か前に作りましたMOSFETを使った組立キットのバイポーラトランジスタ版です。
そのときはCMOSロジック回路なので74HC00などと同等の回路の組立キットでした。
今回はバイポーラトランジスタ(おなじみの2SA1015、2SC1815)を使いますから、74LS00などに近い回路の組立キットです。
なぜ半年も前に出来ているのに発売をしないのか?といいますとひとえに私の見通しが甘かったせいなのです。
現在進行中の「トランジスタ技術」版CPU互換のHCMOS版CPU回路組立キットもじきに出来るだろうと考えて、それができたらその次に作るつもりのトランジスタ版4ビットCPUボード組立キットの予告とともに発売を開始しよう、などと思っていたのですが、じきにできるどころかとうとう年末になってしまいました。

いえこのところずっと連載しております「中日電工版」HCMOSIC版4ビットCPUボードも最終版(のつもりです)のプリント基板はできてきております。
最後にCFとZFのLEDとCLK表示LEDを追加したプリント基板です。
多分大丈夫だと思いますが一応は念のため実際に組み上げて動作確認をしてみなければなりません。
それがこのところ私的な用もあってやたら忙しくて手をつけることもできずに机の上に積んだままになっています。
それを仕上げるのが新年早々の初仕事になりそうです。
それが済んだらいよいよ発売開始ということになりそうです。
当然お話の流れとしまして、「中日電工版」HCMOSIC版4ビットCPUボード組立キットに続いて、そのトランジスタ版組立キットの製作に着手するつもりです。
そしてその先には当連載の本来のテーマでありますトランジスタ版8080CPU組立キットの完成という大目標が控えております。
来年こそはなんとか完成までもっていきたいと考えています。

さて、それで。
上に書きましたようにまずは出来てきております最終版のプリント基板に部品を組み付けて動作確認をしなければなりませんが、それはもう年内にはとてもできません。
来年年明けの作業ということになります。
ということは今年最後の本日、書くべき材料がありません。
以上書きましたような内容で締めくくってしまいまして、「それでは皆様よいお年を」と書いて終ってしまう、という手もないわけではありませんが、それじゃああまりに芸がありません。
何かもう少し「らしい」ことを書いて終りたい、と考えた結果思いついたのが今回のテーマです。

「CPUの創り方」(株式会社毎日コミュニケーションズ)という本があります。
表紙はちょっと…、書店でおじさんが手に取るのはちょいと恥ずかしいデザインなのですが、中身は結構まともです。
半導体やロジックICの初歩の初歩からていねいに解説をしながら、ついには実際に動作する4ビットCPUまで作り上げてしまうという内容になっています。
当連載の読者の方などから時折同書の内容に関連したご質問をいただいたりします。
「CPUを自作したい」という願望をお持ちの方のなかには本書をご購入された方もそこそこいらっしゃるのでは、と思います。
かくいう私も一冊持っております。
いえ、私の場合は自分で購入したのではありません。
ずっと以前から懇意にしていただいておりますお得意様から「記事の参考にどうぞ」ということでプレゼントしていただいたものです。

その中に記載されておりますサンプルプログラムに今回のテーマの「ラーメンタイマー」があります。
近日発売予定の「中日電工版」HCMOSIC版4ビットCPUボード組立キットをご購入いただいた方がひょっとして同書をお持ちだったりしましたら、そこで紹介されております「ラーメンタイマー」プログラムを「中日電工版」キットでも動かしてみたい、とお思いになるのでは、と考えました。
同じ4ビットCPUですから基本的な動作は近いのですけれど、もちろん命令コード(マシン語コード)は違いますし、一部回路の違いからもとのプログラムをそのまま移植しても期待通りに動いてはくれません。
同書のプログラムではハードウェアの制約から書けるプログラムの最長16バイトぎりぎりの長さになっています。
しかし「中日電工版」ではハードの違いから残念ながら16バイトを越えてしまいます。
そういうことも含めて、これは本年最後の記事にふさわしいのでは、と考えました。
そこでさっそく書き上げたのが下のプログラムです。

いつものように画面左側のプログラムを右側のMSDOSプロンプト画面で実行してRAMにプログラムを書き込みました。
そのあたりの操作については[第258回][第259回]で詳しく説明していますので参照してください。
また命令コードについては[第249回]を参照願います。


「ラーメンタイマー」はその名の通り、インスタントラーメンの茹で上がり時間の3分間を計測してLEDで知らせるプログラムです。
スタートするとOUTポートのLEDを
○●●●
の表示にします(○が消灯、●が点灯です)。
1分後に次の表示にします。
○●●○
2分後に次の表示にします。
○●○○
そして最後3分経ったら次の表示にして、そこでホルトします。
●○○○
前述書のプログラム動作では2分後のところがちょっと違っていますが、そこのところは上の説明の動作に変更しました。

一般にCPUのプログラムで1分という長さを作るのにはかなりの回数を繰り返すプログラムループが必要なのですが、同書ではそこのところを通常のCPUクロックで実行するのではなくて1命令を約1秒で実行する「スローモード」で実行しています。
別に同書の内容に合わせたわけではありませんが、たまたま「中日電工版」HCMOSIC版4ビットCPUボードでも「スローモード」では1命令を約1秒で実行します。
それは思わぬ好都合ですので、そのアイデアはそのままいただくこととして、「中日電工版」でも「スローモード」で実行することにしました。

プログラムの説明です。
「中日電工版」のプログラムが16バイトに納まらなかったのはアドレス01のLD A,0が必要なためです。
前述書の回路ではリセットするとレジスタが0クリアされますが、「中日電工版」はクリアしないため、Aレジスタの初期化が必要です。
Aレジスタを0クリアしたあとADD A,1を16回繰り返すと再びAレジスタの値が0になります。
そのとき上位桁への繰り上がりが生じるため前述書のプログラムではJNC命令を使っています。
ここは通常はJNZを使うところです。
前述書の命令にJNZがないので代わりにJNCを使っているものと思われます。
このプログラムの場合にはJNZでもJNCでも結果は同じになります。
ADD A,1とJNZの2命令で2秒、それを16回繰り返しますからかかる時間は約32秒です。
それを2回繰り返しますから合計64秒つまり約1分になります。

「中日電工版」のプログラムでは16バイトに納まりませんから最後のループの部分を次のバンク1にはみ出させています。
そのあたりのことについては[第273回]を参照願います。

さて、このあとは実際にプログラムを実行してみることになるのですが、本日は時間がありません。
途中ですが年をまたいでの説明となってしまいました。
この続きは来年新年早々に書くつもりの次回にいたします。

この一年拙文にお付き合いいただき有難うございました。
来年も引き続きご愛顧賜りますようお願い申し上げます。
皆様よいお年をお迎えください。

トランジスタでCPUをつくろう![第283回]
2020.12.31upload

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