世界を動かす技術を、日本語で。

プレイステーションアーキテクチャ

概要

  • Sony PlayStationのCPU設計と選定経緯の解説
  • MIPSアーキテクチャとRISCの流れ、業界動向
  • PlayStation用SoCの構成要素と特徴
  • 各種コプロセッサとDMA機能の役割
  • 演算性能や設計上の制約についても言及

PlayStationのCPU設計と歴史的背景

  • Sony は3Dハードウェア開発の複雑化を避けるため、 シンプルかつ実用的 な設計を選択
  • メインCPUは CXD8530BQ、現代で言う System-on-Chip の先駆け
  • 1990年代初頭、 RISCアーキテクチャ への移行が業界全体で進行
    • Appleは PowerPC、Sunは SPARC、Acornは ARM を採用
    • Sega Saturnは Hitachi SH、Nintendo Virtual Boyは NEC V810 を採用
  • MIPS はStanford発の企業で、後に SGI が採用・買収
    • MIPS R2000 が商用RISC CPUの先駆け
    • PlayStationにはコスト面で有利な R3000A 系を採用

LSI LogicとカスタムCPU

  • LSI Logic はMIPSのライセンスを受け、 CoreWare サービスでカスタムCPUを提供
    • CW33300LR33300 由来で、 MIPS R3000A互換
    • Sonyは CW33000 をベースに独自カスタマイズし、SoCとしてマザーボードに搭載

PlayStation SoCの主な仕様

  • CPUコア は33.87MHz動作
    • MIPS I ISA (32ビットワード、乗除算命令含む)
    • 32本の汎用レジスタ +2本の乗除算レジスタ
    • 32ビットデータバス (Main Bus: 32bit、Sub Bus: 16/8bit)
    • 32ビットアドレスバス (最大4GB物理メモリ対応)
    • 5段パイプライン4KB命令キャッシュ (データキャッシュは無し、Scratchpadとして1KBを割当)
  • メインメモリ は2MBの EDO RAM (高速性重視)

DMAとバス制御

  • CD-ROMコントローラ、MDEC、GPU、SPU、パラレルポート はDMAコントローラ経由で独立転送可能
    • DMA動作中はCPUがメインバスにアクセス不可、Scratchpad利用でCPUのアイドル回避

コプロセッサ構成

  • 最大4つのコプロセッサ 対応、PlayStationでは3つを実装
    • System Control Coprocessor(CP0)
      • キャッシュ管理、割り込み・例外・ブレークポイント制御
      • データキャッシュはScratchpadとして利用
    • Geometry Transformation Engine(CP2)
      • ベクトル・マトリクス演算を高速化
      • 3D投影、ライティング、クリッピング等の初期グラフィックス処理を担当
    • Motion Decoder(MDEC)
      • JPEG類似のマクロブロック画像の展開
      • 最大毎秒9,000マクロブロック処理、320x240px/30fpsのFMV再生対応
      • SoC内でCPU・DMAとメモリマップ経由で接続

欠落ユニットと設計上の制約

  • CP1(FPU)は非搭載
    • 浮動小数点演算はソフトウェア処理または固定小数点演算で代用
    • ゲームロジックや物理演算は主に固定小数点で対応

まとめ

  • PlayStationは コスト・性能・開発容易性 のバランスを重視した設計
  • MIPS R3000A互換SoC と独自コプロセッサ群で3Dグラフィックスを実現
  • DMAやScratchpad活用による高速データ転送とCPU効率化
  • 浮動小数点演算の弱さはソフトウェアや設計工夫で補完

Hackerたちの意見

彼の作品が大好き。最近、彼の本の一冊を買ったよ :)

コペッティが大好き。彼が話してることに詳しくない私でも、彼の文章や図をめくるのがすごく楽しい。特に、5世代や6世代のコンソールの裏側を理解しようとするのが、なんかワクワクするんだよね。

1994年はいつも私を引き込む。もっと90年代後半のものって感じがする。

コペッティ好きな人は、ファビアン・サングラールがやったこともチェックしてみてね。『Wolfenstein』や『Doom』のブラックブック、『Another World』の移植分析、彼が投稿した他の数十件のコードレビューもあるよ。 https://fabiensanglard.net/

これは素晴らしいけど、元々2019年に発表されたものだよ。過去の議論も見てみてね。2020年のはこちら: https://news.ycombinator.com/item?id=22932134(コメント114件)と2021年のはこちら: https://news.ycombinator.com/item?id=27576902(こちらも114件のコメント)。

