wire wrap用のピンを使い切ったので、またチマチマwire wrap用ICソケットをばらしてピンを製造中。
ところで、最終形も(頭の中で)固まってきたので仕様をまとめると、
・8bit アドレス
・8bit ALU
・10bit データバス
最小限のCPUを考えた時、4bitだと0-15までしか扱えないのに加え、アドレスが狭くて16行しかコードを書けない。最低限、電卓のようなものをソフトウェアで実装しようとすると、最低でも6bit(64行)は必要と考え、6bitCPUで設計しだしたが、基板の実装のかっこよさから結局8bitCPUにしたのである。
1bitCPU+マイクロコードというのも考えたが、CPU内のステップが多くなるので断念した。
実際、8bitあれば0-255か、負数を考えても二桁の計算はできるし、アドレスも増えて256行まで書ける。まぁ、SRAM1bitに1リレーとしても256*10と、個人としては天文学的なリレー数が必要になってしまうが・・・
考えているインストラクション(10bit、以下1word)
'01' + data(8bit) : data=>X register
'10' + data(8bit) : data=>Y register
'11' + address(8bit) : address=>PC(プログラムカウンタ)、つまりJMP
'00' + instruction(8bit) : 他の命令、例えばaddとか
'00' + '00000000' : NOP SRAMのアドレス範囲外を読んだとき、全部0になるだろうから
他は、計算結果が0なら次の命令をスキップ、Carryで次の命令をスキップを用意すれば、JMPと組み合わせて分岐が組め、最低限の命令セットが揃う。
ネット上で見つけた、似たようなアクティビティは、
MAD研究所のリレー電卓
http://www.fsinet.or.jp/~mad/
回路図はほとんど載ってないが、細かな話が非常に参考になった。
というかリレープロセッサをやろうと思ったきっかけ。SRAMを考えなければ、ワイヤードロジックよりCPU+ソフトウェアの方がリレーを削減できるかもと思った。
Kiの研究部屋のTD4互換リレーCPU
http://www.geocities.jp/team_zero_three/index.htm
実は昨日検索して知った。もし作り出す前に気づいたらどうしただろう・・・
ざっと読んでみたが、やはり先駆者はすごい。
レジスタのタイミングが問題になっているようで、非常に参考になる。
とりあえず、他はどうあれ、自分がやりたい、最低限の命令セットで最小限のリレー数で実現するプロセッサを目指すことにする。
6bitの時は、ざっと試算してリレー160個ぐらいで組めそうだった。8bitに変更したが、おそらく2割増程度だろう。ということはリレーたった200個で作れるのか?(SRAMは除いて) 4004のトランジスタ数が2300、8008が3500というからかなり効率的だ。