6o6による6502上での6502仮想化
(oldvcr.blogspot.com)6502 CPUを6502 CPUで仮想化する6o6の紹介(そして The Incredible KIMplement 1.0 のリリース)
- 著者が20年間断続的に取り組んできたバケットリスト・プロジェクトの1つである「The Incredible KIMplement」の1.0版を正式リリース
- The Incredible KIMplement は、1MHz・1KBメモリの MOS/Commodore KIM-1 6502 ベースのシングルボードコンピュータをエミュレートするプログラム
- Commodore 64 上で動作し、KIM-1 の TTY サポート機能と 16KB の拡張 RAM を提供
- さらに重要なのは、6o6(6502-on-6502)という完全仮想化された NMOS 6502 CPU を 6502 CPU 上で実装したこと
- ゲストコードの実行を完全に制御し、メモリアクセスを抽象化することで仮想メモリ上でも実行可能
- 機能テストに合格するだけでなく、自分自身を複数回仮想化することも可能
6502仮想化の動機と設計
- 子どもの頃に「究極のオペレーティングシステム」を作りたいと思っていたが、ほとんどは原始的なデモの域にとどまった
- マルチユーザーシステムに触れる中で、ユーザーが問題のあるコードを実行しうることに気づいた
- 効果的なシステムは、コードによって引き起こされる問題を防ぐか対処できなければならない
- 6502 CPU の限界により、ハードウェアだけでこれを完全に解決するのは難しい
- そこでソフトウェアで解決することにした
- 6o6 仮想マシン(VM)はゲストコードを実行し、メモリアクセスを完全に抽象化する
- Harness は、ゲストメモリやハードウェアに対する VM のインターフェースの役割を担う
- カーネルは VM を実行し、例外状況を処理する
- ALU 演算をホストの 6502 CPU で直接実行することで、正確性と性能を確保
- インラインメモリアクセス、Instruction Fusion などにより性能を最適化
6o6の検証とテスト
- Klaus Dormann の機能テストスイートを使って正確性を検証
- lib6502 エミュレータを使って性能を測定
- インラインメモリアクセスと Instruction Fusion の適用により、命令実行回数を 36.5% 削減
- Commodore 64 と Apple IIe で動作するデモプログラムを4本収録
- Hello World
- 自分自身を複数回仮想化
- 2つの独立したタスク間の切り替え
- geoRAM カートリッジを使った 64KB アドレス空間のエミュレーション
6o6の潜在的な活用分野と追加改善アイデア
- カスタムオペレーティングシステムの開発
- 安全なダウンロードコード実行環境
- Gopher クライアントでの動的コード実行など
- NMOS 6502 システムで最小限のハードウェアによる仮想化支援
- ROM 上で動作できるようにリファクタリング
- CMOS 65C02 命令のエミュレーション
- さらなるコード最適化
GN⁺の意見
-
6o6 は優れたソフトウェア仮想化ソリューションに見える。特にハードウェア資源が限られた 6502 システムで有用そうだ。
-
Harness とカーネルのモジュール化された構造が印象的だ。さまざまなハードウェア対応と柔軟性の確保に役立ちそうだ。
-
エミュレータ性能最適化のために適用された手法(インラインメモリアクセス、Instruction Fusion など)は興味深い。他のエミュレータプロジェクトにも応用できそうなアイデアだと思う。
-
実機ハードウェア(Commodore 64、Apple II)や geoRAM のような拡張カートリッジでの動作を実演している点も印象的だ。ソフトウェアの互換性と活用性をよく示している。
-
完成度の高いプロジェクトであるだけに、ソースコード公開を通じて関連コミュニティに貢献できそうだ。今後の改善や活用事例にも期待したい。
1件のコメント
Hacker Newsのコメント
要約: