戻る

IM6100

Intersil IM6100
Data 12bit / Address Bus 12bit
Cycle 〜4MHz
(1975)

IM6100はIntersilが開発した「PDP-8」アーキテクチャの12bit CPUである。

姉妹型:「IM6100A」
最大10Vで動作可能で、その場合クロック周波数は最大8MHzである。

姉妹型:「IM6100C」
クロック周波数は最大3.3MHzである。

●IM6100のピン配列

Vcc1 40DATAF
RUN2 39INTGNT
DMAGNT3 38CPSEL
DMAREQ4 37MEMSEL
CPREQ5 36IFETCH
RUN/HLT6 35SKP
RESET7 34C2
INTREQ8 33C1
XTA9 32C0
LXMAR10 31SWSEL
WAIT11 30DEVSEL
XTB12 29LINK
XTC13 28DX11
CLOCK14 27DX10
CLOCK15 26Vss
DX016 25DX9
DX117 24DX8
DX218 23DX7
DX319 22DX6
DX420 21DX5

●IM6100の特徴

レジスタ名説明
AC→Accumlator
MQ→Multiplier Quotient (Temporary Register)
PC→Program Counter

レジスタは全て12bit幅である。
最上位bit(MSB)が0で、最下位bit(LSB)は11である。
(当時のミニコンで主流であったMSBとLSBが通常の逆である点に注意)

2種類の1bitフラグは以下のような構成になっている。

「L」 :Link (Carryなど演算時に使用)
「IE」:Interrupt Enable (割込制御)

メモリ空間は128wordを1ページとした4096word(32ページ)の空間で構成されている。

●IM6100の命令

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

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

●メモリ操作命令

01234567891011
Op CodeIAMPAdr offset

「Op」 :Mnemonic
「IA」 :Indirect Addressing bit (0:[D]irect/1:[I]ndirect)
「MP」 :Memory Page bit (0:[Z]ero/1:Current)
「adr」:Address offset

「MP」は「Z」(Zero)を指定した場合はゼロページ、省略した場合は現在のページを指定。

ニーモニックオペランド動作
AND{IA} [MP] adrアキュムレータの値とオペランドの値の論理積をアキュムレータに格納
TAD{IA} [MP] adrアキュムレータの値とオペランドの値を加算し、アキュムレータに格納
ISZ{IA} [MP] adrオペランドをインクリメント、結果が0なら「PC」をインクリメント(=スキップ)
DCA{IA} [MP] adrアキュムレータの値をオペランドに格納、0をアキュムレータに格納
JMS{IA} [MP] adr「PC」の値をオペランドに格納、「PC」にオペランドのアドレス+1を格納(=サブルーチンコール)
JMP{IA} [MP] adrオペランドのアドレスを「PC」に格納(=ジャンプ)

●内部レジスタ演算命令

01234567891011
Op CodeA-B

「A」 :Group bit A
「B」 :Group bit B

「A」「B」で命令グループを決定する。
その間にあるbitで演算方法などが指定される。
(グループ1は「B」の部分も使用する)

なお各グループに同じ動作をする命令があるが、どれを使っても結果は同じで吐き出される機械語が異なるだけである。

ABグループ
0-グループ1:アキュムレータと「L」フラグの操作
10グループ2:条件スキップ
11グループ3:アキュムレータと「MQ」レジスタの操作

●内部レジスタ演算命令 (グループ1)

01234567891011
Op Code0CLACLLCMACMLRAR/RTRRAL/RTLSELIAC

「CLA」:アキュムレータをクリア
「CLL」:「L」フラグをクリア
「CMA」:アキュムレータを反転
「CML」:「L」フラグを反転
「SEL」:「RAR/RTR」「RAL/RTL」を選択
(「RAR/RTR」「RAL/RTL」がともに0で「SEL」が1の場合は「BSW」となり、アキュムレータの上下位6bitを交換する)
「IAC」:アキュムレータをインクリメント

「RAR/RTR」:アキュムレータを右・左ローテート (間に「L」フラグを挟む)
「RAL/RTL」:アキュムレータを右・左ローテート (2bit分)

複数指定した場合には以下の通り、実行優先順位がある。

1:CLA,CLL
2:CMA,CML
3:IAC
4:RAR/RAL,RTR/RTL,BSW

これらを組み合わせた複合命令もある。

ニーモニック動作
NOP 何もしない (全て0を指定するので操作がない)
IAC アキュムレータをインクリメント
RAL アキュムレータを左ローテート
RTL アキュムレータを左ローテート (2bit)
RAR アキュムレータを右ローテート
RTR アキュムレータを右ローテート (2bit)
BSW アキュムレータの上下位6bitを交換
CML 「L」フラグを反転
CMA アキュムレータを反転
CIA 「アキュムレータを反転し、インクリメント
CLL 「L」フラグをクリア
CLL RAL「L」フラグをクリア、アキュムレータを左ローテート
CLL RTL「L」フラグをクリア、アキュムレータを左ローテート (2bit)
CLL RAR「L」フラグをクリア、アキュムレータを右ローテート
CLL RTR「L」フラグをクリア、アキュムレータを右ローテート (2bit)
STL 「L」フラグをセット (クリア&反転)
STA アキュムレータをセット (クリア&反転)
CLA アキュムレータをクリア
CLA IACアキュムレータをクリア&インクリメント
CLA CLLアキュムレータ、「L」フラグをクリア
GLK 「L」フラグをアキュムレータのLSBに転送 (「L」フラグはクリア)

