究極の8bit CPUを考える

モトローラのMC6809のことを「究極の8bit」と最初に呼んだのは月刊ASCII誌1980年10月号の特集「究極の8bitマイクロプロセッサ MC6809」だと思う。特集では、1980年5月に発表されたベーシックマスターレベル3(6809搭載の8bit機)、ハード・ソフトウェアアーキテクチャー、自作コンピュータ記事が掲載された。翌1981年5月に6809を2つ搭載した富士通FM-8が発表され、1984年には書籍も出版された。

当時高校生だった私はすっかり感化されてしまって大学に入学してすぐにFM-8を買ったものだ(そしたら直後にFM-7が出て大ショックであったが、それはさておき)。

6809はアセンブラでプログラミングするには便利なCPUで、6800にあった欠点(IXレジスタが1本しかない、16bit演算ができない)が解消された良いCPUだと思ったし、今もそう思っている。

ただ、現代の目からすると「なんとかならなかったか」と思う面はあって、本当に究極だったのか?と思ったりもする。

MC6809

MC6309

1982年に日立から出た6809互換CPU。6809に比べて様々な強化が行われている。

それは8bit CPUなのだろうか

6809も複雑な命令では命令長が長くなる。インデックスレジスタとしてY/U/Sを使うとプリバイトが付くし、複雑なアドレッシングではポストバイトが付く。(5バイトが最長だっけ?覚えてない)。 6309の新設命令ではさらにプリバイトが1バイト付く。x86の進化を見ているようだ。

8bit CPUなので命令長はなるべく1バイトにして欲しいし、2バイトのアドレス付けて3バイトが上限だと思う。

Analysis of the M6809 instruction set | Proceedings of the May 16-19, 1983, national computer conferenceによると、平均命令長は以下の通り。意外に短い?

|Class Average|Size |Numeric|2.16 bytes |Monitor|2.27 bytes |Compiler|2.30 bytes |Application|2.40 bytes |Compiled|2.43 bytes |All|2.35 bytes

命令bit数が足りない

命令長が8bitしかないのが厄介。レジスタ数は4個では足りないので仮に8個にすると、レジスタ指定に3bitを消費する。レジスタレジスタ転送を1命令に納めると、これだけで6bit使ってしまい、命令に残す余地が2bitしかない。6809ではレジスタ転送命令は2バイト(TFR+ポストバイト)になっているし、6309のTFRはポストバイトを使い切ってしまっている。

8080は8bitレジスタ8個(Mもレジスタと見なす)で、レジスタ間転送のMOV命令で命令セットの1/4(64個分)を消費している。2レジスタ命令は転送命令だけであり、他の命令は暗黙のうちにレジスタ指定が行われている。

いまどきのCPUっぽくレジスタレジスタ演算をメインにしようとすると、とにかく命令ビット数が足りない。それなら16bit CPUにした方が素直で良さそうである(H8みたいに)。

RISC-Vのように、16bit命令を標準にして、使用頻度の高い命令/レジスタは短縮命令を用意するのが良いのか?(それ、ポストバイトの逆だな)。

オペコード空間

RISC/CISC

同様のことを考えている人