HP Saturnとは、1980年代にヒューレット・パッカード社によって開発された、関数電卓あるいは小型コンピューター向けの、4bitマイクロプロセッサのシリーズである。

HP Saturn 1LT8 Clarke in HP 48 SX

Saturnは旧機種の電卓に使われたNutファミリープロセッサの後継品として開発された。 最初のSaturn CPUは、1984年に発売されたHP-71Bハンドヘルドコンピューター(日本のポケットコンピュータに類似)に搭載された。 その後、新規バージョンのCPUがHP 48 シリーズ関数電卓に特に多く搭載されるようになった。 HP 49/50 シリーズでも、最初期のモデルには同様にSaturn CPUが搭載された。しかし2003年に、NECの工場が技術的理由でSaturnプロセッサの製造をすることができなくなっため、同年発売されたHP 49g+からは、ARM920T(ARMv4Tアーキテクチャ)をコアとした Samsung S3C2410 プロセッサを使うように設計が変更され、Saturn CPU(Apple series )をソフトウェアでエミュレーションするようになった。

2000年に発売されたHP 39GHP 40Gは、Saturn CPUを搭載した最後の電卓になった。 Saturnエミュレータを搭載した最後の電卓は、2006年に発売されたHP 39gsHP 40gsHP 50gの3機種、ならびにhp 48gIIの2007年版であった。 特にHP 50gは、Saturnエミュレータを搭載した電卓の中で最も遅くまで製造されていた。サムスン電子がHP 50g用のARMプロセッサの製造を中止したため、2015年にHP 50gも製造中止になった[1][2][3]

アーキテクチャ 編集

Saturnアーキテクチャはデータの基本単位がニブル(4bit)単位である。1ニブルで1桁のBCD(二進化十進数)を保持できる。

Saturnマイクロプロセッサは64bitと20bitのハイブリッドCPUのように見えるが、4bit CPUのような動作をする。プログラム上でニブル(4bit)単位のデータを扱い、ニブル(4bit)単位のアドレスシステムを使うからである。

メインレジスタのA,B,C,Dとスクラッチレジスタ(一時記憶用)のR0,R1,R2,R3,R4は64bit幅であるが、データレジスタのD0とD1は20bitである。[4]

外部アクセス時の論理的な4bitデータフェッチは8bitの物理フェッチに自動的に変換される。つまりプログラム上はニブル(4bit)単位アクセスをしても実際には8bitでアクセスし、そのうちの4bitだけを使う。

物理的に説明すると、最下位のアドレスビットが1byte(8bit)中の上位ニブル(4bit)なのか下位ニブル(4bit)なのかを示しているので、実際には19bitのバイト単位アドレス空間しかないことになる。

Saturnの64bitレジスタフォーマット:

s:正負符号、m:仮数、x:指数、w:ワード、b:バイト

Bits 63-60 59-56 55-52 51-48 47-44 43-40 39-36 35-32 31-28 27-24 23-20 19-16 15-12 11-8 7-4 3-0
Nibble F E D C B A 9 8 7 6 5 4 3 2 1 0
Register field wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww wwww
Number field ssss mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm xxxx xxxx xxxx
Address field ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? aaaa aaaa aaaa aaaa aaaa
Byte field ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ???? ssss bbbb bbbb

Satrunは4つの汎用レジスタ(A,B,C,D)と5つのスクラッチレジスタ(R0-R4)を持っており、それらは64bit幅である。汎用レジスタのデータはニブル単位でアクセスすることができる。一方、スクラッチレジスタはロードとストアしかできない。

その64bitレジスタ(つまり16ニブル)は、1ニブルの正負符号、12桁(12ニブル)の仮数部、そして3桁(3ニブル)の指数部(範囲は±499)[5]で構成されたBCD浮動小数点数を格納することができる。直接的な2進数表現の代わりにBCD(二進化十進数)を使うと、2進数/10進数変換時の丸め誤差を回避できるという利点がある。

メモリ使用効率を最適化するためにSaturnのアドレスはニブル単位である。3つのポインタレジスタ(プログラムカウンタ含む)とアドレスデータパスは20bit幅である。このため、Saturnアーキテクチャは1Mニブル = 512 KBをアドレスできる。

HP 48GXのように512 KBを越えるアドレスが必要な場合はバンク切替が使われる。

HP 48S/SXHP 48G/GX シリーズにおいて、Saturn CPUコアはより複雑なチップセットの一部として組込まれている。

Saturn搭載チップセットと利用製品 編集

最初のSaturn CPUという名前はチップ全体を指していた。後にチップはSaturn CPUとメモリだけでなく周辺回路も搭載するようになったので、チップセットになった。各チップセット毎に搭載している周辺回路なども異なるので、各チップセットはコード名で区別されるようになった。

