科学・技術
セガ32XでLinuxを動かす。ハードウェア同期プリミティブなんて誰が必要とする?
要約
この記事は、セガ32Xというレトロゲーム機上でLinuxを動作させるという挑戦について詳述しています。筆者は、過去のプロジェクトで得た経験を活かし、限られたリソースと古いハードウェアでOSを動作させるための技術的な課題と解決策を探求しています。
全文翻訳
前書き
このエントリを、Jaguar向けのLinux投稿を楽しんでくれたすべての人に感謝することなく始めることはできませんでした。また、linuxmdプロジェクトにも改めて特別な賛辞を送ります。非常に楽しい経験であり、いくつかのニュースアウトレット(HackadayやTom's Hardware)にも取り上げられました。Hacker Newsにも投稿し、かなりの関心(そして良い質問!)を得ました。ですから、はい、皆さん、改めて感謝します!
なぜこの(Linux)トレンドが続いているのか?
この質問には簡単な答えがあります。主に、私のボード・ブートアップスキルを向上させるためです。私はファームウェア/オペレーティングシステム/組み込み分野で2年以上(プロフェッショナルに)働いてきました。そして、新しい仕事を探す際にしばしば見られる候補の1つが、「ゼロからボード・ブートアップを処理する能力」です。あまり魅力的には聞こえないかもしれませんが、私にとっては、仕事探し(それは私の本業ではありませんが)とは別に、シリコンの断片を起動させて、自分が作ったもの/作るのを手伝ったものを実行させるのは非常に楽しいです。エミュレータ、技術文書、実験、調査…つまり、いつものエンジニアリング作業のような、結果を構成する多くの異なるレイヤーを試すことができます。90年代初頭のスキャンされたデータシートを読むことが私の情熱だとは言えませんが(PDFに埋め込まれたプレーンな画像であるドキュメントもあります)、毎回私を惹きつける何かがあります。
私は実際にこれを13年/14年に始めました。当時12歳/13歳で、両親が私の最初の携帯電話を買ってくれたのを鮮明に覚えています。それはMediaTekベースの6589クアッドコアプロセッサで、RAMは1ギガバイトでした。パワフルなものですね!当時(それほど遠くない後)、GoogleはAndroid 5.0 Lollipopをリリースしましたが、携帯電話のベンダーはそれをそのバージョンにアップデートしないと決定しました。そして私は本当に悲しかった…だから自分でやらなければなりませんでした。話は少し長くなるので、話を少し短くしますが、要点は、私は会社にGPLを遵守し、携帯電話のLinuxカーネルソースコードをリリースするように求めました。彼らは反対しましたが、コミュニティとして集まり、彼らはそれをリリースしました(他の電話のツリーもいくつか)。ソースコードが中途半端で、ボード設定が電話で起動しないことに、私はどれほど驚いたか想像してみてください。幸いなことに、当時、私はMediaTekのALPSのフルソースのリークを見つけました。これは6589のバリエーションをターゲットにしており、有望に見えました(フルLittle-Kernelブートローダー、ベースバンド、プリローダー、Linuxカーネル、AOSPが含まれていました)。私は数ヶ月かけて、電話ベンダーが提供するストックブートイメージにバンドルされていたzImageのパーツをリバースエンジニアリングして、MediaTekコードのパーツ(主にlcm、バッテリー、チップセットの癖などに関連するもの)を埋めようとしました。そして、かなりの掘り下げと実験(そしてxda-developersのクールな人々との素晴らしいチャット)の後、私は電話でAndroid 5.0を実行することができました。完璧ではなかったことを心に留めておいてください。Bluetoothなし、HWComposer(ハードウェアアクセラレーション)なし、メディアエンジンなし…しかし、私の電話で純粋で偽りのない新しいマテリアルデザインを見ることができたのは、私を感動させました。Android 5.0 Lollipop
いつか、この話は別に投稿すべきかもしれません。
セガ32X
1994年11月にアメリカ/ヨーロッパ(1994年12月に日本)でリリースされたセガ32Xは、16ビット時代のGenesisと間もなく登場する32ビットのセガサターンとの中間ステップとなることを約束したアドオンでした。私はあまり文章が得意ではないので、その特定の瞬間(セガにとって)に至るまでの物語は少し波乱万丈です(SEGA Japan対SEGA of America)。そのため、読者の課題として残しておきます。いずれにせよ、32Xの前に、SEGAはCDアドオン、セガCD(またはヨーロッパ/日本の場合はMega CD)を発売しました。それはGenesisの拡張スロットに接続され、CD品質のオーディオストリーミング(そして、ゲーム/ゲームアセットのストリーミング)を可能にしました。それはそれ自体でマシンでした(Genesisと比較して、よりクロックの高い68000を搭載していました)。2つの別々のモデルがありました。最初の「世代」はフロントローディングでした…
Sega [Mega]CD Model 1 with Mega Drive/Genesis Model 1
…そして2番目のトップローディングモデルです。
Sega [Mega]CD Model 2 with Mega Drive/Genesis Model 2
しかし、この投稿は32Xについてなので、ここにあります。
Sega 32X
実際のアドオンは、Genesisのカセットスロットに接続されていました(独立した電源ブリックとビデオ出力があり、後者はGenesisのビデオ出力タイミング/ビデオ/カラーチャンネル信号の上に「結合」されました)。
Sega 32X & Genesis Model 2
タワー・オブ・パワーを構築した経験があるなら、3つの独立した電源ブリック、32Xからステレオ出力を得るためのケーブル、パッチケーブル、そしておそらく今私が忘れている多くの欠けている小物があったことが、派手でないわけではなかったことを知っているでしょう。しかし、それだけのパワーは何のためだったのでしょうか?
32Xハードウェア仕様
確かに、アドオンはベースコンソールよりもはるかに強力です。
| コンポーネント(s) | Sega Genesis/Mega Drive | Sega 32X |
|---|---|---|
| メインCPU | 1 x Motorola 68000 @ 7.6 MHz | 2 x Hitachi SuperH SH2s (SH7604) @ 23 MHz |
| ビット | 16ビット | 32ビット |
| 最大画面表示色数 | 64 | 32768 |
| システムRAM | 64KB | +256KB SDRAM (Genesisの64Kに加えて) |
| ビデオRAM | 64KB | 256KB (ダブルバッファリング) |
| グラフィックス | スプライトベース | ソフトウェアレンダリング3D (フラットシェーディング、ゴローシェーディング、シンプルなテクスチャマッピングポリゴン) |
ご覧のとおり、かなりの違いがあります。私はすべての違いをリストアップしていませんが、私が思いつく主な違いはそれらです。残念ながらセガにとって、発売はソニーのPlayStation 1とほぼ同時期でした。これは、はるかにシンプルなアーキテクチャでゲーム業界を席巻する準備ができていました。また、SEGA Saturnの発売日も近かったため(消費者はどちらを入手すべきか困惑していました)、それは全く助けになりませんでした。すべては、真のセガ流で!
いずれにせよ、JaguarでLinuxを動かせたなら、32Xでも同様にできるはずですよね?
jmp _linux, the rendezvouz
SH2でLinuxを実行させること(UART経由で何か意味のあるものを印刷させること)は、ブレインストーミングが必要でした。3つの異なるCPU、2つのSH2と68000を設定する必要があります。幸いなことに、Githubにはそれに関するすぐに利用できる例がありますので、最も人気のある32X Hello Worldの例を選びました:Chilly Willy's Sega MD/CD/32X devkit。基本的な例は、32Xと68000の間に通信チャネルを設定し(そのため、32Xができないことを68000に実行させるように依頼できます)、特定のメモリマップドIOアドレスを介して、SH2を準備します(キャッシュを設定し、68000マシンコードから直接カセットからSH2コードをアップロードします…)そしてプライマリSH2をそれにジャンプさせます。セカンダリは駐車されます。私がしたことは、UARTに文字をプッシュできるシンプルなステートマシンを持てるようにこれを拡張することでした(32XはUARTに直接アクセスできないため)。しかし、問題がありました…
256K + 64K
新しい(そして、発売当時としては比較的新しい)プラットフォームにLinuxを移植する際の最大のハードルは、通常、それをロードできるメモリがある場合に、起動させるための配線を行うことです。これは私たちの場合ではありません…幸いなことに、コンソール用のFPGAベースのフラッシュカートがあります(ベースモデルと32Xの両方のゲームを実行できます。アドオンがない場合でも、セガCDサポートを提供する特別な「コア」さえあります!)。それらのカート(シリーズ)の1つはKrikkzから来ています。彼はフラッシュカートがすることをしただけでなく、ほぼすべての面でさらに一歩進みました。ゲームを実行するだけではありません!
私たちが興味を持っているカートの特別な部分があります:Extended SSFv2 Mapper
古いカセットベースのシステムはしばしば「マッパー」という概念を持っていました。マッパーは基本的にカセットに搭載されたICで、コンソールがメモリに関して処理できる機能を強化しました。メモリ以外の機能を提供することもできました。例としては、セガのVirtua Processor(SVP)があり、Samsungが設計したDSPを搭載して重い数学計算を行い(Virtua RacerがベースGenesisで3Dポリゴンの栄光をすべて表示できるようにするため)、任天堂のSuperFXチップは、SVPと同様の機能を提供し、Days of ThunderまたはBirds of Preyの作成者によって作成されました。