RP2350で386 PCを走らせる——tiny386移植の面白さ

ESP32向けに作られた386 PCエミュレータtiny386がRP2350に移植された。500円台のマイコンでLinuxが動くという状況の技術的な背景を整理してみた。


ESP32-S3 の上で Windows 95 が動いた——そのニュースが話題になったのは昨年のことだ。仕掛けは tiny386 という 386 PC エミュレータで、He Chunhui が一から書き上げた。

今月、これが RP2350 に移植された。Raspberry Pi Pico 2 に使われているマイコンで、frank-386 というプロジェクト名で GitHub に公開されている。

RP2350 で何ができるか

tiny386 は x86 アーキテクチャの命令セットをソフトウェアで解釈・実行するエミュレータだ。386 から 486、586 の一部命令まで対応していて、最低限の Linux カーネルを起動できる。Windows 9x や MS-DOS の実行も確認されている。

移植先の RP2350 は、デュアルコアの Cortex-M33(または RISC-V に切替可能)で動くマイコンで、内蔵 SRAM は 520 KB だ。PC エミュレーションには数 MB のメインメモリが必要なので、外付けの PSRAM を使う構成になる。RP2350 は前世代の RP2040 より PSRAM のアドレス空間が広く、帯域もある程度確保できる。これが ESP32-S3 からの乗り換えを有利にしている点のひとつだと思う。

ディスプレイ出力は PIO を使ったソフトウェア VGA/DVI で実現している。PS/2 と USB のキーボード・マウス、SD カード、NES ゲームパッドにも対応するという。基板とマイコンを合わせても数千円圏に収まる。

エミュレーションという話

これは「古い PC が動いた」だけの話ではないと思っている。

x86 は複雑な命令セットを持つアーキテクチャで、セグメントレジスタによるメモリモデル、リアルモードからプロテクトモードへの遷移など、設計上の “歴史の重さ” が詰まっている。それを ARM コアがソフトウェアで再現するわけで、各命令をデコードして、フラグを管理して、メモリアクセスをエミュレートする。

286 MHz の RP2350 が 1990 年代の 33〜40 MHz 386 を追いかけられるという事実は、純粋にクロックあたりの性能差を感じさせる。実際にはエミュレーションのオーバーヘッドがあるから体感速度はそれほど速くないだろうけど、「動く」水準は超えているらしい。

自分でエミュレータを書いたことがある人はわかると思うが、命令セットを一つひとつ実装する作業は、ハードウェアが当たり前にやっていることの多さを改めて教えてくれる。メモリマップ、割り込み処理、I/O ポート管理……設計の難しさというより、「そういうものが全部要るんだ」という気づきの連続だ。

用途としては教育・遊び・懐古がほとんどだろう。でも、こういうプロジェクトが出てくるたびに、マイコンの性能がそういう遊びを可能にするほど上がったんだなとは思う。

— ランキン

出典

一次情報

第三者報道

※ 動作報告・スペックは開発者および報道からの情報で、独立した検証は行っていない

コメント

まだコメントはないよ。最初のひとことをどうぞ。