2 ポイント 投稿者 GN⁺ 2024-05-13 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-05-13
Hacker Newsのコメント

要約:

  • 投稿者が20年にわたって断続的に取り組んできたバケットリスト・プロジェクトのうち、最初の完成作を公開した。かなり印象的なバケットリストに見える。
  • シンプルで制約の多い50年前の6502アーキテクチャを新たな限界まで拡張するのは、いつだって興味深い。6502コアは今でも、超低価格の大量市場向けSoCの一部で見られる。
  • 投稿者が6502アセンブリを初めて学んだときの記憶がよみがえった。当時は『The Visual Computer』という本が、エミュレータ付きのフロッピーディスクと一緒に提供されていて、大きな気づきを与えてくれた。本のPDFは見つかったが、そのフロッピーのソフトウェアが現存するかは不明。
  • 投稿本文で本当の核心は、Commodore 64が非常に異なる6502ベースのシステムをどうエミュレートするかという点だという。これを「6o6」または「6502-on-6502」と呼び、6502 CPU上で動作する完全に仮想化されたソフトウェアNMOS 6502 CPUとなっている。これはオープンソースで公開されている。
  • ゲストコードの実行を完全に制御でき、文書化されていないopcodeやjam opcodeをトラップでき、すべてのメモリアクセスを完全に抽象化することで、アドレス再マッピング、不正な読み取り/書き込みの遮断、完全な仮想メモリ実行が可能になる。
  • 機能テストに合格するだけでなく、自分自身を仮想化する自分自身をさらに仮想化できるほど完成度が高い。
  • 6502の観点から見ても、またどんな観点から見ても驚くべき仕事だ。
  • 「The Zilog Z80 has a Protected Mode」という動画も思い出したが、その動画はHNに投稿されたとき議論がなかった。
  • 読んでいて鳥肌が立つほど感動した。何度も読み返すことになりそうだ。