戻る

F8 (F3850)

Fairchild F8 (F3850)
Data 8bit / Address Bus 8bit
Cycle 1MHz〜2MHz
(1975)

発展型:「Mostek 3870」
CPUである「3850」と「3851」PSU(Programing Storage Unit)を統合したモデル。

●F8のピン配列

PHI1 40RC
Write2 39XTAL X
Vdd3 38XTAL Y
Vgg4 37EXTRST
I/O 035 36I/O 04
DB36 35DB4
I/O 137 34I/O 14
I/O 128 33I/O 15
DB29 32DB5
I/O 0210 31I/O 05
I/O 0111 30I/O 06
DB112 29DB6
I/O 1113 28I/O 16
I/O 1014 27I/O 17
DB015 26DB7
I/O 0016 25I/O 07
ROMC017 24Vss
ROMC118 23INTREQ
ROMC219 22ICB
ROMC320 21ROMC4

●F8の特徴

米国Fairchild社が開発したCPU。
ファミリーネームは「F3850」であるため、こちらで呼ばれることもある。
同ファミリーのPSUである「3851」と組み合わせた最小限のシステム構成で構築できるのが特徴である。
このため、発売当初は組込用として最も利用されたCPUであった。
一般向けには1977年に発売された家庭用ゲームであるFairchild Channel Fなどに採用された。

データバスは8bitだが、内部では16bitで取り扱っている。
アドレスも同様である。

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

レジスタ
A8bit→Accumulator
U/L6bit→ISAR(Indirect Scratchpad Address Register)
W5bit→Status Register
DCn (n=0〜1)16bit→Data Counter
PC016bit→Program Counter
PC116bit→Stack Pointer

「PC1」は名称こそStack Pointerとなっているが、実際にはサブルーチンの復帰アドレスを保持するのみに使われており、これに対するPUSH/POP命令はない。
「DC0」はインデックスレジスタであり、直接アクセス可能だが、「DC1」は直接アクセスできないため、交換命令により値を交換して使う必要がある。

Status Register
0SSIGN符号フラグ
1CCARRYキャリーフラグ
2ZZEROゼロフラグ
3OOVERFLOWオーバーフローフラグ
4IICB割込制御フラグ (0:禁止/1:許可)

ほかに代用レジスタとして64個の8bit Scratchpad RAMが使われる。
このうち、最初の16個は「A〜J」「HU/HL,KU/KL,QU/QL」のラベルが割り振られており、2次アキュムレータとして利用可能。
残りは、「ISAR」を介してアクセス可能である。

●F8の命令

命令(ニーモニック)と1〜2個のオペランドという構成となっている。
オペランドがない場合もある。
アドレッシングモードはそれぞれのニーモニックの説明で解説する。

  ニーモニック [[DEST][,SRC]]

データの流れは「DEST」←「SRC」となる。

●アキュムレータ参照命令

ニーモニックオペランド動作
LRA,KUスクラッチパッド12の値をアキュムレータに転送
LRA,KLスクラッチパッド13の値をアキュムレータに転送
LRA,QUスクラッチパッド14の値をアキュムレータに転送
LRA,QLスクラッチパッド15の値をアキュムレータに転送
LRKU,Aアキュムレータの値をスクラッチパッド12に転送
LRKL,Aアキュムレータの値をスクラッチパッド13に転送
LRQU,Aアキュムレータの値をスクラッチパッド14に転送
LRQL,Aアキュムレータの値をスクラッチパッド15に転送
LRA,IS「ISAR」の値をアキュムレータに転送
LRIS,Aアキュムレータの値を「ISAR」に転送
LRA,r 指定スクラッチパッドの値をアキュムレータに転送
LRr,A アキュムレータの値を指定スクラッチパッドに転送
LM 「DC0」が示すアドレスの値をアキュムレータに転送
ST アキュムレータの値を「DC」に格納(ストア)
ASr 指定スクラッチパッドの値とアキュムレータの値を加算し、アキュムレータに転送
ASDr 指定スクラッチパッドの値とアキュムレータの値を加算(十進演算)し、アキュムレータに転送
NSr 指定スクラッチパッドの値とアキュムレータの値の論理積をアキュムレータに転送
XSr 指定スクラッチパッドの値とアキュムレータの値の排他的論理和をアキュムレータに転送

●レジスタ参照命令

ニーモニックオペランド動作
LRK,P 「PC1」上位の値をスクラッチパッド12、「PC1」下位の値をスクラッチパッド13に転送
LRP,K スクラッチパッド12の値を「PC1」上位、スクラッチパッド13の値を「PC1」下位に転送
PK [割込処理時無効] 「PC0」の値を「PC1」、スクラッチパッド12の値を「PC0」上位、スクラッチパッド13の値を「PC0」下位に転送
LRP0,Q[割込処理時無効] スクラッチパッド14の値を「PC0」上位、スクラッチパッド15の値を「PC0」下位に転送
LRH,DC「DC0」上位の値をスクラッチパッド10、「DC0」下位の値をスクラッチパッド11に転送
LRDC,Hスクラッチパッド10の値を「DC0」上位、スクラッチパッド11の値を「DC0」下位に転送
LRQ,DC「DC0」上位の値をスクラッチパッド14、「DC0」下位の値をスクラッチパッド15に転送
LRDC,Qスクラッチパッド14の値を「DC0」上位、スクラッチパッド15の値を「DC0」下位に転送
LRW,J [割込処理時無効] スクラッチパッド9の値をステータスレジスタに転送
LRJ,W ステータスレジスタの値をスクラッチパッド9に転送
XDC 「DC0」と「DC1」の値を交換
DSr 指定スクラッチパッドに$FFを加算 (デクリメント)

