PIC (コントローラ)
SCENIX SXシリーズ - SCENIX(現在はUbicom)のCPUで、ミップス・テクノロジーズをスピンオフしたチームが開発した。PICとバイナリ互換で命令を4倍速にし、さらに50MHzや75MHzと高クロック化されている。PIC12相当のものとPIC16相当のものがある。
データメモリ空間は「レジスタファイル」と呼ばれ、アドレス0x00-0x7F(命令長12ビットコアの場合0x00-0x1F)をレジスタのような感覚で高速にアクセスできるようになっているが、この範囲を超えるアドレスはバンク切り替えでアクセスする必要があり、リニアなメモリアクセスに難がある。
GOTO、CALL命令のアドレス指定部が限られているため、一定サイズ以上のプログラムはページ切り替えを必要とする。 定数テーブルは作れないので(コード空間とデータ空間が分離されているハーバードアーキテクチャであり、ROMはすべてコード空間に存在するため)、リテラルをWレジスタに返すリターン命令 (RETLW) を並べて代用する。 一般的なCPUのようなジャンプ先を指定できる条件ジャンプ命令を持っておらず、あるのは「ビットテスト結果で次の命令をスキップ」するBTFSC, BTFSS命令だけである。
MPLABに統合するほかEclipseをベースとした独自のIDEで使用できる。出力可能な容量が制限された PICC Lite は無償で使用できる。
対象となるPICの種類(ビット数)および開発環境のオペレーティングシステムにより製品が分かれている。初期のバージョンは専用のIDEが付属していたが、最近のバージョンではMPLABに統合して使用するようになっている。
これらとGOTO命令等を組み合わせて条件分岐せざるを得ないため、直感的でないコーディングを強要される。 命令長12ビットコアは割り込み機構を持っていない。割り込み機構がある14ビットコアでも、割り込み時の自動コンテキスト保存は一切行われないためプログラムで対応する必要がある。 スタックは一般的なCPUのようにデータメモリ空間を使用するのではなく、RETURN系命令の戻り先を積むための専用メモリが用意されている(ハードウェアスタック)。段数は命令長12ビットコアでは2レベル・命令長14ビットコアでは8レベルと限られているのであまり深いネストはできない。 古い品種ではGPIO出力・入力共にPORTnレジスタを使用する。PORTnレジスタは読み込むとポートの入出力設定に関わらず常にピンの状態が読み込まれる。このためリードモディファイライトには注意が必要であったが、比較的新しい品種ではGPIO出力ラッチレジスタLATnが新設され、この問題に対応している。