CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

レジスタセット

昔、アセンブラでプログラムを書き始めたころCPUの汎用レジスタがもっとたくさんあればなぁなんて思ってた時期もありました。メモリにコピーしたりスタックに退避したりすればいいのはわかりますが、プログラミングをBASICから始めてしまうとコード上の変数のように自由に使いたくなってしまいます。ただそういうプログラムは得てしてズルズル冗長な記述になってしまうのですけど。

すこしアセンブラに慣れてくると今度は少ないレジスタを効率的に使いたくなります。たとえばモトローラMC680x0の汎用データレジスタDnは32ビット長ありますが8ビットBYTE演算、16ビットWORD演算ではそれより上位のビットは丸々切り捨てられてしまいます。これを分割してアクセスできれば8ビットレジスタが4倍になるのにもったいないなとか。

インテルi80x86アーキテクチャでは汎用16ビットレジスタAH/ALのように上位下位で分割ができます。これはちょっとうれしいですが、32ビットレジスタEAXの上位16ビットはやはり単独では扱えません

 

そこで今回のTLCS-900アーキテクチャですが、これはこんなケチな要求にも至れり尽くせりです。32ビットレジスタは4分割して8ビットづつ、2分割して16ビットづつ、32ビットのままいずれも単独でアクセスできます

 

汎用レジスタXWA、XBC、XDE、XHLと4本あり、さらにそれがバンク構造で4面あるので8ビットレジスタ換算では4×4×4で64本もあることになります

この他にZ80でもあったインデックスレジスタIX、IY(さらに追加でIZ)もありそれらも32ビットに拡張され8ビット分割もできるのでレジスタは使い放題です

かつてZ80に16ビットインデックスレジスタIX,IYを上位下位に分けてアクセスする隠し命令がある、なんて話題で盛り上がったこともありました・・今思うとなんとも貧乏くさい話です

レジスタセットはバンク切替という形になっていますがRAn(n=0..3)と添え字を付けて見かけ同時に存在するようにアクセスもできます

こうなると一時記憶はレジスタだけ、スタックを使わないようなプログラムを書けばRAMすら不要かもしれません。といっても内蔵RAMもちゃんとありますが。

 

これでハードも正常動作しているしアセンブラでの開発環境も整ったのですが応用が思いつきません。

ボード上のLチカで満足しちゃってます