それ以来、何度も更新されてるよ!

それがどうしたの?5〜7年前のことだよ。これを見たことがなかったから、投稿してくれてありがたい :)

何年か前に読んで、今日また読み返した。こんな質の高い作品を作ってる人たちがいることにすごく嬉しくなったよ。私自身はあまり詳しくないけど、読んでると完全に引き込まれちゃうんだよね。

この記事はいつも素晴らしい。PS1のゲームはあまり持ちこたえないけど、PS2のゲームを1440p-4kにアップスケールしたら、個人的にはほぼ完璧だと思う。

元々のプレイスタイルで遊ぶと、結構持ちこたえるよね。CRTで遊べるならそれがベストだし、無理ならエミュレーターのCRTフィルターを使うのがいいと思う。高解像度のシャープなLCDディスプレイでプレイするのは、個人的には最悪だね。

2Dのやつ(例えば『悪魔城ドラキュラX 月下の夜想曲』)はそうだね。

PS1のゲームはあまり持ちこたえないよね。 えぇ…自分のことを言ってるの? PS1は家庭用ゲーム機の3D時代の幕開けを告げたからね。PS1の特徴的な「揺れ」を持つローポリの3Dモデルが好きな人もたくさんいるよ。確かにノスタルジーもあるかもしれないけど、独特の魅力があって、時間が経つにつれてその魅力が増してきたって言えるよ。特にPS1のユニークなハードウェア制限について知った後はね。SNSのフィードを見る限り、「PS1グラフィックス」がちょっとした復活を遂げていて、あの見た目を再現しようとする人がたくさんいるよ。

開発者たちがあれだけのスペックから何を引き出したのかを見ると、本当に驚くよね!

グラフィック的には、CRTで遊ぶか(またはCRTフィルターを使うか)、PGXPジオメトリ補正があるエミュレーターを使って、高解像度での頂点の揺れをなくすのがいいよ。ゲームプレイに関しては、そのコンソールには膨大なライブラリがあって、商業リリースされたゲームが何千本もあるからね(隠れた名作もたくさんあるし)。そのカタログの中で、少なくとも一つは好みに合うゲームが見つからないゲーマーはいないんじゃないかな。

同じ物理メモリにマッピングされているメモリ領域があるんだよね - https://psx-spx.consoledev.net/memorymap/。私はPSXからPCへの『メタルギアソリッド』の移植に関わったんだけど、コナミのプログラマーたちは「C4」爆弾が壁に設置されているか地面に設置されているかを保存するために、ちょっとしたトリックを使ったんだ。基本的にはポインタが同じ物理メモリアドレスを指していたけど、壁に設置されている場合(または地面だったか忘れたけど)には80000000hかA0000000hとORを取っていたんだよね。もう何年前のことか忘れたけど、PCへの移植は楽しかったな。今は何をしたかすら覚えてないけど、ハハハ。

最近は、そういうトリックはポインタをデリファレンスする時に最下位ビットを使ってマスクすることで行われていて、より高いアライメントを得るためのトレードオフになってるんだ(4ビットで16バイトのアライメントが得られる)。PS1はRAMエイリアシングもあるし、RAM全体のデコーディングウィンドウをカバーするほどのRAMがないからね。詳しいことは知らないけど、PS1の実行ファイルが開発キットの8MiBのRAMの端にスタックポインタを設定しても、リテールユニットで動くのを見たことがあるよ。結局リテールの2MiBのRAMの端に到達するからね。理論的には、そこにビットを詰め込むこともできるはずだし(異なるキャッシュ動作を持つ異なるメモリ領域をいじらずに)。

プレ・クロードの記事、めっちゃ好き!

みんな、こんにちは!今、PS1関連のプロジェクトに取り組んでて、もうすぐリリースしたいと思ってるんだ。PS1のウェブ/js/wasmエミュレーターのおすすめがあったら教えてほしいな。PCSX-Reduxはデスクトップでめっちゃ使いやすかったし、DuckStationも良かったよ。いくつかjs/emscriptenの試みを見つけたけど、他におすすめがあれば教えてくれると嬉しい!ありがとう! [0] https://github.com/grumpycoders/pcsx-redux/ [1] https://duckstation.org/

なんて美しくデザインされたウェブサイトなんだろう。すべてが考えられて配置されていて、素晴らしいデジタルガーデンの例だね。手入れが行き届いていて、とても人間らしい感じがする。