40 pinセラミックパッケージのNSC800D-2。新しめの資料には-2というのがどのようなクロック周波数か記載されていないのだけど、実際はどうなのだろう。
NSC800の特徴はハードウエア面にあるので、ピン配置から説明していきます。
A8 1 40 VCC
A9 2 39 PS*
A10 3 38 WAIT*
A11 4 37 RESET OUT
A12 5 36 BREQ*
A13 6 35 BACK*
A14 7 34 IO/M*
A15 8 33 RESET IN*
CLK 9 32 RD*
XOUT 10 31 WR*
XIN 11 30 ALE
AD0 12 29 S0
AD1 13 28 RFSH*
AD2 14 27 S1
AD3 15 26 INTA*
AD4 16 25 INTR*
AD5 17 24 RSTC*
AD6 18 23 RSTB*
AD7 19 22 RSTA*
GND 20 21 NMI*
電源は+5 V単一で、2.5 MHzクロック動作のときに10 mAほどしか消費しません。n-MOS版のZ80
CPUや8085と比べれば1/10程度になっています。XINとXOUTは水晶発振子を接続してクロックを生成する端子です。実際のクロック周波数は水晶発振子の周波数が1/2に分周されたものになります。CLK端子はそのクロック信号の出力で、クロック信号を必要とする周辺LSIへの供給源となります。
アドレス下位はデータバスにマルチプレクスして出力され、そのタイミングを表すのがALE信号です。1970年代では、74HC373のような高速CMOSの8
bitラッチなどありませんでしたから、汎用CMOSロジックでラッチして専用の周辺以外を接続するには、速度的にも厳しかったでしょうね。まぁ、完全CMOSコンピュータを作ろうとしたら、CMOSのROMが特殊な時代でしたし。
RD*, WR*, WAIT*はバスの入出力タイミングを示す信号で、S0, S1, IO/M*はバスサイクルの識別状態信号です。S0,
S1を用いてバスバッファの方向制御やHALT状態検出ができるようになっています。このあたりは8085Aと同様の信号です。
BREQ*, BACK*はDMA用の信号で、RFSH*はダイナミックメモリのリフレッシュタイミングを表します。リフレッシュサイクルはZ80
CPUと同じくM1サイクル中に挿入され、リフレッシュアドレスはアドレス下位に出力されます。そのため、同時にALE信号も出力されています。リフレッシュアドレスが8
bitに拡張されている点がZ80 CPUと異なります。
RESET IN*とRESET OUTはリセット関係の信号で、RESET IN*はヒステリシス付き入力となっていて、コンデンサの充電を利用したパワーオンリセット回路を簡単に構成できるようになっています。RESET
OUT信号は周辺LSI用のリセット信号出力です。
PS*信号はPower Saveの略で、プロセッサの内部クロックを停止してプログラムの実行も中断し、消費電力を小さくすることができますが、クロック発振回路は動作していて、消費電流はせいぜい1/2にしかなりません。もっとも、バスアクセスが停止するわけですから、CMOSプロセスのメモリや入出力ポートを使用していれば、その周辺回路の消費電流はかなり小さくなることが期待できますけど。PS*信号は命令の切れ目でサンプリングされ、ALE信号が引き伸ばされるような状態でプロセッサを停止させます。
NMI*, RSTA*, RSTB*, RSTC*, INTR*, INTA*が割り込み関係の信号です。INTA*が割り込みアクノリッジ出力で、それ以外が割り込み要求信号です。8085Aの信号では、TRAP,
RST7.5, RST6.5, RST5.5, INTR, INTA*に相当します。しかし、正論理と負論理が異なりますし、NMI*の飛び先はTRAP割り込みと異なりZ80
CPU互換となっていますし、割り込みマスクの方法も異なります。次の表をご覧ください。
信号名 | アドレス | センス方式 | 対応する8085Aの割り込み |
NMI* | 66H | エッジ | TRAP, 24H, エッジ・レベル |
RSTA* | 3CH | レベル | RST7.5, 3CH, エッジ |
RSTB* | 34H | レベル | RST6.5, 34H, レベル |
RSTC* | 2CH | レベル | RST5.5, 2CH, レベル |
INTR* | -- | レベル | INTR, --, レベル |
INTR*については割り込みモードと割り込みアクノレッジサイクルの応答に依存して割り込みスタートアドレスが変化します。割り込みの優先順位は、この表で上に行くほど高くなっています。このように、NMI*はZ80
CPUと同じ動作で、8085Aとは微妙に異なっていたりします。
しかも、8085AではRST7.5, RST6.5, RST5.5の個別の割り込みマスクに関してはSIM命令で設定できましたが、Z80
CPUバイナリ互換のNSC800ではSIM命令を実行することはできません。そのため、I/Oアドレス空間の0BBHに割り込み制御レジスタICRを追加し、次のような形で個別の割り込みマスクを実現しています。
ビット | 名称 | 機能 |
0 | IEI | INTR*の割り込み許可ビット |
1 | IEC | RSTC*の割り込み許可ビット |
2 | IEB | RSTB*の割り込み許可ビット |
3 | IEA | RSTA*の割り込み許可ビット |
これらのビットは割り込み許可となっているように、1なら割り込みが許可され0なら禁止されます。また、当然ながらEI,
DI命令で設定されるIFFも1になっていなければ、NMI*以外の割り込みは生じません。ICRの各ビットは、リセット時にはIEIのみ1、残りは0に設定され、デフォルトでZ80
CPU互換となるようになっています。RSTA*, RSTB*, RSTC*割り込みを使用するには、必ずICRを適切に設定する必要があります。
ICRは書き込み専用のレジスタで内容を読み出すことはできず、OUT (0BBH),
A命令かCレジスタに0BBHを入れた上でのOUT (C), R命令でしか書き込みできません。I/Oブロック転送命令では影響をうけないようにされています。
このNSC800はNational Semiconductor社によると(http://www.national.com/company/pressroom/history80.html)、1981年に販売開始ということです。1979年頃ではなかったのか、それとも発売予定と実際の販売開始にかなり開きが出たのか、ちょっと自信がありません。1981年だとすると、沖電気のCMOS版8085と同時期ということになります。Z80
CPUピン互換のCMOSプロセッサよりは先んじていたことには間違いありませんが。
いずれにせよ、74シリーズ互換の高速CMOSロジックが一般化して普及する前で、CMOSのROMが特殊だった時代なので、電池動作のコンピュータを作るのは高くつく時代でした。ただ、発熱が少ないのは確かでZ80ファミリの周辺LSIを使わずに多数の割り込みを受け付けられて命令体系はZ80
CPU互換というのを活かして、環境条件が劣悪な工業用組み込み分野には使いやすかったかもしれません。
Return to IC Collection