めくるめくギリギリCPUの世界

追記 : ↓のmcpuがネタ元にしているmprozは拡張され、SCSIインターフェースやビデオ出力、マルチタスクOSさえ備えたxprozになっている。http://www.bitlib.de/pub/xproz/ 詳細はドイツ語PDFしかないが、アーキテクチャは英語txtで読める。

世間には、MISC - Minimal Instruction Set Computerと呼ばれるジャンルのCPUが有る。RISCのRはReducedなので、Minimalというくらいならどれくらい少いのか。
まず、OISC - One Instruction Set Computerが有る。

コンピュータを構成するための条件として"チューリング完全"が有名だが、OISCとして考えられているコンピュータは1つの命令だけでそれを達成する。
wikipediaのエントリではsubleqのような命令が紹介されている。この手の命令は必ず"ある演算をして、フラグを見て分岐"という命令になっている。
あのMorphy Oneも、MOVE命令しか無いCPUをデザインしている(sayuri)。これはTransport triggered architectureに分類される。つまり、ある特殊なメモリ番地に書き込むと加算された結果が別の番地に表れるといった細工をバスに対して行う。
実用的、少なくとも、何らかのアプリケーションが存在するMISCはスタックマシンの独壇場だろう。純粋なスタックマシンはレジスタに関連する命令を持つ必要が無いので、命令数を削減できる。
Transputerは命令長1byteかつ命令フィールドが4bitなので、16の基本命令しかない。基本命令の一つがOPR命令で、これによって命令を拡張している。(このチップをデザインしたDavid Mayは今でもブレていないのがカッコイイ。http://www.cs.bris.ac.uk/~dave/index.html )
Forth言語をデザインしたChuck Mooreもブレずにスタックマシンを作り続けている。彼のArray Forthシリーズは、Transputerのようにチャネルを通した通信をサポートしているが、それでも基本語彙は30ちょっとしかない( http://greenarraychips.com/home/documents/bee/g144poster.A1.pdf )。
正統派(?)のMISCとしては、mcpu( http://read.pudn.com/downloads42/sourcecode/embed/145720/mcpu-doc.pdf )が有る。これはNOR / ADD / JMPC / STOREのたった4命令しか持たない。

NOR / ADD / JMPC / STOREが最強か?

興味深いのは、本当にこの4つの組合せが最強なのかという点だろう。(実際には、この4つは回路サイズを小さくするために選択されている。。例えば、ADDの代わりにMUL のような選択肢は無い。)
まず、NORをANDやORに代えるのはあまり良いアイデアでないことが分かる。ANDやORではNOTを作れない(see "素演算系"(functional completeness)。NOTは引き算の実行に必要になる。
また、NORをSUBのような演算に代えてしまうと、ANDやORのような論理演算が難しくなる。
ADDをADDC(キャリーつき加算)にするべきかどうかは絶妙な問題になる。キャリをクリアするのは非常に簡単だが、現状のADDのままでは、キャリ付き加算をするたびに分岐が必要になってしまう。(実際、世間には6502のようにキャリー付き加減算しかないISAも存在する)
もちろん、この4命令をもってしても、現実的なプログラムを作るのはあまり簡単でない。では、命令フィールドを1bit増やして、8命令使えるとしたら。。