NEC V20マイクロコード、ダイ写真とCNNで抽出
MartyPCの作者が、畳み込みニューラルネットワークを用いて5.6ギガピクセルのダイ写真からNEC V20のマイクロコードを解読し、29,928ビットを分類。V20 CPUのサイクル精度エミュレーションへの道を開く。

2020年、reenigneによる8088マイクロコードの解析は、Intelの基盤となるCPUの極めて正確なエミュレーションへの扉を開いた。今、同じ手法がNEC V20に適用されている。V20はより高速で8088互換のチップであり、多くのクローンやオリジナルIBM PCの後継機にも搭載された。MartyPCの作者は、これまでV20を拡張命令付き8088としてエミュレートしていたが、真のサイクル精度を求めていた。そのためには、NECが文書化しなかったV20のマイクロコードが必要だった。
それを入手するため、作者はInfoSecDJにV20のダイ(シャープのセカンドソース版)の撮影を依頼した。結果として得られたフォトモザイクは、なんと5.6ギガピクセル(70,478 × 80,672ピクセル)にも及び、JPEG形式では扱えない大きさだ。メインのマイクロコードROMは、ダイの中心のすぐ下に長方形のブロックとして現れる。ROMアレイは258 × 116で、29,928ビットを含む。これはV20のマイクロコードの語長である29で割り切れ、予想された1,024語ではなく1,032語であることを示唆する。この不一致はまだ説明されていない。
ビットを目視で読み取るのは退屈な作業なので、作者はMaskRomToolを使ってビット位置を定義した。しかし、明るい金属層によるビットと非ビットのコントラスト不足のため、しきい値ベースの検出は失敗した。それでもツールはビット位置をJSONにエクスポートできたため、作者はそれを使ってPythonスクリプトを作成し、各ビットの42×42ピクセルのPNGを抽出した。これは105MBの小さな画像のZIPファイルとなった。
計画は、畳み込みニューラルネットワーク(CNN)を訓練して各画像を0または1に分類することだった。作者はCNNの経験がなかったが、PyTorchを使って半日で作業を完了した。素早いtkinterツールで約1,000ビットを手動分類した後、CNNを訓練し、わずか10エポックで99.56%の検証精度と0.9891のF1スコアを達成した。これはCUDA GPUで数分の作業だ。モデルの信頼度スコアは、曖昧なビットを手動レビューのためにフラグ付けした。
この作業は、ディープラーニングがどれほど身近になったかを示す証である。また、レガシーハードウェアのリバースエンジニアリングにおけるダイ写真の価値も浮き彫りにする。抽出されたマイクロコードにより、MartyPCでのサイクル精度のV20エミュレーションが可能になり、レトロコンピューティング愛好家と研究者の両方に利益をもたらすだろう。
画像を0か1かの2つのバケツに分類するだけだ。問題は文字通り「ホットドッグか、ホットドッグでないか」である。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。