チップセットのコード名はルイス・クラーク探検隊の隊員にちなんだコード名を付けられている。HP 48S/SXの場合、ウィリアム・クラークにちなんでコード名はClarkeである。HP 48G/GXの場合、クラークの従僕にちなんでコード名はYorkeである。旧機種のHP-28Sの場合は、ルイス・クラーク探検隊のメリウェザー・ルイスにちなんでLewisというコード名であった。

Level コード名 応用製品 特性
0 Saturn (1LF2) HP-44A, HP-71B (1984)
? 1LJ7 ThinkJet プリンター (1984)

HP Integral PC (1985)に搭載されたプリンターである。

1 Saturn (1LK7) HP-18C (1986), HP-28C (1987), HP-71B CPU : 640 kHz, 命令追加
Bert (1LU7) HP-10B (1988), HP-20S (1988), HP-21S
  • CPU : 640 kHz
  • ROM : 10 KB
  • RAM : 256 bytes
  • LCDドライバー搭載

※ここからCPU,RAM,ROM以外のものも搭載するようになったので、コード名が付与された。

Sacajawea (1LR3, 1LE2) HP-14B, HP-22S, HP-32S (1988), HP-32S+, HP-32SII (1991)
  • CPU : 640 kHz
  • ROM : 10 KB
  • RAM : 512 bytes
  • LCDドライバー搭載
Lewis (1LR2, 1LT8) HP-17B (1988), HP 17BII (1990), HP-19B (1988), HP 19BII (1990), HP-27S (1988), HP-28S (1988), HP-42S (1988) 3V CMOSで製造された。
  • CPU : 1 MHz
  • ROM : 64 KB
  • メモリーコントローラー(RAMが外付け)
  • LCDドライバー
  • 赤外線コントローラー
2 Clarke (1LT8) HP 48SX (1990), HP 48S (1990)
  • CPU : 2 MHz, 命令追加
  • メモリーコントローラー(ROMとRAMが外付け)
  • LCDコントローラー
  • UARTコントローラー
  • 赤外線コントローラー
3 Yorke (1LT8) HP 38G (1995), HP 38G+ (1998), HP 39G (2000), HP 40G (2000), HP 48GX (1993), HP 48G (1993), HP 48G+ (1998), HP 49G (1999)
  • CPU : 3.68-4 MHz, 命令追加
  • メモリーコントローラー(ROMとRAMが外付け)
  • LCDコントローラー
  • UARTコントローラー
  • 赤外線コントローラー

※NECで製造された。Saturn 5 プラットフォームとしても知られている。

New-Yorke HP 48GX prototype
  • CPU : 8 MHz
  • メモリーコントローラー(ROMとRAMが外付け)
  • LCDコントローラー
  • UARTコントローラー
  • 赤外線コントローラー

※HP内部で試作されたものであり、一般に流通しなかった。

4 Apple series (Big Apple, Mid Apple, Little Apple) hp 39g+ (2003), HP 39gs (2006), HP 40gs (2006), hp 49g+ (2003), hp 48gII (2003/2007), HP 50g (2006) 前述のYorke CPUの仮想バージョン(エミュレーター)である。

ARM920Tコア(ARMv4Tアーキテクチャ)のSamsung S3C2410 プロセッサファミリー 48/75 MHz によってYorke CPUエミュレーターが動作した。

追加された仮想命令はSaturn+という。

出典 編集

  1. ^ Kuperus, Klaas (2015年3月4日). “HP 50g: End of an era” (英語). Moravia. 2015年4月2日時点のオリジナルよりアーカイブ。2019年1月2日閲覧。
  2. ^ Kuperus, Klaas (2015年3月6日). “HP 50g not so good news?”. Moravia. 2016年1月1日閲覧。
  3. ^ Wessman, Tim (2015年12月26日). “Windows 10 won't allow HP 50g USB drivers to be installed”. HP Museum. 2016年1月1日閲覧。
  4. ^ GUIDE TO THE SATURN PROCESSOR
  5. ^ "Introduction to Saturn Assembly Language (PDF)" (P104 "56.1 Real number")によると、負の指数を表現するとき、1000 - ABS(exponent) で計算した値を格納する。例えば、-499の場合、指数として1000-|-499|=501を格納することになる。つまり501以上の指数は負の指数とみなす。そのため、指数の範囲は-499~+500となるが、HP 50gの実機で確認したところ-499~+499までしか指数は使えないので、+500はあえて使わないようにしているのだろう。

参考文献 編集

外部リンク 編集