あなたCPUなんか創ってどうするのかしら?! 第1章

~あんたCPUなんか創ってどうするのよ?! Vol.4~

2019/4/14
技術書典6
池袋サンシャインシティ 文化会館ビル2F 展示ホールD「う11」

第1章 TD4EX4のアーキテクチャ

この章ではTD4EX4がどのようなCPUなのかを解説します。

第1章 第1節 TD4EX4のレジスタ

TD4EX4はTD4と同様のレジスタを持ちます。プログラムカウンタは12ビットに拡張しましたが、アキュムレーターとして使用されるAレジスタとBレジスタは全く同じです。それら以外にはレジスタはありません。

キャリーフラグは存在しますがレジスタとして操作することは出来ません。

また、出力ポートが削除されていますが、これはレジスタではありませんので次節で説明します。

第1章 第1節 第1項 拡張されたプログラムカウンタ

プログラムカウンタを12ビットに拡張したのはプログラムエリア(ROM)を4KBに拡張するためです。元々のTD4のプログラムカウンタは4ビットなので、プログラムエリアは僅か16バイトしかなく、まともなプログラムは何ひとつ作れませんでした。そこで筆者は2016年発行の「あんたCPUなんか創ってどうするのよ?!」で可変長命令を導入し、ジャンプ命令(JMP命令とJNC命令)を2バイトに拡張したTD4EX2というCPUを作成しました。これにより4KBのプログラムエリアを実現しています。

あんたCPUなんか創ってどうするのよ?! Vol.1a 表紙
図2 あんたCPUなんか創って どうするのよ?!

この4KBというサイズは偶然決まったのですが、実はインテルの4004と同じサイズです。従って実用性のあるプログラムを作るには十分なサイズだと考えています。

第1章 第1節 第2項 TD4と同じ構成のアキュムレーター

いっぽうアキュムレーターであるAレジスタとBレジスタは意図的にTD4と全く同じにしています。理由は以下の3つです。

  • これを変えてしまうとTD4とは似ても似つかないCPUになってしまい、TD4の拡張とは言えなくなってしまう。
  • 筆者はモトローラのMC6809でアセンブラを学んだ人間なので、アキュムレーターが2個あるCPUは好きだし、慣れてもいる。
  • TD4EX4は非常に機能の少ないCPUなので、せめてアキュムレーターが2個ないとプログラミングが大変になりすぎる。特にループ処理で地獄を見る。

このあたりはCPU設計者の好みが出るところですね。もし本気でIC数の削減をするなら、アキュムレーターを1個に減らすだけでICを2個削減できますので、例えばZ80を好きな方ならアキュムレーターをAレジスタだけにするという選択肢もありですね。

第1章 第1節 第3項 2個のアキュムレーターを平等にする

アキュムレーターを2個にすると言うことは、その2個に同等の機能を持たせると言うことでもあります。せっかくの2個のアキュムレーターが機能的に全然違うとしたら、かなり使いにくくなるからです。

例えばAレジスタは加算ができるのに、減算はBレジスタでしか実行できないとしたら、目的に合わせていちいちアキュムレーターを使い分ける必要があり、プログラミングは酷く面倒になるでしょう。それだったらZ80のようにアキュムレーターを1個だけにする方がマシです。

TD4ではAレジスタとBレジスタはほぼ平等でしたが、OUT命令でAレジスタを使えないという違いがありました。この制限は些細なように見えて意外と重大で、ナイトライダーやラーメンタイマーなどのサンプルプログラムではBレジスタばかりを使う結果になりました。レジスタ間演算のできないTD4ではAレジスタは事実上いらない子でした。

TD4EX4では2つのレジスタは完全に平等なので、どちらを使っても処理ができます。TD4EX4全体から見るといささかオーバースペックのような気もしますが、これは筆者の好みという事でご容赦ください。