Sega MegaDrive用Linux

Sega MegaDrive用Linux

LinuxMDプロジェクトは、Sega MegaDrive(北米ではSega Genesisとして知られています)へのLinuxカーネルの移植に成功しました。この成果は、Mega EverDriveカートリッジを利用してコンソールのネイティブなメモリ制限を回避し、現代的なカーネルが起動するために必要なハードウェア環境を提供することで実現されました。

ハードウェア要件とメモリ管理

Sega MegaDrive上でLinuxを動作させるには、1980年代の元の仕様を超えてシステムの能力を拡張するための特定のハードウェアが必要です。このプロジェクトは、特殊なSSF2マッパーを介して4MBのRAMを提供するMega EverDrive CoreまたはProカートリッジに依存しています。これは、MegaDriveのネイティブRAMがLinuxカーネルには不十分であるため、非常に重要です。

主要なハードウェア要件は以下の通りです:

  • Sega MegaDrive/Genesisコンソール。
  • Mega EverDrive CoreまたはProカートリッジ。
  • シリアルコンソールアクセス用にEverDriveをPCに接続するUSBケーブル。

MegaDriveのMotorola 68000 CPUにはメモリ管理ユニット(MMU)が欠如しているため、プロジェクトでは-nommuオプションでコンパイルされたカーネルを使用しています。これにより、Linuxはフラットメモリモデルで動作することができ、ハードウェアレベルのメモリ保護がないハードウェア上でカーネルを実行する唯一の方法となります。

ソフトウェアスタックとビルドプロセス

LinuxMD環境は、カスタムツールチェーン、ブートローダー、および軽量なルートファイルシステムを使用して構築されています。ビルドプロセスにはいくつかの異なる段階が含まれます:

  1. Toolchain: Buildrootを使用して、68000 CPU用のバイナリを生成できるm68k-linuxツールチェーンを構築します。
  2. Bootloader: カーネルイメージの初期ロードを処理するためにU-Bootを使用します。
  3. Kernel: Linuxカーネルイメージ(vmlinux.lz4)がコンパイルおよびロードされます。
  4. Root Filesystem: smolutilsを含むerofsイメージがrootfsとして使用されます。
  5. Utility Tools: シリアルコンソール通信のためにEverDriveとやり取りするためのmedtoolと呼ばれるカスタムツールが使用されます。

物理的なハードウェアを持っていない人のために、プロジェクトにはMegaDriveとEverDriveの特定のマッパーとタイマーレジスタをエミュレートするQEMU forkが含まれていますが、著者はQEMUが実際のハードウェアよりも大幅に高速にCPUをエミュレートすることを指摘しています。

システムパフォーマンスとインターフェース

機能的には動作しますが、現在の移植版は重大なパフォーマンスのボトルネックに直面しています。著者は、システムが「異常に遅い」と述べており、特にEverDrive FIFOとのやり取りにおいて顕著であり、さらなる最適化が必要であると示唆しています。

パフォーマンスの問題にもかかわらず、プロジェクトはシステムとやり取りするための2つの主要な方法を実装しています:

  • Serial Console: medtoolminicomを使用して、USB接続を介してPCからアクセスします。
  • VDP Console: MegaDriveのネイティブなビデオ出力を使用するカスタムコンソールです。このインターフェースには、カーネルが動作していることを示す「ハートビート」の緑のボックスと、ディスクのアクティビティを示す赤のボックスが含まれています。

コミュニティの洞察と技術的背景

プロジェクトを巡る技術的な議論は、この移植版の歴史的およびアーキテクチャ上の好奇心を際立たせています。コミュニティメンバーは、MegaDriveのCPU構成(Motorola 68000とZ80)と、TRS-80 Model 16のような初期のUnixマシンとの類似性を指摘しました。

メモリの制約に関して、ある貢献者は次のように述べています:

"I was wondering how it was squeezed into 64KB of RAM but it uses the 4MB on the Everdrive cart. With that it makes sense, considering Linux can run on an N64 with 4MB of RAM."

別のユーザーは、MMUに関する特定のアーキテクチャ上の制限について次のように指摘しました:

"The lowly 68000 in the Sega doesn't't have a memory management unit required for the full Linux experience, so what's really running here is a kernel compiled with the -nommu option."

Sources