Saturnファミリーの4ビット(データパス)マイクロプロセッサは、 1980年代にヒューレット・パッカードによって開発され、最初は1984年に発売されたハンドヘルドコンピュータHP-71Bに搭載され、その後、さまざまなHP電卓( HP-18Cから)にも搭載されました。これは、以前の電卓で使用されていたNutファミリーのプロセッサの後継です。HP48SXとHP48Sは、HPが製造したSaturnプロセッサを使用した最後のモデルで、それ以降のモデルではNECが製造したプロセッサが使用されました。HP 49シリーズは、当初はSaturn CPUを使用していましたが、2003年にNEC工場[注1 ]が技術的な理由でプロセッサを製造できなくなりました。 2003年のHP 49g+モデルから、電卓はARM920Tコア( ARMv4Tアーキテクチャの一部)を備えたSamsung S3C2410プロセッサに切り替わり、ソフトウェアでSaturnハードウェアのエミュレータが動作するようになりました。 2000年に発売されたHP 39GとHP 40Gは、NECが製造した実際のSaturnハードウェアに基づいて発売された最後の電卓でした。Saturnエミュレータを使用して発売された最後の電卓は、 2006年のHP 39gs、HP 40gs、HP 50g、および2007年のhp 48gIIの改訂版でした。HP 50gは、ベースとなっているARMプロセッサの生産をSamsungが中止したため、2015年に販売が中止されたとき、このエミュレータを使用してHPが販売した最後の電卓でした。[ 1 ] [ 2 ] [ 3 ]
Saturn ハードウェアは、ビットシリアルであった前身のNutとは異なり、ニブルシリアル設計です[ 4 ]。[ 5 ] Saturn CPU の内部には、4 つの 4 ビットデータバスがあり、1 つまたは 2 つのバスがソースとして、1 つまたは 2 つのバスがデスティネーションとして機能し、ニブルあたりほぼ 1 サイクルのパフォーマンスを実現します。[ 4 ]アドレス指定可能な最小ワードは 4 ビットのニブルで、1 つのバイナリコード化 10 進数(BCD) 桁を保持できます。レジスタ内のニブルより大きい最大 64 ビットまでの任意のデータ単位は全体として操作できますが、Saturn CPU は内部的にニブル単位でシリアルに操作を実行します。[ 4 ]
Saturnアーキテクチャは、内部レジスタ幅が64ビット、アドレスが20ビットで、メモリは4ビット(ニブル)単位でアドレス指定されます。SaturnのALU命令は可変データ幅をサポートしており、1ワードあたり1~16ニブルで動作します。初期のSaturn CPUチップは4ビットの外部データバスを備えていましたが、後のSaturnベースのSoCでは、チップ上でバスを変換し、8ビットの外部データバスと19ビットの外部アドレスバスを実現しました。
Saturnアーキテクチャには、A、B、C、Dという名前の4つの64ビットGPR(汎用レジスタ)があります。さらに、R0、R1、R2、R3、R4という名前の5つの64ビット「スクラッチ」レジスタもあります。これらはデータのみを格納できます。スクラッチレジスタ内のデータに対してALU演算が必要な場合は、まずそのレジスタをGPRに転送する必要があります。その他のレジスタには、通常GPR内のニブルまたはニブルの範囲を選択するために使用されるPという名前の1ニブル「ポインタ」レジスタ(またはラップアラウンドを使用してGPR内の特定のニブルに即値データを整列させる場合)があります。メモリアクセス用に、D0とD1という名前の2つの20ビットデータポインタレジスタがあります。Saturnアーキテクチャには、GPRと相互運用できるPC(プログラムカウンタ)レジスタもあります。また、サブルーチン呼び出し命令が発行されたときに使用される、RSTKという名前の8レベルの循環LIFO 20ビットハードウェアリターンスタックもあります。さらに、Saturn CPUには、STという名の16ビットのソフトウェアステータスレジスタと、HSという名の1ニブルのハードウェアステータスレジスタが搭載されています。HSには、バイナリ1がGPRから右シフトされたかどうかを示すSB、つまり「スティッキービット」フラグが含まれています。また、Saturnアーキテクチャには、12ビットのOUTレジスタと16ビットのINレジスタがあり、YorkeおよびClarke SoCでは、キーボードからの入力をキャプチャし、ビープ音を制御するために使用されます。さらに、1ビットのキャリーフラグレジスタもあります。
上記に加えて、Saturn CPU には単純な非優先順位割り込みシステムがあります。割り込みが発生すると、CPU は現在の命令の実行を完了し、プログラムカウンタをハードウェアリターンスタック (RSTK) に保存し、アドレス 0x0000Fh にジャンプします。ここで、前の値はニブル単位です。[ 4 ] CPU はキーボードスキャンロジックとも直接やり取りします。
次の図はレジスタを示しています(白い四角はそれぞれ4ビット/ニブルを表しますが、キャリーフラグは1ビットです)。

