戻る

MN1610 (L-16A)

Panafacom MN1610
Data 16bit / Address Bus 16bit
Cycle 2MHz〜4MHz
(1975)

MN1610はパナファコムから登場した日本初の16bitマイクロコンピュータシリーズ「L-16A」のCPUである。
1977年には一般向けにトレーニングキット「LKit-16」が販売された。
このCPUシリーズは、同社「C-xxx」やOEM製品であるナショナル「operate」などに採用された。

改良型:「MN1610A」
MN1610の4MHz動作タイプ。

後継型:「MN1613」
1981年に登場したMN1610の上位互換タイプ
クロック周波数は13.3MHzと大幅に高速化され、メモリ空間の拡張などにより演算速度の高速化を施した。

後継型:「MN1617」
MN1613をベースに浮動小数点対応などを施した。

●MN1610のピン配列

Vbg1 40WRT
BS152 39ADSD
BS143 38ISYC
BS134 37ADAK
BS125 36BSRQ
Vss6 35BSAV
BS117 34CP2
BS108 33CP1
BS099 32DTAK
BS0810 31DTSD
BS0711 30FSYC
BS0612 29IOP
BS0513 28RST
BS0414 27HALT
BS0315 26CSRQ
BS0216 25IRQ2
BS0117 24IRQ1
BS0018 23IRQ0
Vdd19 22MANU
Vgg20 21STRT

※Vbgは-3Vという珍しい電圧だが、殆ど使われない部分なので-5V電源から分圧するなどして供給可能

●MN1610の特徴

レジスタ名説明
Rn→Register (n=0〜4)
SP→Stack Pointer
STR→Status Register
IC→Instruction Counter (PC)

レジスタは全て16bit幅である。
汎用レジスタであるRnレジスタのうち、R3とR4はインデックスレジスタも兼ねている。

「STR」は以下のような構成になっている。

  bit7「M2」:割込マスク2
  bit6「M1」:割込マスク1
  bit5「M0」:割込マスク0
  bit4「-」 :未使用
  bit3「-」 :未使用
  bit2「V」 :オーバーフローフラグ
  bit1「-」 :未使用
  bit0「E」 :拡張レジスタ

拡張レジスタは16bit以上の演算を実現するためのものである。
bit8〜15は「Pk」(Program key)であり、ユーザが自由に使えるフラグとなっている。

●MN1610の命令

命令(ニーモニック)は以下の構成となっている。

  ニーモニック [OP1[,OP2[,OP3]]]

データの流れは命令によって異なる。
オペランド表記は以下の通りである。

「R」  :レジスタ
「Rd」 :レジスタ (DEST)
「Rs」 :レジスタ (SRC)

汎用レジスタR3,R4はX0,X1という表記も可能。
メモリ操作命令はR0〜4、X0〜1、SPを指定可能。
それ以外では更にSTRも指定可能。

「I2」 :2bitイミディエイト値
「I4」 :4bitイミディエイト値
「I8」 :8bitイミディエイト値
「EA」 :アドレッシングモード指定 (D:8bit unsingned/d:8bit signed)
  0 D        : ゼロページ直接
  1 (IC)+d   : 相対直接
  2 [D]      : ゼロページ間接
  3 [(IC)+d] : 相対間接
  4 (X0)+D   : 定数インデックス (X0)
  5 (X1)+D   : 定数インデックス (X1)
  6 (X0)+[D] : ゼロページ間接インデックス (X0)
  7 (X1)+[D] : ゼロページ間接インデックス (X1)
「EM」 :「E」レジスタに対する操作モード指定
  0    : 「E」レジスタ操作なし
  1 RE : 0を「E」レジスタに格納
  2 SE : 1を「E」レジスタに格納
  3 CE : 「E」レジスタの否定値を「E」レジスタに格納
「C」  :スキップ条件指定 (「Rd」←「Rd」op「Rs」の結果)
   0       : スキップなし (「C」記述なし)
   1 SKP   : 無条件スキップ
   2 M     : 結果が負ならスキップ
   3 PZ    : 結果が正または0ならスキップ
   4 Z|E   : 結果が0ならスキップ
   5 NZ|NE : 結果が0以外ならスキップ
   6 MZ    : 結果が負または0ならスキップ
   7 P     : 結果が正ならスキップ
   8 EZ    : 「E」レジスタが0ならスキップ
   9 ENZ   : 「E」レジスタが0以外ならスキップ
  10 OZ    : 「V」フラグが0ならスキップ
  11 ONZ   : 「V」フラグが0以外ならスキップ
  12 LMZ   : 結果が等しいか小なり(≦)ならスキップ
  13 LP    : 結果が大なり(>)ならスキップ
  14 LPZ   : 結果が等しいか大なり(≧)ならスキップ
  15 LM    : 結果が小なり(<)ならスキップ

