28 ピン プラスチック DIP の National Semiconductor COP420。日付コードは 1982 年後半。 | |
| 一般情報 | |
|---|---|
| 発売 | 1977年 |
| 共通メーカー | |
| パフォーマンス | |
| 最大CPU クロックレート | 250 KHzまで |
| データ幅 | 4 (RAM)、8 (ROM) |
| アドレス幅 | 7 (RAM)、11 (ROM) |
| アーキテクチャと分類 | |
| 応用 | 埋め込み |
| 命令セット | COP400 |
| 命令数 | 40 |
| 物理的仕様 | |
| パッケージ |
|
| 歴史 | |
| 前任者 | MM5799 (PMOS COP) |
| 後継 | COP8 |
COP400または COP II は、ナショナル セミコンダクターが 1977 年に同社のオリジナルの PMOS COP マイクロコントローラの後継製品として発表した 4 ビット マイクロコントローラ ファミリです。[ 1 ] COP400ファミリのメンバーは、専用コントローラを実装するために必要な内部タイミング、ロジック、ROM、RAM、および I/O を含む完全なマイクロコンピュータです。[2]一部の COP400 デバイスは、ウエスタン デジタルによってWD4200 ファミリとしてセカンド ソース化されました。 [3] [4]ソビエト連邦では、いくつかの COP400 マイクロコントローラが 1820 シリーズとして製造されました (例: КР1820ВЕ1という名称の COP402 )。[5]
COP400 は、 CMOSまたはN チャネル シリコン ゲートMOS テクノロジで実装されています。通常は 24 ピンまたは 28 ピンのDIPパッケージにパッケージ化されています。より高速なファミリ メンバーの命令サイクル時間は 4 マイクロ秒です。COP400 ファミリでは、複数のメモリおよびピン配置構成が提供されています。
COP400 ファミリー チップを使用した著名な製品には、Apple Lisa、Milton BradleyおよびMattel の電子ゲーム、Coleco Head to Head Basketball、Grundy Newbrainなどがあります。
メモリ
COP400 は、ROMとRAMに別々のメモリ空間を使用します。ROM アドレスは最大 11 ビット、データ アドレスは最大 7 ビットです。

