戻る

SC/MP

NS SC/MP
Data 8bit / Address Bus 12(16)bit
Cycle 1MHz
(1976)

発展型:「SC/MP II」
動作クロック4MHz(内部2MHz)にしたもの。

後継型:「SC/MP III」
アドレスバスが完全に16bitに対応。
内蔵ROMを持ったモデルもあり、Tiny BASICを搭載していた。

●SC/MPのピン配列

NWDS1 40Vgg
NRDS2 39NADS
ENIN3 38X2
ENOUT4 37X1
BREQ5 36AD11
NHOLD6 35AD10
NRST7 34AD09
CONT8 33AD08
DB79 32AD07
DB610 31AD06
DB511 30AD05
DB412 29AD04
DB313 28AD03
DB214 27AD02
DB115 26AD01
DB016 25AD00
SENSE A17 24SIN
SENSE B18 23SOUT
FLAG019 22FLAG2
Vss20 21FLAG1

●SC/MPの特徴

米国NS(National Semiconductor Corporation)が開発したCPU。
「SC/MP」とはSimple Cost-effective Micro Processorの略とされている。
(「スキャンプ」と読む)

データバスを解放して利用できるため、マルチプロセッサでの運用も比較的容易な設計である。
用途としては小規模な組込系製品をターゲットにしている。

レジスタセットは以下の構成となっている。

レジスタ
AC8bit→Accumulator
E 8bit→Extension Register
SR8bit→Status Register
Pn (n=0〜4)16bit→Pointer Register

EレジスタはACの補助として使われるが、シリアルI/Oとしても利用される。
SRレジスタはいわゆる「フラグ」であり、各bitは以下の用途・状態を示す。

Status Register
0F0Flag 0出力ポート用
1F1Flag 1出力ポート用
2F2Flag 2出力ポート用
3IEInterrupt Enable割込制御(0:禁止/1:許可)
4SASense A入力ポート用
5SBSense B入力ポート用
6OVOverflowオーバーフローフラグ
7CY/LCarry/Linkキャリーフラグ/リンクビット

PnレジスタはP0がPC(Program Counter)として使われる。
16bit幅だが、上位4bitはページアドレスとして使われており、アドレスとして使われるのは下位12bitである。

アドレッシングモードは以下の通りである。

アドレッシング説明オペランド表記
PC相対PC(P0)を使ったインデックスアドレッシングlabelxxx LABEL
インデックス指定したポイントレジスタに符号付き8bitディスプレースメントを加算したものdisp(ptr)xxx 12(POINTER)
イミディエート8bit直値constantxxx 16
オートインデックスインデックスの動作後に実効アドレスをポイントレジスタに格納@disp(ptr)xxx @-1(POINTER)

インデックスでディスプレースメントに-128が指定された場合はEレジスタの内容をポイントレジスタに加算してアドレスを計算する。
オートインデックスでは、値が正の場合は実行時のポイントレジスタが示すアドレスを参照し、その後ポイントレジスタをディスプレースメントの値を加算して書き換える。
負の場合にはアドレス計算を行った後にメモリの参照を行う。

●SC/MPの命令

命令(ニーモニック)とオペランドという構成となっている。
オペランドがない場合もある。
なお命令実行前にPCが+1されるので、実行前のPCが示すアドレスは実行されないことに注意。

  ニーモニック [オペランド]

●メモリ参照命令

ニーモニック動作
LD 実効アドレスの内容をACに格納
ST ACの内容を実効アドレスに格納
ANDACの内容と実効アドレスの内容の論理積を取り、結果をACに格納
OR ACの内容と実効アドレスの内容の論理和を取り、結果をACに格納
XORACの内容と実効アドレスの内容の排他的論理和を取り、結果をACに格納
ADDACの内容と実効アドレスの内容にキャリーフラグを加算し、結果をACに格納
CADACの内容と実効アドレスの内容の否定値にキャリーフラグを加算し、結果をACに格納
DADACの内容と実効アドレスの内容にキャリーフラグを加算し、結果をACに格納 (BCD[Binary-Coded Decimal]で計算)

一般的な減算命令はないが「CAD」実行前に「CY/L」フラグをセットしておけば実質減算命令になる。
「DAD」は二進化十進演算を行うため、非常に時間がかかる。
また、使用前は「CY/L」フラグをクリアしておく必要がある。

