
ST6およびST7は、 STMicroelectronicsの8 ビットマイクロコントローラ製品ラインです。洗濯機などの小型組み込みアプリケーションでよく使用されます。
これらは同様の周辺機器を使用し、同じ製品ラインの一部として販売されていますが、[1] [2] 2つのアーキテクチャは実際にはかなり異なります。
どちらも、ほとんどの操作に使用される 8 ビットのアキュムレータと、メモリのアドレス指定に使用される 2 つの 8 ビットのインデックス レジスタ (X と Y) を備えています。また、どちらも 8 ビットの命令とそれに続く最大 2 バイトのオペランドを備えており、メモリの個々のビットの操作と分岐をサポートしています。
類似点はそこで終わります。
ST6 は、 8 ビット (256 バイト) のデータ アドレス空間と、別の 12 ビット (4096 バイト) のプログラム空間を持つハーバード アーキテクチャです。オペランドは常に 1 バイト長で、一部の命令は「8 ビットの即値を 8 ビットのメモリ アドレスに移動する」など、2 つのオペランドをサポートします。サブルーチン呼び出しは、別のハードウェア スタックを使用して行われます。データ レジスタ (プログラム カウンタやフラグは除く) はメモリ マップされます。
ST6 のアドレス指定モードは、即時、8 ビット絶対メモリ アドレス、およびレジスタ間接モード (X) と (Y) に制限されています。
ST7 は、16 ビット (64 kiB) のアドレス空間を 1 つ持つフォン ノイマン アーキテクチャです。RAM の最初の 256 バイト (ゼロ ページ) には、追加の柔軟性があります。「テスト ビットと分岐」を除き、2 つのオペランドを持つ命令はありません。レジスタはメモリ マップされておらず、サブルーチン呼び出しには汎用 RAM (およびスタック ポインタレジスタ) を使用します。
ST7 は、ベース + インデックスや二重間接など、さまざまなアドレス指定モードをサポートしています。

ST6アーキテクチャ
ST6 には 64 バイトのRAMと 4096 バイトのプログラムROMがあります。より大きな容量には、ROM の下位 2K セクションを バンク切り替えすることによってアクセスします。
RAM アドレス空間は実際には 256 バイトで、次のように分割されます。
- 0~63: 未実装
- 64~127: プログラムROMとデータEPROMへのバンク切り替え可能なウィンドウ。
- 128~191: 汎用RAM
- 192~255: 周辺制御レジスタ (GPIO ポート、タイマーなど)アキュムレータはアドレス 255 にマップされますが、暗黙的にアドレス指定されるのが一般的です。
アドレス空間にマップされていないのは、12 ビットのプログラム カウンターと関連するハードウェア スタック (モデルに応じて 4 レベルまたは 6 レベルの深さ) です。ステータス ビットは 2 つ (キャリーとゼロ) のみで、プロセッサ モードに基づいてバンク化され、通常、割り込み、およびマスク不可能な割り込み操作ごとに個別のステータス ビットが割り当てられます。
最初の 4 つの汎用 RAM 位置は、X、Y、V、W レジスタとも呼ばれ、一部の命令は特殊なショート アドレッシング モードを使用してこれらのレジスタにアクセスできます。X レジスタと Y レジスタはインデックス レジスタとして機能し、間接アドレッシング モード(X)とを使用できます(Y)。
命令セットは、1 バイトのオペコードと、それに続く最大 2 つの 1 バイトのオペランドで構成されます。命令セットは次のように要約できます。
†: ^ ab紛らわしいことに、ST6 ファミリの異なるモデルでは、減算後のキャリー ビットの値に異なる規則が使用されています。ST60 プロセッサは、減算がアンダーフローした場合にビットをクリアする「キャリー」規則を使用しますが、ST62 および ST63 プロセッサは、その場合にビットを設定する「ボロー」規則を使用します。[3] : 21–22,42
ST7アーキテクチャ
ST7 には、アキュムレータ、X および Y インデックス レジスタ、スタック ポインタ、プログラム カウンタ、条件コード レジスタの 6 つのレジスタがあります。また、二重間接アドレス指定により、RAM のゼロ ページを追加レジスタとして使用できます。珍しいですが便利な機能として、割り込みによってこれらのレジスタのうち 4 つ (A と X、および通常の PC と CC) がスタックにプッシュされ、割り込みからの復帰によってそれらが復元されます。
ALU 命令は、2 オペランドと 1 オペランドの 2 つのカテゴリに分類されます。
2 つのオペランドを持つ命令では、アキュムレータを最初のソースとして使用します。アドレッシング モードによって 2 番目のソースが指定されます。
- 8ビット即値
- 8ビット絶対アドレス
- 16ビット絶対アドレス
- インデックス (X)
- インデックス+8ビットオフセット(アドレス8、X)
- インデックス+16ビットオフセット(アドレス16,X)
宛先は通常はアキュムレータですが、いくつかの命令は 2 番目のソースを変更します。(このような場合、即値オペランドは禁止されています。)
1 つのオペランド命令では、ソースと宛先の両方に指定されたオペランドを使用します。オペランドは次のいずれかになります。
- アキュムレータA
- Xレジスタ
- 8ビット絶対アドレス
- インデックス (X)
- インデックス+8ビットオフセット(アドレス8、X)
レジスタとオフセットを加算すると全幅の合計が計算されるため、8 ビット形式では最大 255+255 = 510 のメモリをアドレス指定できます。
上記に加えて、意味のある命令の前に付加できるプレフィックス バイトが 3 つあります。
- PDY (0x90) は、X レジスタへのすべての参照を Y に変更します。これにより、(Y)、(address8,Y)、(address16,Y) のアドレッシング モードが可能になります。これは暗黙のオペランドにも影響するため、「load X」命令は「load Y」になります。この結果、load X は X 相対アドレッシング モードのみを使用でき、load Y は Y 相対アドレッシング モードのみを使用できます。
- PIX (0x92) は、命令に間接ステップを追加します。オペコード バイトに続く 8 ビットまたは 16 ビットのアドレスは、8 ビットまたは 16 ビットのアドレス (後者はビッグ エンディアン順) を保持するメモリ位置の 8 ビット アドレスに置き換えられます。これは、通常どおり X レジスタによってインデックス付けできます。これにより、(address8)、(address16)、([address8]、X)、および ([address8.w]、X) のアドレッシング モードが可能になります。
- PIY (0x91) は上記の効果を組み合わせます。これにより、([address8],Y) および ([address8.w],Y) アドレッシング モードが可能になります。(「ロード Y」および「ストア Y」命令の一部として他のモードと組み合わせて使用することもできます。)
参考文献
- ^ データシート: ST62T00C/T01C 1998 年から
- ^ 「2006 EDN マイクロコントローラ/マイクロプロセッサ ディレクトリ、命令セット アーキテクチャ別に分類された 8 ビット マイクロプロセッサ」(PDF)。p. 26。100616 edn.com
- ^ ab 「ST6 ファミリー プログラミング マニュアル」(PDF)。リビジョン 2.0。STMicroelectronics。2004年 10 月。2017 年 2 月 28日閲覧。
- ^ 「ST7 ファミリー プログラミング マニュアル」(PDF)。リビジョン 2。STMicroelectronics。2005年11 月。2017 年 2 月 28 日閲覧。
