CPUを作るゲームで「CPUの創り方」のTD4を作ってみた
こんにちは、NANDBrainです。
今回は自分が大好きな「Turing Complete」というCPUを作るゲームのサンドボックスモードという自由に建造できる場所で、「CPUの創り方」という本で作る「TD4」というCPUを作ってみました。今回はそれについてやその感想、そしてTuring Completeの布教用の記事です。
TD4について
まず、TD4というCPUやCPUの創り方について軽く説明します。
CPUの創り方という本は4bitCPUを現実で、しかも自分で電子工作をして作る本らしいのですが、自分は電子工作をやったことが全く無いので、後で紹介するTuring CompleteのサンドボックスかMinecraftのレッドストーンで作ろうかなと思い購入しました。
そして気になるCPUの仕様です。(「CPUの創り方」の140ページから引用)
PCに使用されているCPU(ここでは米インテル社のPentium4)と比較してみます
汎用レジスタ 32bit*8 4bit*2
アドレス空間 32bit(4.3Gバイト)*2 4bit(16バイト)
プログラムカウンタ 32bit 4bit
(Pentium4ではEIP)
フラグレジスタ 32bit 4bit
算術演算 浮動小数点演算が可能 4bitの加算のみ
動作クロック 1.4GHz以上 3MHz程度
トランジスタ数 4200万以上 約1500(推定)
こんな感じですね。
ちなみにTD4というのは「Toriaezu Dousasurudakeno 4bitCPU」の略です。
Amazonページ(電子工作ができる人は買ってみてください、自分もそのうちやろうと思います)
CPUの創りかた | 渡波 郁 |本 | 通販 | Amazon
Turing Completeについて
そしてTuring Completeというゲームについて説明します。
Turing CompleteというゲームはPCのSteamで売っているゲームで、キャンペーンモードをやることで8bitCPUが作れる事になっています。
キャンペーンでは論理回路から始まり、計算やメモリを作ってコンピューターができたらアセンブリ言語でプログラミングをするいわゆるスルメゲーです。
そしてサンドボックスモードが充実しており、そのモードでサンドボックス専用のパーツを使いサーバーやTIS-100という別のアセンブラでプログラミングするゲームのCPUを再現している人もいます!
そして自分はサンドボックスモードでTD4を作ったわけです。
Steamストアページはこちらです。(ぜひ買ってください、おそらく低スペでも動きます)
Turing CompleteでのTD4
そしてTuring CompleteでのTD4です。
初心者なので少しごちゃごちゃしていますが、これがTuring Completeで自分が作ったTD4です。
少し部品が少ないですが、その理由はTuring Completeの機能として論理回路で自分で作った部品をいちいち置くのはミスをするかもしれないし大変なので、Functionみたいな感じで作ることができるんです!これは楽ですね!
部品ですが、一部の部品はCPUの創り方の図を元に使ったため著作権が怖いので公開はしません。ぜひ自分の目で確かめてみて下さい!
感想やこれからの目標
そして感想ですが、CPUについての知識が深まり、何よりかなり楽しかったです。
これからの目標としては現実でTD4を作ることや、Turing Completeをまだクリアしていないのでクリアをしたいですね。
それではありがとうございました。
今からプログラミング言語を学習するなら自分の考えはbrainf**kです。
こんにちは、NANDbrainです。
今回はもし自分が0からプログラミング言語を学ぶなら何にするかを考えようと思います!
自分のプログラミング歴は小学生ぐらいの頃scratchをやって、見下ろしゲームなどを作った後
pythonをやってその時は難しくて飽きてしまい、しばらく立った後ゆっくり解説を見て知ったbrainf**kという命令が8個しかない難解プログラミング言語をスタートしたらプログラミングにまた目覚めて、そこからコンピューターの仕組みに興味が出てきてTuring completeというCPUを作るゲームをやって現在は自作OSに挑戦中です。
そして本題の「今からプログラミング言語を学習するなら何を学ぶ?」の場合ですが、やはりBrainf**kかなぁと思います。
まず理由なのですが、Brainf**kは命令が8個しかない分プログラムがどう動くかをよく考える必要があり、さらにC言語で言うポインタを利用する言語なのでC言語のポインタを楽しく簡単に学べるんです!
ちなみに命令はこちらです
+:今選択している箱の数字(デフォルトでは0)を1増やす
- :今選択している箱の数字を1減らす
>:選択を右にする
<:選択を左にする
[: 選択している箱の値が0なら、対応する]にジャンプする。(これを使ってループを表現)
]:選択している箱の値が0でないなら対応する[にジャンプする。(これをループで使う)
,:プログラムを実行する人に入力してもらい、その文字を文字コードの数字にして箱に入れる。
.:箱の数字を文字コードに変換して文字として出力する。
すこしわからないところがあると思うので補足します。
例えば[と]でどうやってループを表現するの?というところですが、処理をわかりやすい画像にするとこんな感じです(scratch)
例えばBrainf**kで選択している数を0にするコードである「[-]」を
日本語にすると
あああ:
選択している箱を1減らす
もし 選択している箱が0でないなら「あああ:」に戻る
(0ならここは無視されてあああに戻らずに次のプログラムに進む)
って感じです。
そしてもう一つわからなそうな「文字コード」というものですが、簡単に言えば英数字などと一対一で対応している数字で、それの対応表は「ASCII 表」ででてくると思います(1から32までは謎で埋め尽くされていて自分はよく知らない)、よくわかってないので簡潔になってすみません。
そしてBrainf**kは難解プログラミング言語(esolang)というジャンルの言語で、四則演算ができるタイプのesolangには面白いものが多く、Brainf**k以外で自分が気になっていてまだやっていないのは「whitespace」というものがあります。これは公の場で言えますね!
Whitespaceはその名の通りtabとspaceと改行だけで命令を書くのでソースコードが通常は肉眼で見えない狂った言語なのですが、なんとデフォルトの命令で掛け算と割り算があります!やったね!
さらにスタックというコンピューターの奥の方にある普段は使わないものが使えるので低レイヤーの勉強にもなります!完璧!さらにbrainf**kと一緒でチューリング完全というものなので計算が全てできるらしいです!すごい!
いかがでしたか?esolangは面白そうですね!pythonよりはややこしいけど複雑ではないし楽しいのでぜひやってみてはどうでしょうか?
面白かったらbrainf**kやwhitespaceをやってみてください!さようなら!