PC-E500 CPU
目次
レジスタ
レジスタには、A,BA,IL,I,X,Y,S,U,を指定でき、レジスタ毎にbit長が自動的に設定されます。
内部RAM
内部RAMのアドレッシングは、少し複雑です。
内部RAMアクセスの際には必ず直接アドレス指定を行うのですが、これでは配列などのデータ構造が作れません。そのため、内部RAM自体に内部RAMアドレスを修飾するレジスタが3本用意されています。
それぞれBP、PY、PXと呼ばれるレジスタで、BPはデータ転送元・先両方に使用できますが、PXは転送先のみ、PYは転送元のみにしか使用できません。このレジスタは内部RAMのアドレスEC、ED、EEの各番地に並んでいます。
結局、内部RAMを指定するのは以下の方法になります。直接アドレスがnの時、使える実効アドレスは
- (n)
- (BP+n)
- (PX+n)または(PY+n)
- (BP+PX)または(BP+PY)
(BP+PX)の時にはnは不要ですが、コード上は必要なため、適当な値を入れておきます。
これらの内部RAMアドレッシングの使い分けは、命令の前に1byteのプレコードを置くことによって行います(この方法はZ80に似ています)。
外部メモリ
最後に外部メモリ空間のアドレッシングですが、これが一番豊富なものとなっています。
先ほどのように内部RAMを指定するには(n)という書き方をするのですが、外部メモリのアドレスを[ ]で括って書かれます。アドレッシングは以下のようになります。
[lmn]
[r]
[r++]
[--r]
[r+n]
[r-n]
[(n)]
[(m)+n]
[(m)-n]
ここで、l,m,nの文字はそれぞれ8bitの値です。[lmn]は20bit直接指定ということです。
rは20bitレジスタで、[r++]は「レジスタの指すアドレスをアクセス後、rを増加」、[--r]は「減少後アクセス」です。また[r+n][r-n]は、レジスタの値にオフセットを加えます。
[(n)]は、内部メモリのnから3byteのデータをアドレスとして取り出し、そのアドレスにアクセスします。[(m)+n][(m)-n]は、さらにオフセットを加えます。
[r++]と[--r]だけは、rにSレジスタを使用できます。それ以外のレジスタ間接アドレッシングでは、Sレジスタは使用できません。このことはSがシステムスタックで、変更に危険がともなうための処置の様です。(使用できる命令は、スタックのPUSH POPに相当する)
SC62015の主な構造は以上です。実際の命令を1つも取り上げていませんが、命令群に関しては他のCPUと似たり寄ったりですので、ユニークな特徴を紹介することがねらいの本連載では取り上げませんでした。詳しく知りたい方は青木充さんの「ポケコン裏技大辞典」をご覧ください。