●シフト命令

ニーモニックオペランド動作
SR1 アキュムレータの値を1bit論理右シフト
SL1 アキュムレータの値を1bit論理左シフト
SR4 アキュムレータの値を4bit論理右シフト
SL4 アキュムレータの値を4bit論理左シフト

●算術・論理演算命令

ニーモニックオペランド動作
COM アキュムレータの値を補数変換
LNK アキュムレータの値と「C」フラグの値を加算し、アキュムレータに転送
LIaa 16bitイミディエイト値をアキュムレータに転送
NIaa 16bitイミディエイト値とアキュムレータの値の論理積をアキュムレータに転送
OIaa 16bitイミディエイト値とアキュムレータの値の論理和をアキュムレータに転送
OIaa 16bitイミディエイト値とアキュムレータの値の排他的論理和をアキュムレータに転送
AIaa 16bitイミディエイト値とアキュムレータの値を加算して、アキュムレータに転送
CIaa 16bitイミディエイト値とアキュムレータの値の補数に+1した値を加算して、アキュムレータに転送(減算)
AM アキュムレータの値と「DC0」が示すアドレスの値を加算したものアキュムレータに転送
「DC0」をインクリメント
AMD アキュムレータの値と「DC0」が示すアドレスの値を加算(十進演算)したものアキュムレータに転送
「DC0」をインクリメント
NM アキュムレータの値と「DC0」が示すアドレスの値の論理積をアキュムレータに転送
「DC0」をインクリメント
OM アキュムレータの値と「DC0」が示すアドレスの値の論理和をアキュムレータに転送
「DC0」をインクリメント
XM アキュムレータの値と「DC0」が示すアドレスの値の排他的論理和をアキュムレータに転送
「DC0」をインクリメント
CM アキュムレータの値と「DC0」が示すアドレスの値に+!する (演算結果をフラグに反映させる)
「DC0」をインクリメント
ADC アキュムレータの値と「DC」の値を加算し、アキュムレータに転送

●フラグ関連命令

ニーモニックオペランド動作
DI [割込禁止セット] 「ICB」フラグに0を格納(クリア)
EI [割込処理時無効] 「ICB」フラグに1を格納(セット)
LISUe 「ISAR」上位bitに3bitイミディエイト値を格納
LISLe 「ISAR」下位bitに3bitイミディエイト値を格納
BTe,ii第1オペランドの3bitイミディエイト値とステータスレジスタの論理和を取る。
結果が0の場合は「PC0」を+2する。
結果が0以外の場合は「PC0」の値に第2オペランドの8bitイミディエイト値と1を加算したものを「PC0」に転送する。

●プッシュ・ポップ命令

ニーモニックオペランド動作
PIiijj[割込処理時無効] オペランド上位8bitの値をアキュムレータに転送、「PC0」の値を+1したものを「PC1」に転送
オペランド下位8bitの値を「PC0」下位、アキュムレータの値を「PC0」上位に転送(プッシュ)
POP [割込処理時無効] 「PC1」の値を「PC0」に転送

●分岐命令

ニーモニックオペランド動作
JMPiijj[割込処理時無効] オペランド上位8bitの値をアキュムレータに転送
オペランド下位8bitの値を「PC0」下位、アキュムレータの値を「PC0」上位に転送
DCIiijj[割込処理時無効] オペランド上位8bitの値を「DC0」上位に転送
オペランド下位8bitの値を「DC0」下位に転送 (「PC0」をインクリメント)
BR7ii「ISAR」下位8bitの値が7の場合、「PC0」を+2
「ISAR」下位8bitの値が7以外の場合、8bitイミディエイト値と「PC0」の値に+1を加算し、「PC0」に転送
BRt,ii第1オペランドの5bitイミディエイト値とステータスレジスタの論理和を取る。
結果が0の場合は第2オペランドの8bitイミディエイト値と「PC0」の値に+1を加算し、「PC0」に転送。
結果が0以外の場合は「PC0」を+2。

●入出力命令

ニーモニックオペランド動作
INPP 8bit指定ポートの値をアキュムレータに転送(入力)
OUTPP [割込処理時無効] 8bit指定ポート番号をシステムバスに転送、アキュムレータの値をポートに転送(出力)
INS0|1 指定ポート(0 or 1)の値をアキュムレータに転送
INSn 指定ポート(4〜15)のアドレスをシステムバスに転送、指定ポート(4〜15)の値をアキュムレータに転送
OUTS0|1アキュムレータの値を指定ポート(0 or 1)に転送
OUTSn [割込処理時無効] 指定ポート(4〜15)のアドレスをシステムバスに転送

●その他命令

ニーモニックオペランド動作
NOP 何もしない
INTRPT [割込禁止セット/割込処理時無効] 割込処理アドレスを「PC0」下位、「PC0」下位を「PC1」に転送
割込処理アドレスを「PC0」上位に転送
RESET [割込禁止セット/割込処理時無効] 「PC0」に0をセット、「PC1」に「PC0」を転送

[TOPに戻る]