あんたCPUなんか創ってどうするのよ?! Vol.1 第4章 第5節

~TD4とかいうCPUがあまりにも残念だったので拡張してみた~

2016/8/14
コミックマーケット C90 3日目 西g16b

第4章 第5節 キャリーフラグの変更抑制

キャリーフラグ(C)とは、加算の結果が溢れた事を示す信号です。TD4は4ビットCPUなので、加算結果が16以上になるとキャリーフラグが1になります。

このキャリーフラグの状態は条件ジャンプ命令で調べることができます。ただしTD4の場合、この条件ジャンプ命令は加算命令の直後に実行する必要があります。なぜならキャリーフラグの内容は加算命令以外でも更新されてしまうからです。

図5 キャリーフラグの変更抑制
図5 キャリーフラグの変更抑制

TD4は常に加算を行っていますのでキャリーフラグは常に更新されてしまいます。本来であればADD命令の時だけキャリーフラグを更新するべきなのですが、TD4では命令デコーダーを簡素化しているため、キャリーフラグを変更させない回路が存在しません。仕方ないと言えば仕方ないのですが、TD4EX2ではこれが大問題となります。

TD4EX2では条件ジャンプ命令が2バイト命令に変更されたため、命令の実行は2バイト目を読み込んだ後です。しかしキャリーフラグはクロックの立ち上がりで変更されるため、命令の1バイト目を読み込んだ時点で内容が変わってしまい、2バイト目を読み込んだ時点では正しい判断が出来ません。

そこでTD4EX2ではキャリーフラグを変更させない回路を追加しました。ジャンプ命令と条件ジャンプ命令の場合にはキャリーフラグは変更されません。