●内部レジスタ演算命令 (グループ2)

01234567891011
Op Code1CLASMA/SPASZA/SNASNL/SZLSELOSRHLT0

「CLA」:アキュムレータをクリア
「SEL」:「SMA/SPA」「SZA/SNA」「SNL/SZL」を選択
「OSR」:スイッチレジスタの値とアキュムレータの値の論理和をアキュムレータに格納
「HLT」:プログラム実行を停止

「SMA/SPA」:アキュムレータの値が負/正ならスキップ
「SZA/SNA」:アキュムレータの値が0/0以外ならスキップ
「SNL/SZL」:「L」フラグの値が0/0以外ならスキップ

「OSR」のスイッチレジスタとはコンソールにある物理スイッチの状態を読み取るものである。
複数指定した場合には以下の通り、実行優先順位がある。

1:SMA,SZA,SNL/SPA,SNA,SZL
2:CLA
3:OSR,HLT

これらを組み合わせた複合命令もあるが、最大3つの条件を組み合わせたものもある。

ニーモニック動作
NOP 何もしない (全て0を指定するので操作がない)
HLT プログラム実行を停止
OSR スイッチレジスタの値とアキュムレータの値の論理和をアキュムレータに格納
SKP 無条件スキップ
SNL 「L」フラグの値が0以外ならスキップ
SZL 「L」フラグの値が0ならスキップ
SNA アキュムレータの値が0以外ならスキップ
SZA アキュムレータの値が0ならスキップ
SNA SNLアキュムレータの値か「L」フラグの値が0以外ならスキップ
SZA SZLアキュムレータの値か「L」フラグの値が0ならスキップ
SMA アキュムレータの値が負ならスキップ
SPA アキュムレータの値が正ならスキップ
SMA SNLアキュムレータの値が負か「L」フラグの値が0以外ならスキップ
SPA SZLアキュムレータの値が正かつ「L」フラグの値が0ならスキップ
SMA SZAアキュムレータの値が負かアキュムレータの値が0ならスキップ
SPA SNAアキュムレータの値が正かつアキュムレータの値が0以外ならスキップ
SMA SZA SNLアキュムレータの値が負かアキュムレータが0か「L」フラグの値が0以外ならスキップ
SPA SNA SZLアキュムレータの値が正かつアキュムレータの値が0以外かつ「L」フラグの値が0ならスキップ
CLA アキュムレータをクリア
LAS スイッチレジスタの値をアキュムレータに格納
SZA CLAアキュムレータの値が0ならスキップし、アキュムレータをクリア
SNA CLAアキュムレータの値が0以外ならスキップし、アキュムレータをクリア
SZA CLAアキュムレータの値が負ならスキップし、アキュムレータをクリア
SPA CLAアキュムレータの値が正ならスキップし、アキュムレータをクリア

●内部レジスタ演算命令 (グループ3)

01234567891011
Op Code1CLAMQA-MQL-1

「CLA」:アキュムレータをクリア
「MQA」:アキュムレータの値と「MQ」レジスタの値の論理和をアキュムレータに格納
「MQL」:「MQ」レジスタの値をアキュムレータに格納

複数指定した場合には以下の通り、実行優先順位がある。

1:CLA
2:MQA,MQL

これらを組み合わせた複合命令もある。

ニーモニック動作
NOP 何もしない (全て0を指定するので操作がない)
MQL 「MQ」レジスタの値をアキュムレータに格納
MQA アキュムレータの値と「MQ」レジスタの値の論理和をアキュムレータに格納
SWP アキュムレータと「MQ」レジスタの値を交換
CLA アキュムレータをクリア
CAM アキュムレータと「MQ」レジスタをクリア
ACL アキュムレータをクリアし、「MQ」レジスタの値をアキュムレータに格納
CLA SWPアキュムレータをクリアし、アキュムレータと「MQ」レジスタの値を交換

●入出力命令

01234567891011
Op Codedc

「d」:6bitデバイス選択コード(=I/Oアドレス)
「c」:3bit動作指定コード (ポート「C0,C1,C2」の状態)

C0C1C2説明
HHHアキュムレータの値を指定デバイスに出力
LHHアキュムレータの値を指定デバイスに出力し、アキュムレータをクリア
HLHアキュムレータの値と指定デバイスの値の論理和をアキュムレータに格納
LLH指定デバイスの値をアキュムレータに格納
-HL「PC」と指定デバイスの値を加算し、「PC」に格納(相対ジャンプ)
-LL指定デバイスの値を「PC」に格納(絶対ジャンプ)
ニーモニック動作
SKON 「IE」フラグが有効のとき、スキップ
ION 「IE」フラグ有効(割込許可)
IOF 「IE」フラグ無効(割込禁止)
SRQ 「INTREQ*」ポートがアサインされているとき、スキップ
GTF アキュムレータのbit0に「L」フラグ、bit2に外部割込状態、bit4に「IE」フラグを格納
RTF アキュムレータのbit0を「L」フラグ、bit2を外部割込状態、bit4を「IE」フラグを出力
SGT PDP-8/E互換性のための予約命令 (IM6100では無視される)
CAF アキュムレータ、「L」フラグ、IE」フラグをクリア

[TOPに戻る]