●メモリ操作命令

ニーモニックオペランド動作
L R,EAレジスタに指定したアドレスから値を格納
ST R,EAレジスタから指定したアドレスに値を格納
IMSEA指定したアドレスの値をインクリメント、結果が0なら次の命令をスキップ
DMSEA指定したアドレスの値をデクリメント、結果が0なら次の命令をスキップ

●分岐命令

ニーモニックオペランド動作
B R,EA指定したアドレスの値に分岐
BALR,EA指定したアドレスの値に分岐 (LinkをStackに保存=サブルーチンコール)
RET サブルーチンから復帰

●算術演算命令

ニーモニックオペランド動作
A Rd,Rs[,C]「Rd」←「Rd」+「Rs」
S Rd,Rs[,C]「Rd」←「Rd」ー「Rs」

「E」レジスタ、「V」フラグに影響あり、「C」は全て使用可能。

●論理演算命令

ニーモニックオペランド動作
ANDRd,Rs[,C]「Rd」←「Rd」と「Rs」の論理積
OR Rd,Rs[,C]「Rd」←「Rd」と「Rs」の論理和
EORRd,Rs[,C]「Rd」←「Rd」と「Rs」の排他的論理和
CLRRnアセンブラマクロにより「EOR Rn,Rn」に変換される (0クリア)

「E」レジスタ、「V」フラグに影響なし。
「E」レジスタを使う条件は命令以前の結果が反映される。
また、大小比較は意味を持たない。

●比較命令

ニーモニックオペランド動作
C Rd,Rs[,C]「Rd」ー「Rs」の結果判定(=比較)
CB Rd,Rs[,C]「Rd」ー「Rs」の結果判定(下位8bit)

●移動命令

ニーモニックオペランド動作
MV Rd,Rs[,C]「Rd」←「Rs」
MVBRd,Rs[,C]「Rd」←「Rs」(下位8bit)

「MV Rn,Rn」とすれば一般的な「NOP」と同じことになる。

●スワップ命令

ニーモニックオペランド動作
BSWPRd,Rs[,C]「Rd」(上位8bit)←「Rs」(下位8bit)、「Rd」(下位8bit)←「Rs」(上位8bit)
DSWPRd,Rs[,C]「Rd」(bit0〜3/bit12〜15)←「Rs」(bit0〜3/bit12〜15)、「Rd」(bit8〜11/bit4〜7)←「Rs」(bit4〜7/bit8〜11)

●十進補正命令

ニーモニックオペランド動作
LADRd,Rs[,C]「Rd」←「Rd」+「Rs」を行い、Carryが発生した桁に6、それ以外には0を格納

●シフト(ローテート)命令

ニーモニックオペランド動作
SL Rn,EM[,C]左シフト
SR Rn,EM[,C]右シフト

EMでRE(1)を指定したら単純シフトと同等。
「SR」実行前に「E」レジスタの正負を判定してから、内容に応じてRE(1)かSE(2)を指定すれば算術右シフトと同等。

●ビット操作・定数加減算命令

ニーモニックオペランド動作
SBITRn,I4[,C]4bitイミディエイト値で指定したレジスタのbitを1、結果を判定する
RBITRn,I4[,C]4bitイミディエイト値で指定したレジスタのbitを0、結果を判定する
TBITRn,I4[,C]4bitイミディエイト値で指定したレジスタのbitを判定する
AI Rn,I4[,C]4bitイミディエイト値を指定レジスタに加算、結果を判定する
SI Rn,I4[,C]4bitイミディエイト値を指定レジスタから減算、結果を判定する

●定数格納命令

ニーモニックオペランド動作
MVI Rn,I88bitイミディエイト値を指定レジスタに格納

●入出力命令

ニーモニックオペランド動作
RD Rn,I88bitイミディエイト値で指定したI/Oアドレスの値を指定レジスタに格納(入力)
WT Rn,I8指定レジスタの値を8bitイミディエイト値で指定したI/Oアドレスに出力

●その他命令

ニーモニックオペランド動作
LPSWI22bitイミディエイト値で指定した割込レベルの割込から復帰
H プロセッサを停止状態に遷移
PUSHRnスタックにレジスタを保存
POP Rnスタックからレジスタを復元

「H」(halt)からの復帰は「STRT*」ポートからの信号入力で行われる。
なお、未定義命令は「H」命令とみなされる。


[TOPに戻る]