シミュレータ
MOS 6502 のトランジスタレベルシミュレーション。Rust と WebAssembly 製で、実物のダイを描く WebGL レンダラを備える。visual6502 の一からの再構築であり、そのダイトレースとシミュレーション手法の上に建っている。
ここには 6502 の挙動をモデル化したものは何も無い。命令デコーダも、アドレッシングモード表も、サイクル数の一覧も無い。あるのは 1725 本の配線と 3510 個のスイッチで、挙動はそれらをシミュレートした結果として現れる。目に見えるレジスタの値はすべてダイ上の記憶ノードから読み戻したもので、サイクル数はすべて創発したものだ。
何をするか
- 実物のチップを走らせる。 revD ダイのスイッチレベルシミュレーション。 オリジナル実装に対してビット単位で一致することを検証済み。
- ダイを見せる。 実ポリゴン形状の 83,227 枚の三角形が、任意のズームで、 論理状態を生きたまま映す。
- 信号を追跡する。 配線をクリックすると、その瞬間に何と繋がっているかが 見える。トランジスタが切り替わるたび、接続グループは変わる。
- 後ろに戻れる。 直近 4096 半サイクルをキーフレームで巻き戻す。
- マイクロアーキテクチャを露出する。 内部 T ステート、クロック位相、バスの ハンドシェイク、ALU の保持レジスタ。挙動エミュレータが塗り潰してしまうものも含めて。
どのレジスタにも無い演算結果
6502 は、命令が終わる時に ALU の結果をアキュムレータへ入れない。ADC は
次のオペコードフェッチに達してもまだアキュムレータに古い値を持っている。
結果は ALU の保持レジスタに座っていて、1 サイクル遅れて転送される。ALU を迂回する LDA は、1 サイクル早く着地する。
LDA #$50 / CLC / ADC #$50 を半サイクルずつ進めて、A が実際にいつ変わるかを見てほしい。命令境界で結果を確定するエミュレータにはこれを見せることができない。シリコンにとって真実ではないからだ。
どう組み立てられているか
| クレート | 役割 |
|---|---|
v6502-netlist | 不変のトポロジ: ノード、トランジスタ、名前。状態は持たない。 |
v6502-sim | スイッチレベルのソルバ、6502 のクロックとバス層、巻き戻し。 |
v6502-wasm | wasm-bindgen の表面。 |
web/ | WebGL2 レンダラと UI。素の ES モジュール、フレームワーク無し、ビルド工程無し。 |
ノードの論理レベルはノードの属性ではなく、導通中のトランジスタを通していま短絡しているグループの属性だ。整定とは、グループを組み直し、それぞれをレベルに解決し、伝播させ、不動点まで繰り返すことをいう。
レンダラは一つの事実の上で回っている: レイアウトは決して変わらない。三角形は GPU に一度だけ送られ、以降の各フレームはノードレベルの 1725 バイト配列だけをテクスチャとしてアップロードし、頂点シェーダがノード ID で標本化する。1 フレームは 6 回のドローコールで、ズームによらない。
速度
ネイティブでおよそ毎秒 28,500 半サイクル。オリジナルの JavaScript 実装のおよそ 94 倍にあたる。この数字はネイティブエンジンのもので、提供中の API のものではない: API のページがインスタンスごとの数字を載せていて、そちらは低く、別々に実測されている。
再配布の前に、ライセンス
コードは MIT。だが土台のチップデータは違う。visual6502 サブモジュール内の
segdefs.js と transdefs.js、すなわちポリゴンとトランジスタの形状は
CC BY-NC-SA 3.0 で、著作権は 2010 年 Greg James、Brian Silverman、Barry
Silverman、クレジット表記は Greg James と www.visual6502.org に必要だ。
これが問題になるのは、ビルドがそのデータから派生するからだ。生成される
netlist.bin と layout.bin、それらを埋め込むあらゆる .wasm、デプロイされたあらゆるインスタンスは、NonCommercial と ShareAlike の条件を引き継ぐ。リポジトリがデータを再配布しないのはサブモジュールだからだが、ビルドは再配布にあたる。
要するに: フォークしてよい、学んでよい、クレジットを付けて非商用でホストしてよい。商用利用には、独立したダイトレースから形状を導出し直すか、権利者の個別の許諾が要る。
halfphi は例外で、その義務なしの MIT だ。チップを名指しせず、ダイデータを埋め込まないからだ。
クレジット
これが存在するのは、visual6502 のチームが 6502 を開封し、ダイを撮影し、すべてのポリゴンを手でトレースして、それを無償で公開してくれたからだ。Greg James、Brian Silverman、Barry Silverman、Ed Spittles、Segher Boessenkool、Achim Breidenbach、そして貢献したすべての人々に。