Saturn 64ビットGPRレジスタのフォーマットとフィールド:
汎用レジスタ内のデータには、ニブル境界に位置するフィールドを介してアクセスできますが、スクラッチレジスタではロードとストア操作のみが可能です。上記の図に示すように、フィールドはW(64ビットGPR全体)、A(アドレス、GPRの最初の5ニブル)、S(仮数の符号、GPRの最上位ニブル)、XS(指数符号、GPRの2番目のニブル)、M(仮数、GPRの3~14番目のニブル)、X(指数、GPRの最初の3ニブル)、B(GPRの最初のバイト)です。さらに、Pレジスタの4ビット値に基づいてGPRからニブルを選択するPフィールドがあります。また、Pレジスタで選択されたニブルから0番目のニブルまでを選択するWPフィールドもあります。 64 ビット (16 ニブル) には、符号ニブル (数値が負の場合は「9」)、12桁の仮数部、および BCD形式 (±499)で格納された 3 桁の 10 の補数指数で構成されるBCD形式のコード化浮動小数点数を保持できます。 [ 6 ] BCD 浮動小数点値の内部表現は、1 つのレジスタにある 15 桁の仮数部と 1 つの符号ニブル、および別のレジスタにある 10 の補数形式の 20 ビット指数部です。BCD を通常のバイナリ表現の代わりに使用することは、バイナリ / 10 進数変換で発生する丸めの問題を回避するため、電卓にとって有利です。
Saturn CPUの命令アドレスとデータアドレスもニブルベースです。3つのポインタレジスタ(プログラムカウンタを含む)とアドレスレジスタは20ビット幅です。このため、Saturnアーキテクチャは100万ニブル、つまり512キロバイトをアドレス指定できます。このサイズを超える場合(例えば48GXなど)、バンク切り替えが使用されます。
初代HP-71BハンドヘルドコンピュータとHP-28Cでは、Saturnプロセッサは独立したチップとして搭載されていました。HP 48S/SX、48G/GXシリーズ、およびHP-28S、HP-27S、HP-42S、HP-32SII、HP-20Sでは、Saturn CPUコアはより複雑な集積回路(IC)SoCの一部として統合されています。
以下は、Saturn Jazz / HP Toolsのアセンブリ構文で記述された、BCD10進数平方根アルゴリズムの整数実装例です。
** 以下では、AW には引数 (< 1E14) が含まれていると想定します。 ** 結果 (IP(SQRT(AW))) は CW です。 SETDEC ASL W C=AW A=A+AW A=A+AW A=A+CW ASR W C=0 W P=13 LC(1) 5 - CSR WP C=C-1 P -- C=C+1 P A=AC W ゴンク -- A=A+CW CSR W P=P-1 P=P-1 GONC - セテックス A=CW
初代セガサターンCPUは、命令セットアーキテクチャ全体にその名を冠した。後のチップにはそれぞれ独自のコードネームが付けられた。
CPU のコードネームは、 1804~1806 年のルイス・クラーク探検隊のメンバーにちなんで付けられたもので、米国初の太平洋岸への陸路探検隊です。仮想 CPU / エミュレータのコードネームは、 製品化されなかったプロトタイプの「New-Yorke」Saturn ベースの 8 MHz SoC にちなんで付けられました。[ 12 ] ACO (Australian Calculator Operation) のメンバーの 1 人によると、「Big Apple」は、ニューヨーク市にちなんでプロトタイプの 8 MHz Saturn ベースの SoC のコードネーム「New-Yorke」から派生したもの で、そのため「Big apple」、「Mid Apple」、「Little Apple」という名前が付けられました。[ 12 ]
指数が負の場合、指数は "1000 - ABS(指数)" としてエンコードされます。
{{cite newsgroup}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)