Next: 命令コード一覧, Previous: Top, Up: Top

## 1 SimpleProcessorとは

SimpleProcessorは，単純なRISCプロセッサのシミュレータである． 四則演算や論理演算，メモリアクセス命令をもつ． また内部にスタックを持ちpop/push命令を使用できる．

### 1.1 概要

SimpleProcessorは，

- ExecutableElement
- ChannelConnectable
- DataBuffer

を実装するクラスである．

#### 1.1.1 レジスタ構成

SimpleProcessorは，16bit幅のレジスタを32個持っている．レジスタの構成は，次の通り．

`r0〜r28`
  汎用レジスタ
`r29`
  内部のスタックのアドレスを保持するスタックポインタ
`r30`
  LDA，STA命令の基点となるアドレスを保持するフレームポインタ
`r31`
  プログラムカウンタ

レジスタは，全てユーザプログラムから自由に操作することができる．

#### 1.1.2 基本動作

- リセット状態でSimpleProcessorはプログラムカウンタが0にセットされる．
- exec_firstでプロセッサ命令を実行する．

### 1.2 設定ファイル

SimpleProcessorには，プログラム用の内部メモリの大きさおよび，接続するChannelを設定することができる． 最も簡単なSimpleProcessorの構成は次のようになる．

         <element id="proc0" class="net.wasamon.mics.SimpleProcessor" memory="2048"/>

他のデバイスと接続するためのチャネルは，そのアクセスするメモリ番地のoffsetを指定して設定することができる．たとえばChannel，bus0とbus1に2048ずつオフセットをずらして接続する場合には，次のような設定になる．

         <element id="proc0" class="net.wasamon.mics.SimpleProcessor" memory="2048">
           <channel id="bus0" offset="2048"/>
           <channel id="bus1" offset="4096"/>

ここで，Channelは接続先のDataBufferの大きさについての保証をしない．つまり，bus0の先に接続しているDataBufferの大きさが，2048に満たない，たとえば1024で場合，SimpleProcessorから，3072から4095番地にアクセスした場合，それは不正なメモリアクセエス例外を発生する．また逆にbus0の先のDataBufferのサイズが2048を越える場合，bus1へのアクセスエリアとの重なりが生じる．この場合，SimpleProcessorでは，より大きいoffsetで指定した方，つまりbus1へのアクセスとする．