リレーコンピュータの進捗状況！

# この記事は
[自作CPU Advent Calendar 2024](https://qiita.com/advent-calendar/2024/make_cpu)の12月25日最終日の記事です。

# 現在の進捗状況
リレーコンピュータを作ってる青兎 久遠([@Kuon_Aoto](https://x.com/Kuon_Aoto))です。

私が制作しているリレーコンピュータですが、形になってきたので、現時点での進捗状況をまとめます。
製作し始めたのは4年ほど前になります。途中、作業進まなかった時期もありましたが、やっと形になってきました。
まずは、こちらをご覧ください。

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">おーー！できたーーー！<br>ちゃんとインクリメントしてるーー！！！<br>嬉しい〜〜〜！<a href="https://twitter.com/hashtag/%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#リレーコンピューター</a> <a href="https://t.co/E6rTqKl28N">pic.twitter.com/E6rTqKl28N</a></p>&mdash; 青兎 久遠@2日目西2い11a (@Kuon_Aoto) <a href="https://twitter.com/Kuon_Aoto/status/1851907923670179904?ref_src=twsrc%5Etfw">October 31, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

インクリメントする回路を組むことができました。
現状のブロック図にするとこのようになっています。

![無題のプレゼンテーション (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/98f53980-1960-c453-b26b-bc50cf9eb91e.png)

ALUの製作に2年、レジスタ基板に半年かかりました。


## ALUの実装
ALUの内容はO'Reillyから出ている[コンピュータシステムの理論と実装](https://www.oreilly.co.jp/books/9784873117126/)を参考にしています。

![ALUblock.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/679141ce-7aa2-4861-b47c-d1fa8f251046.jpeg)

これをリレーのみで組むとリレー132個必要になります。 内訳は以下の通りです。
全加算器：1bitあたり7個、7bit分計49個
半加算器：1bitあたり3個、1bit分計3個
論理積：1bitあたり1個、8bit分計8個
MUX：1bitあたり1個、48bit分計48個
NOT：1bitあたり1個、24bit分計24個

まず、一枚の基板にリレー42個載る汎用基板を作ました。

![ALU1board.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/e93bcd9c-6662-a895-3dbe-fd2a2816118c.jpeg)



プリント基板はリレーの端子とピンヘッダを一対一に結ぶデザインにし、回路はすべてラッピングにて構成することにしました。プリント基板の利点を最大限利用しようと思いこのような実装方法にしたのですが、想像よりはるかに大変でした。特にラッピングツールが手動のものしか売っていないため、手動で行いましたが時間がかかります。
これに2年かかってました…　それにリレーコンピュータにしては高機能すぎるんだと思います。

![ALU_looks.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/adc0b9a1-a748-ff8c-0870-f14cd69dd612.jpeg)

そして、基板間を繋ぐコネクタを16ピンを2つにしてしまったせいで、配線がごちゃごちゃになりました。もっと多くても良かった。
配線は以下の画像のように配線しています。同じ色のところを配線しています。


![ALU_haisen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/2c927632-7142-ed0d-75bb-dc04983f5b31.png)

## レジスタの実装

ALU同様汎用基板を作成し、そのほかはラッピングで実装することにしました。
通常、レジスタはD-FFを並べますが、リレーの使用数を削減したいので、マスター側を共通にし、レシーブ側を並べる設計にしています。

ALUの失敗を踏まえてレジスタ基板では、Dラッチは基板で配線しています。各Dラッチから基板間を繋ぐ端子までをラッピングで配線しています。そして、基板間を繋ぐ端子は40ピン×2載せました。

汎用レジスタはインテル8080に習いB、C、D、E、H、Lを搭載しています。この6個のレジスタに加え、フラグレジスタを縦に積むと画像のような大きさになります。高さは26cmです。

![IMG_2024-11-30-16-45-39-268 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/ddd762ba-79b5-1e37-a312-320422d8b219.jpeg)

MSTレジスタ（共通のマスタ側Dラッチ）とアキュムレータは外部との接続用ピンの数を多く使うため、この二つは汎用レジスタとは別で積んでいます。

![IMG_2024-12-24-02-35-27-331.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/9e1b11f5-f920-286c-2d18-ac91e474995f.jpeg)

## 最小構成での動作
ALUとレジスタができたということで、クロックを与えれば、レジスタに保持してある値をALUに入れ、ALUからの値をレジスタに保存するという動作をすることができるようになりました。ALUの演算機能として、インクリメントやデクリメントもあるので、インクリメントし続けたりすることができるようになりました。

画像右に見えているのがALU、画像真ん中のブレッドボード付近にあるリレー2つがクロック用、画像左側がアキュムレータとMSTレジスタです。
![incALU.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924791/9edd0386-1aea-c54e-4b47-8dfc37208486.png)


## 今後の展望
まずは、レジスタ選択するマルチプレクサを制作してこうと考えています。その後、PCまわり、命令デコーダまわりと進めていく予定です。
あと、何年かかるのでしょうか…
個人で作るリレーコンピューにしては高機能すぎたかもしれません…
でも、そこそこ役に立つコンピュータにしたいので、やる気が続く限り頑張ります！日々の進捗などは、[Twitter（現X）](https://x.com/Kuon_Aoto)もしくは[個人サイト](https://kuon-aoto.sakura.ne.jp/make_something/index.html)に投稿していきますので、よかったら見に来てください。
また、C105にて実機を展示する予定です。
ブースは2日目西2い11aでお待ちしています。

## ここまでの教訓

* ちゃんと設計してから作り始めよう
* リレー42個に対してコネクタ16ピン×2は少ない
* ラッピングはほどほどに
* 昔の偉大な人たちはすごい！!