●メモリ参照(イミディエート)命令

ニーモニック動作
LDIイミディエート値をACに格納
ANIACの内容とイミディエート値の論理積を取り、結果をACに格納
ORIACの内容とイミディエート値の論理和を取り、結果をACに格納
XRIACの内容とイミディエート値の排他的論理和を取り、結果をACに格納
ADIACの内容とイミディエート値にキャリーフラグを加算し、結果をACに格納
CAIACの内容とイミディエート値の否定値にキャリーフラグを加算し、結果をACに格納
DAIACの内容とイミディエート値にキャリーフラグを加算し、結果をACに格納 (BCD[Binary-Coded Decimal]で計算)

●シフト・ローテート命令

ニーモニック動作
SIOACの内容を右シフトし、最上位bit(MSB)にSIN端子の値、押し出された最下位bit(LSB)の値をSOUT端子に出力する (シリアル入出力)
SR ACの内容を単純右シフト (LSBは保持されない)
SRLACの内容を右リンクシフト (MSBに「CY/L」フラグの内容が入り、LSBは保持されない)
RR ACの内容を単純右ローテート (LSBの値がMSBに入る)
RRLACの内容を右リンクローテート (MSBに「CY/L」フラグの値が、LSBの値が「CY/L」フラグに入る)

●インクリメント・デクリメント命令

ニーモニック動作
ILD実効アドレスの内容をインクリメントし、結果をACにも格納
DLD実効アドレスの内容をデクリメントし、結果をACにも格納

●分岐命令

ニーモニック動作
JMP実効アドレス値をPCに転送
JP ACの内容が0以上なら、実効アドレス値をPCに転送
JZ ACの内容が0なら、実効アドレス値をPCに転送
JNZACの内容が0以外なら、実効アドレス値をPCに転送

●Eレジスタ関連命令

ニーモニック動作
LDEEレジスタの内容をACに格納
XAEEレジスタの内容とACの内容を交換
ANEEレジスタの内容とACの内容の論理積を取り、結果をACに格納
OREEレジスタの内容とACの内容の論理和を取り、結果をACに格納
XREEレジスタの内容とACの内容の排他的論理和を取り、結果をACに格納
ADEEレジスタの内容とACの内容にキャリーフラグを加算し、結果をACに格納
CAEEレジスタの内容の否定値とACの内容にキャリーフラグを加算し、結果をACに格納
DAEEレジスタの内容とACの内容にキャリーフラグを加算し、結果をACに格納 (BCD[Binary-Coded Decimal]で計算)

●ポインタレジスタ関連命令

ニーモニック動作
XPALポインタレジスタの下位8bitとACの内容を交換
XPAHポインタレジスタの上位8bitとACの内容を交換
XPPCポインタレジスタの内容とPCの内容を交換

「XPPC」はサブルーチン分岐に使う。
実行前に使用するポインタレジスタにサブルーチン先頭アドレス(-1したもの)を格納しておく。
(フェッチ前にPCが+1されるため)
復帰時は再度「XPPC」を実行すれば、実行前のアドレスに復帰できる。
この仕様のためサブルーチン内でサブルーチンを呼び出す場合は、元のアドレスが格納されているポインタレジスタの内容をメモリ上に退避させる必要があるので処理が複雑になる。

●その他の命令

ニーモニック動作
HALTHALT端子にHパルスを出力 (CPU停止命令ではない)
NOP 何もしない
CCL 「CY/L」フラグに0を格納 (クリア)
SCL 「CY/L」フラグに1を格納 (セット)
IEN 「IE」フラグに1を格納
DINT「IE」フラグに0を格納
CSA ACにSRの内容を格納
CAS SRにACの内容を格納
DLY 時間待ちを行う

「HALT」をCPU停止命令として使用するためにはCPUのHALT端子を監視し、Hパルスを受信したらCONT端子を制御する回路を用意する必要がある。
そのため「HALT」端子の信号を別用途に使用することも可能である。
なお「HALT」のコードが「00」であり、「NOP」が「08」であることから、回路を接続せずに「NOP」として使用する運用もある。
「DLY」は自身のサイクル13にACの値×2+ディスプレースメント値×514分のサイクル待ち(13〜131593)を行う。


[TOPに戻る]