IM6100
|
Intersil IM6100 Data 12bit / Address Bus 12bit Cycle 〜4MHz (1975) |
IM6100はIntersilが開発した「PDP-8」アーキテクチャの12bit CPUである。
姉妹型:「IM6100A」
最大10Vで動作可能で、その場合クロック周波数は最大8MHzである。
姉妹型:「IM6100C」
クロック周波数は最大3.3MHzである。
●IM6100のピン配列
| Vcc | 1 | 40 | DATAF | |
| RUN | 2 | 39 | INTGNT | |
| DMAGNT | 3 | 38 | CPSEL | |
| DMAREQ | 4 | 37 | MEMSEL | |
| CPREQ | 5 | 36 | IFETCH | |
| RUN/HLT | 6 | 35 | SKP | |
| RESET | 7 | 34 | C2 | |
| INTREQ | 8 | 33 | C1 | |
| XTA | 9 | 32 | C0 | |
| LXMAR | 10 | 31 | SWSEL | |
| WAIT | 11 | 30 | DEVSEL | |
| XTB | 12 | 29 | LINK | |
| XTC | 13 | 28 | DX11 | |
| CLOCK | 14 | 27 | DX10 | |
| CLOCK | 15 | 26 | Vss | |
| DX0 | 16 | 25 | DX9 | |
| DX1 | 17 | 24 | DX8 | |
| DX2 | 18 | 23 | DX7 | |
| DX3 | 19 | 22 | DX6 | |
| DX4 | 20 | 21 | DX5 |
●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]]]
●メモリ操作命令
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Op Code | IA | MP | Adr 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」に格納(=ジャンプ) |
●内部レジスタ演算命令
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Op Code | A | - | B | ||||||||
※「A」 :Group bit A
※「B」 :Group bit B
「A」「B」で命令グループを決定する。
その間にあるbitで演算方法などが指定される。
(グループ1は「B」の部分も使用する)
なお各グループに同じ動作をする命令があるが、どれを使っても結果は同じで吐き出される機械語が異なるだけである。
| A | B | グループ |
|---|---|---|
| 0 | - | グループ1:アキュムレータと「L」フラグの操作 |
| 1 | 0 | グループ2:条件スキップ |
| 1 | 1 | グループ3:アキュムレータと「MQ」レジスタの操作 |
●内部レジスタ演算命令 (グループ1)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Op Code | 0 | CLA | CLL | CMA | CML | RAR/RTR | RAL/RTL | SEL | IAC | ||
※「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)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Op Code | 1 | CLA | SMA/SPA | SZA/SNA | SNL/SZL | SEL | OSR | HLT | 0 | ||
※「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)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Op Code | 1 | CLA | MQA | - | 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」レジスタの値を交換 |
●入出力命令
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Op Code | d | c | |||||||||
※「d」:6bitデバイス選択コード(=I/Oアドレス)
※「c」:3bit動作指定コード (ポート「C0,C1,C2」の状態)
| C0 | C1 | C2 | 説明 |
|---|---|---|---|
| H | H | H | アキュムレータの値を指定デバイスに出力 |
| L | H | H | アキュムレータの値を指定デバイスに出力し、アキュムレータをクリア |
| H | L | H | アキュムレータの値と指定デバイスの値の論理和をアキュムレータに格納 |
| L | L | H | 指定デバイスの値をアキュムレータに格納 |
| - | H | L | 「PC」と指定デバイスの値を加算し、「PC」に格納(相対ジャンプ) |
| - | L | L | 指定デバイスの値を「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」フラグをクリア |