CPU

4 bit CPU ver 0.3

2012年11月12日

新しい4 bit CPUの仕様が、ほぼ固まったと思う。

2012-11-12-registers.png

レジスタは4ビット。メモリーアドレスは、コードとデーターが共通で、12ビット。従って、12ビットのプログラムカウンタ(PC)を持つ。アキュムレーターはAレジスタの一つ。2つの汎用レジスタ、BとCがある。アドレスレジスタはHLからなる8ビットだが、上位4ビットは別途セグメントレジスタ(Sレジスタ)を介して設定する。フラグは、キャリーとゼロの2つ。スタックポインタは、とりあえず6ビットを用意するが、必要なら最長12ビットまで拡張する可能性はある。

命令はすべて8ビットであり、従って256種類の命令が存在する。特徴としては、条件ジャンプが無いこと。代わりに、フラグの値により次の命令をスキップする命令がある。また、CALL命令が無く、代わりにPCをスタックに保存する命令がある。従って、PCをスタックに保存した後にジャンプを行えば、CALL命令と同等になる。この仕様のため、リターン命令の実行後は命令が1つスキップされる。

使用可能な命令は次の通り。

2012-11-12-load.png

まず、ロード命令から。A, B, C, H, L, Sのそれぞれのレジスタ間とメモリー(HL)との間で4ビット値のロードが可能。なお、ソースとデスティネーションが同じの場合は、別の機能に割り当ててある。"PUSH PC"は、先に、CALLの代替命令で述べたとおり。"IF NC"などは、これも先に条件ジャンプの代替命令で述べたとおりである。

2012-11-12-pushpop.png

ロード命令のソースもしくはデスティネーションが111の場合を、PUSH/POPに割り当てた。

2012-11-12-incdec.png

インクリメント・デクリメント命令のレジスタ割り当ても、全く同様。111は、スタックポインタの操作に割り当てた。

2012-11-12-calcjump.png

リテラル値の代入はSレジスタのみで、他のレジスタへの代入もすべてこのレジスタを介して行う。演算命令は、B, C, 及びメモリーと、アキュムレーター(Aレジスタ)との間で行うことが出来る。

最後にジャンプ命令。7ビットのオペランドを伴い、全256種類の命令のうち半分の128を占めることになった。

現在、TK-80風のエミュレーターが、この4 bit CPUで動いている。モニタープログラムもこのCPU用に作成することが出来たので、まずまずの処理能力があることは証明済み。次のステップとしては、CPLDによるエミュレーションになるかと考えている。

自分用のメモとバックアップを兼ねて: ver 0.3のダウンロードはこちらから

コメント

コメントはありません

コメント送信