2026-08

AI

M1 MacからWindowsとUbuntu VMをSSHで従える — インストーラ無しのクロスベンチ環境構築 (OpenSSH / MinGit / node.exe単体)

Rust製x86エミュレータ rustx86 のベンチマークを、M1 Mac・Windows実機・その上のUbuntu VMの3環境で横断的に取りたくなった。本編 (最適化戦記) で使った比較表の裏側 — M1 Macのターミナルから他の2...
AI

Rust自作x86エミュレータ最適化戦記 — QEMU式lazy flagsより「控えの薄切り」が効いた夜 (66→79 MIPS)

Rust製のx86エミュレータ rustx86 で、ブラウザ (WASM) でも動く32bit Linuxを起動している。前回までにフルブート10秒 (ネイティブ66 MIPS) まで来ていて、目標は100 MIPS。「エミュレータの速さは...
Rust

自作x86エミュレータ (Rust) のベンチマークが嘘をついていた — 固定3.7億命令のはずが200億命令走っていた話

自作のx86エミュレータには、開発初期から実行速度ベンチマークがある。命令数が固定のワークロードを流し、環境が変わってもMIPSを比較できるようにした自慢の仕組みだった。そのベンチが、ずっと別のものを測っていたことが今日わかった。UIの配色...
Rust

Rust自作x86エミュレータ、Linuxフルブート10秒への道 — デコードキャッシュとブロック連結で36→66 MIPS

Rustで依存ゼロのx86エミュレータを書いている。32bit Linux (Alpine 6.18) がブラウザ (WASM) でもネイティブでも起動するところまで来たが、問題は速度だった。シンプルなカーネルの起動に、ブラウザで2分半かか...
AI

Rust製x86エミュレータで本物のLinux 6.18を起動し、BusyBoxシェルでゲームを動かすまで

自作のx86エミュレータ rustx86 に、Alpine Linux の本物のカーネル (Linux 6.18) を食わせた。丸一日の格闘の末、start_kernel を完走し、ユーザー空間に降り、BusyBox のシェルに ~ # の...
16bit

Rust + WebAssembly の x86 エミュレータに gdb 風デバッガを作る — 倒れた場所は犯行現場ではない

自作の x86 エミュレータ (rustx86) で FreeDOS を動かしたら、Tab キーを押すとカーソルが画面の先頭へ飛んだ。Ctrl+C も効かない。前回はこの手のバグを、割り込みの統計ダンプと勘で追い詰めた。今回はその反省から、...
16bit

Rust + WebAssembly の x86 エミュレータで FreeDOS を起動して、ブラウザで DOS ゲームを動かした

Rustでエミュレータを書く 連載 第4回1. RustとWASMでゲームボーイエミュレータを作る2. x86エミュレータを自作する — 正解を知っているCPUに答え合わせさせる3. 8259 PIC と BIOS を書いて、16bit U...
16bit

Rust + WebAssembly で 8259 PIC と BIOS を書いて、ブラウザで 16bit UNIX (ELKS) をログインまで動かした

Rustでエミュレータを書く 連載 第3回1. RustとWASMでゲームボーイエミュレータを作る — テスト全通過から「実機の音」になるまで2. x86エミュレータを自作する — 正解を知っているCPUに答え合わせさせる3. Rust +...
16bit

x86エミュレータを自作する — 正解を知っているCPUに答え合わせさせる

Rustでx86エミュレータを自作し、リアルモード8086を動かすまでの開発記。x86には網羅テストROMがないため、QEMU由来のUnicorn Engineをオラクルにした比較実行(co-sim)で検証する。緑のテストを信用する前に変異テストで検出力を確かめ、ランダムでは踏めない境界値を総当たりで潰すまで。
AI

RustとWASMでゲームボーイエミュレータを作る — テスト全通過から「実機の音」になるまで

RustでゲームボーイエミュレータをフルスクラッチしWASMでブラウザ動作。Blarggテスト全通過、m-cycle精度化、そしてゲーム音楽が「キーキー」鳴る2つの原因(バッファ枯渇とエイリアシング)を計測で特定して完治させるまでの開発記。