ロム
プログラム メモリは、512、1024、または 2048 × 8 ビットの ROM で構成されます。ROMバイトは、プログラム命令、プログラム データ、またはジャンプ アドレス ポインターです。JP 命令と JSRP 命令に関連する特殊な特性のため、ROM は、多くの場合、64 バイトのページに編成されていると考えなければなりません。また、LQID 命令と JID 命令によって実行される独自の操作のため、ROM ページは、256 バイトのブロックに編成されていると考えなければならない場合もあります。
ラム
データ メモリは、16 個の 4 ビット桁のデータ レジスタが複数個編成された 32、64、または 128 × 4 ビット RAM で構成されます。RAM のアドレス指定は、ポインターとして使用される 6 ビットまたは 7 ビットの B レジスタによって実装されます。B レジスタの上位 2 ビットまたは 3 ビット (Br) は、4 個または 8 個のデータ レジスタの 1 つを選択し、下位 4 ビット (Bd) は、選択されたデータ レジスタの 16 個の 4 ビット桁の 1 つを選択します。B レジスタが指す RAM 桁の 4 ビットの内容は、通常、A レジスタにロード、交換、または操作されます。
CPUレジスタ
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
図に示すレジスタ構成は、最大 ROM (2048 × 8 ビット) と RAM (128 × 4 ビット) を備えた COP400 ファミリのものです。512 バイトまたは 1024 バイトの ROM のみを備えたファミリでは、9 ビットまたは 10 ビットの PC のみになります。64 または 32 の RAM を備えたファミリでは、2 ビットの Br レジスタのみになります。一部のローエンド ファミリでは、SC スタック レジスタが省略されています。[6]
4 ビット A レジスタ (アキュムレータ) は、ほとんどの算術、論理、およびデータ メモリ アクセス操作のソース レジスタおよび宛先レジスタです。また、B レジスタの Br 部分と Bd 部分のロード、8 ビット Q ラッチ データの 4 ビットのロードと入力、8 ビット L ポートの 4 ビットの入力、および SIO レジスタとのデータ交換にも使用できます。
4 ビットALU は算術演算と論理演算を実行し、結果を A に格納します。ASC および CASC 演算は 1 ビット C レジスタにキャリーを出力し、これは算術オーバーフローを示すために最もよく使用されます。
すべての ROM アドレス指定は、9、10、または 11 ビットの PC レジスタを介して行われます。そのバイナリ値は、ROM に含まれるバイトの 1 つ (通常は次のプログラム命令) を選択します。現在の命令が制御命令の転送でない限り、PC の値は、現在の命令の実行前に自動的に 1 ずつ増加され、次の連続した ROM 位置を指します。後者の場合、PC には、制御命令の転送を実行するために適切な非連続値がロードされます。PC は自動的にロールオーバーし、プログラム メモリの次の 64 バイト ページまたは 256 バイト ブロックを指します。PC の上位 1、2、または 3 ビットは、JID および LQID 命令でも使用されます。
サブルーチンの 3 つのレベルは、サブルーチン保存レジスタ SA、SB、および SC によって実装され、後入れ先出し (LIFO) ハードウェア サブルーチン スタックを提供します。実装によっては SC がないものもあります。
I/Oレジスタとポート
COP400 I/O デバイスにはポート番号やメモリ アドレスは関連付けられていません。すべての物理 I/O レジスタとポートは、COP400 アセンブリ言語によって名前で直接参照されます。
ベースライン
ほぼすべてのCOP400ファミリーデバイスは以下を実装しています。[6]
- 汎用入力IN 0 ~ IN 3が4つ用意されています。24ピンパッケージにはIN 0~IN 3はありません。
- D レジスタは 4 つの汎用出力を提供し、Bd の 4 ビットの内容の宛先レジスタです。D レジスタは、B レジスタによって指定された RAM に関連付けられた最大 16 個の外部デバイスを同期するのに役立ちます。
- G レジスタには 4 つの汎用双方向 I/O ポートが含まれています。
- Q レジスタは、RAM(B) および A にロードされたデータや、ROM からの 8 ビット プログラム データを保持するために使用される、内部のラッチされた 8 ビット レジスタです。プログラム制御で L ドライバが有効になっている場合、その内容は L ポートに出力されます。また、L の内容は A および RAM(B) に直接読み取ることができます。
- SIO レジスタは、EN レジスタの内容に応じて、4 ビットのシリアル入力/シリアル出力シフト レジスタまたはバイナリ カウンタとして機能します。その内容は A と交換でき、連続したシリアル データ ストリームを入力または出力できます。
- EN レジスタは、LEI 命令によってプログラム制御でロードされる内部 4 ビット レジスタです。このレジスタの各ビットの状態によって、EN レジスタの各ビットに関連付けられた特定の機能が選択または選択解除されます。
- ソフトウェアで直接アクセスすることはできませんが、10 ビットのタイム ベース カウンタは命令サイクル周波数を 1,024 で割って、オーバーフロー時にパルスを生成します。SKT 命令はこのパルスの発生をテストし、プログラマがタイマー ルーチンを実装できるようにします。一部のローエンド COP400 ファミリ メンバーには、このタイム ベース カウンタも SKT 命令もありません。一部のハイエンド COP400 デバイスは、タイマーの上位 8 ビットの読み取りと書き込みが可能です。
ハイエンド
COP400ファミリーには、COP440やCOP2440など40ピンのハイエンドモデルがいくつかある。これらには追加のレジスタとポートがある: [7]
- R ポートは、Q に似た追加の 8 ビット双方向 I/O ポートです。R ポートにはラッチとドライバが含まれています。出力されるデータは R レジスタにラッチされます。入力パスはピンからアキュムレータと RAM までです。R ピンの入力データは、外部信号によって R レジスタにラッチされません。これはプログラムによって間接的に行う必要があります。R ドライバは、L ドライバと同様に、高インピーダンス状態にすることができます。
- これらのデバイスには、双方向の 4 ビット ポートである H ポートが追加されています。H ポートは、直接テストできない点を除けば、基本的に G ポートの複製です。
- EN レジスタは 8 ビットに拡張されます。EN 4 - EN 5 は割り込みソースを選択します。EN 6 はT カウンターのソースを選択します。EN 7 はR ポートの出力ドライバーを制御します。8 ビットの EN は CAME 命令で書き込まれ、CEMA で読み取られます。下位 4 ビットは LEI で書き込むことができます。
命令セット
COP400 ファミリは、非常にコンパクトなコードになるように設計されています。最も頻繁に使用される命令は 1 バイトです。場合によっては、2 バイト命令の特殊な 1 バイト形式があります。オブジェクト コードをよりコンパクトにするために使用できる機能には、次のものがあります。
- LBI 命令は、7 ビットの B レジスタに即値をロードします。一般形式の命令は 2 バイトを使用します。1 バイト形式の LBI では、Br を 0、1、2、3 にのみ設定でき、Bd を 9、10、11、12、13、14、15、0 (10 進数) にのみ設定できます。1 バイトの LBI は、32 個の RAM 位置にのみアクセスできます。
- 複数の LBI 命令を連続してスタックできます。最初の LBI のみ実行されます。後続の LBI 命令は NOP として実行されます。これにより、共有ルーチンに対して異なる開始アドレスを持つ複数のエントリ ポイントが可能になります。
- 一般的なサブルーチン分岐形式の JSR は 2 バイトで、任意のメモリ位置に直接アクセスできます。JSRP は、サブルーチン分岐の 1 バイト形式で、3 番目の 64 バイト ページ内の位置にのみアクセスできます。このページはサブルーチン ページまたはページ 2 と呼ばれ、0 から番号が付けられます。JSRP は、ページ 2 またはページ 3 内からコーディングすることはできません。
- 一般的な分岐形式の JMP は 2 バイトで、任意のメモリ位置に直接アクセスできます。JP は、現在の 64 バイト ページ内の任意の位置にアクセスできる 1 バイト形式の分岐です。PC の上位ビットは変更されません。JP 命令がページ 2 または 3 内で実行されると、ページ 2 と 3 の 128 個のアドレスのいずれにもアクセスできます。これは、ページ 2 に 1 バイトの JSRP エントリ ポイントを作成し、1 バイトの JP を使用してページ 3 のサブルーチンに分岐する場合に便利です。
- B レジスタは、オーバーヘッドをほとんどかけずに最大 4 つの RAM 文字列を指すために使用できます。LD、X、XIS、および XDS メモリ アクセス命令は、 Br の下位 2 ビットと 2 ビットの即値との排他的論理和を取ることができます。これにより、B のレジスタ部分 (Br) を、同じ数字 (Bd) アドレスを共有する他の数字文字列の 1 つに反転できます。
- Bd レジスタ部分は、メモリ ポインタとループ カウンタとして同時に使用できます。XIS 命令は、Bd が増分後に 0 にオーバーフローしてループを抜けるとスキップします。同様に、XDS 命令は、Bd が減分後に 15 (10 進数) にアンダーフローするとスキップします。
サポートされているタイプ: タイプ 1 は COP410 などの非常にローエンドです。タイプ 2 (COP420 など) が最も一般的です。タイプ 3 には通常、パッケージに 40 ピンがない場合でも 40 ピンをサポートするリソースがあります。タイプ 4 は、製造されたという証拠がないため、表示されません。
サンプルコード
このサンプル コードは、命令セットのスペース節約機能のいくつかを示しています。
- シングルバイトLBI命令
- 複数の LBI 命令を連続して実行し、複数のエントリ ポイントを作成する
- LDはBrをXORしてBを宛先に反転し、XISはBをソースに戻す
- XIS のスキップ機能を介してポインタとループカウンタの役割を共有する Bd
- 1バイトジャンプ、JP
割り込み
28 ピン以上の初期の COP400 デバイスは、単一の割り込みをサポートしています。割り込み入力には IN 1 ラインが使用されます。割り込みは、LEI 命令で EN レジスタのビット 1 を 1 に設定することで有効になります。IN 1 で少なくとも 2 命令サイクルの長さの低パルスに応答して、JP などの制御転送命令がすべて完了し、すべての連続 LBI 命令が実行されます。次に、PC がサブルーチン スタックにプッシュされ、制御がアドレス 0xFF の割り込み ハンドラーに転送されます。ハードウェア スタックを備えたデバイスでは、割り込みサービス ルーチンでサブルーチンを呼び出すことはできません。[6]興味深いことに、COP440 などの後期のデバイスは 4 つの割り込みソースと 2 つのサービス ルーチンをサポートしていますが、一度に選択できる割り込みソースは 1 つだけです。スタック ポインターを備えたデバイスでは、割り込みサービス ルーチン内でサブルーチンがサポートされます。
建築拡張
COP400デバイスの大部分はローエンドのアプリケーションを対象としていましたが、より要求の厳しいアプリケーションに対応するためにアーキテクチャの拡張がいくつか作成されました。1985年までに、デュアルCPU、RAMのより深いスタック、およびより大きなアドレス空間が一部のデバイスに追加されました。[7]
デュアルCPU
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COP400 の「デュアル CPU」バージョンは、1981 年に National Semiconductor によって発表されました。これらのシングルチップバレル プロセッサには、命令、メモリ、およびほとんどの IO デバイスを共有する、一見独立した 2 つの CPU が含まれています。実際には、CPU は完全に独立しているわけではなく、ハイパースレッディング テクノロジ(HTT) を備えた Intel プロセッサと同様にハードウェア リソースを共有しています。HTT と同様に、デュアル CPU バージョンはプロセッサの特定のセクション (アーキテクチャ状態を格納するセクション) を複製することで機能しますが、 ALU 、バス、メモリなどの主要な実行リソースは複製しません。2 つの仮想プロセッサのそれぞれに個別のアーキテクチャ状態が、複製された A (アキュムレータ)、B (ポインタ レジスタ)、C (キャリー フラグ)、N (スタック ポインタ)、および PC (プログラム カウンタ) によって確立されます。[6]
リセットがデアサートされると、両方のプロセッサは CLRA 命令を含む位置 0 から開始し、1 つのプロセッサが位置 401 (16 進数) にジャンプし、その後 1 命令サイクル後に 2 番目のプロセッサが位置 1 を実行します。その後、プロセッサは交互に 1 バイトずつコードを実行します。
最大クロック周波数では、各プロセッサの命令実行時間 (1 バイト命令) は 4 マイクロ秒であるため、どちらのプロセッサの命令サイクル時間もその 2 倍の 8 マイクロ秒になります。
デュアル CPU バージョンには、40 ピン COP2440N、28 ピン COP2441N、24 ピン COP2442N などがあります。
RAM内のスタックを返す
初期の COP400 デバイスには、2 レベルまたは 3 レベルの専用ハードウェア リターン スタックが含まれていました。COP440 などの後期のデバイスには、2 ビット スタック ポインターと RAM で実装された 4 レベルのリターン スタックが搭載されています。デュアル CPU バージョンには、2 つの 2 ビット スタック ポインターと 2 つの異なる RAM 領域で実装された 2 つの独立した 4 レベルのリターン スタックがあります。
より大きなアドレス空間
基本的な COP400 命令セットは、最大 11 ビット (2,048 バイト) の ROM アドレスをサポートしますが、データ アドレスは最大 7 ビット (128 ロケーション) です。いわゆるグループ 4 デバイスは、より多くのアドレス ビットを持つ 3 バイトの JMP、JSR、および LBI 命令を追加することでメモリ制限を拡張しました。これらは最大 15 ビット (32,768 バイト) の ROM アドレスをサポートしますが、データ アドレスは最大 9 ビット (512 ロケーション) です。これらの命令をサポートするデバイスには、COP408、COP484、COP485、C0P409 などがあります。これらのグループ 4 デバイスが製造されたかどうかは不明です。
アプリケーション
- Apple LisaはCOP421を使用してキーボード、マウス、RTC、ソフト電源スイッチを制御しました。2つ目のCOP421はウィジェットハードディスクドライブのスピンドルモーターを制御します。[8]
- いくつかのメーカーは初期の電子ゲームでCOP400を使用していました。[9]
- COP410 および COP411、512 バイト ROM、32 x 4 RAM: Mattel のFuntronics Jacks、Red Light Green Light、Tag、および Plus One。
- COP420 および COP421、1024 バイト ROM、64 x 4 RAM: Milton Bradley Lightfight および Electronic Battleship 1982。Castle Toy Company Einstein。Coleco Head to Head Basketball。National Semiconductor Quiz Kid Racer。LJN Toys Ltd I Took a Lickin' from a Chicken。
- COP444、2048バイトROM、128 x 4 RAM:Entex Space Invader。Mattel Dalla$、Texas Instruments My Little Computer。[10]
- ウエスタンデジタルはWD4200(COP420)をWD2412時刻クロックのベースとして使用しました。[11]
- Grundy Newbrainコンピュータは、キーボード、テープI/O、および内蔵の16文字VF英数字ディスプレイを管理するためにCOP420を使用しています。[12]
知的財産
T400 μControllerは、VHDLで書かれたCOP400マイクロコントローラのオープンソース実装です。COP420/421およびCOP410L/411Lデバイスがサポートされています。T400は、レガシーシステムを再現するSOCのオリジナルチップの代替品となることを目的としています。T400は、いくつかのFPGAファミリに実装されています。T400は、GNU General Public Licenseの下で利用可能です。[13]
エミュレータ
COP400ファミリーやいくつかの携帯ゲーム、特殊な電卓用のオープンソースのMAME エミュレーターがあります。 [14] [15]
参照
- ナショナルセミコンダクターCOP8
参考文献
- ^ 「ナショナル セミコンダクター: COPS 以前の COP」。CPUSHACKミュージアム。2014 年 9 月 27 日。2021年12 月 23 日閲覧。
- ^ 「COP400 マイクロコントローラ ファミリ COPS ファミリ ユーザーズ ガイド」。ナショナル セミコンダクター。2023 年8 月 3 日閲覧。
- ^ 「Western DigitalとCOP」。CPUSHACK博物館。2015年10月2日。 2021年12月22日閲覧。
- ^ 「WD4200/WD4210 シングルチップ N チャネル マイクロコントローラ」。2021 年12 月 23 日閲覧。
- ^ 「ソビエトのマイクロプロセッサ、マイクロコントローラ、FPUチップとその西洋の類似品」www.cpu-world.com 。 2022年11月15日閲覧。
- ^ abcd 「COPSマイクロコントローラデータブック」。ナショナルセミコンダクター。 2022年1月19日閲覧。
- ^ ab 「COPSプログラミングマニュアル(1985)」(PDF)。Vintage Technology Digital Archive。National Semiconductor 。 2021年12月23日閲覧。
- ^ “Apple Lisa 341-0064A (COP421)”. Visual6502 . 2021年12月24日閲覧。
- ^ 「ナショナル・セミコンダクターCOP400」。ショーン・リドル。 2021年12月24日閲覧。
- ^ Woerner, Joerg. 「Texas Instruments My Little Computer」. Datamath Calculator Museum . 2024年6月19日閲覧。
- ^ 「1983 コンポーネントカタログ」(PDF) . Western Digital. p. 621 . 2021年12月24日閲覧。
- ^ 「COP420 4ビットプロセッサ - Newbrain」。2021年12月30日閲覧。
- ^ 「T400 μController - Nationalの4ビットCOP400マイクロコントローラの実装」。All About Circuits 。 2024年6月21日閲覧。
- ^ 「COP400 libmame リポジトリ」。Github 。2022年4月23日閲覧。
- ^ 「Funjacks (エミュレートされたゲームの例)」。アーケードデータベース。 2022年4月23日閲覧。
