AprNes 開發過程中累積的研究筆記與心得整理。從 NES 硬體模擬的設計理論, 到 C# / .NET 的微架構效能優化技巧,分類收錄於此。文章持續增加中。
以問答形式涵蓋現代模擬器的主要實作技術:JIT、DBT、KVM、LLVM 後端、靜態重編譯(Static Recompilation)、HLE GPU 橋接、AI 紋理超解析、Rollback 網路同步、MSU-1 音源置換、FPGA 模擬、Visual6502 電晶體級模擬與 Lean 形式化驗證等。第一章特別釐清「.NET / .NET Framework / Java 等語言層 JIT」與「模擬器 JIT / Dynarec」這兩個經常被混淆的概念,避免入門者走錯方向。後面七章逐項展開各技術的適用情境、邊界、實作挑戰,並對 4 種核心技術(JIT / DBT / KVM / Static Recomp)給出練習目標推薦。
按發售日期順序逐一介紹任天堂 12 款主流家用機與掌機(NES → Game Boy → SNES → N64 → GBC → GBA → GameCube → NDS → Wii → 3DS → Wii U → Switch),每台主機涵蓋四個面向:硬體架構與設計哲學、發售日期、模擬實作的核心技術難點(CPU 同步、PPU/GPU 渲染管線、加密、HLE/LLE 取捨等)、以及代表性的開源模擬器專案。文末附難度排名表跟學習路徑建議,適合想自己動手寫模擬器或評估該挑戰哪台主機的開發者。
為「會寫程式但不熟硬體」的初學者設計的逐章教學。從 NES 主機硬體觀念出發,逐步走到 AprNes / NesCore 的實作對照,涵蓋 ROM 載入、CPU bus、6502 核心、master clock 同步、PPU memory pipeline、APU、DMA、Controller、Mapper 0-4 等所有子系統,並用「廚房 / 主廚 / 工作檯」這類生活比喻把抽象概念接地氣。每章結構統一:硬體觀念 → 初學者簡化模型 → AprNes 實作對照 → 常見錯誤 → 重點整理。最後 A1 計算機組織複習與 A2 完整 256 opcode 實作參考可獨立查閱。
整理 AprNes 主線從 2026-03-15 起所有效能改動,聚焦在語言/Runtime 層級以下的優化技巧。涵蓋 11 大類:位元運算(用 & 取代 %)、Branchless 程式碼、查表法(LUT)、Magic Number、SWAR、真正 SIMD、整數取代浮點(Bresenham / Fixed-Point)、迴圈展開與 ILP、函式指標靜態分派、資料佈局與 Cache-line aware 設計、冗餘計算消除。每一節都附真實 commit 的 before / after 範例,方便對照學習。
從 Game Loop 出發,一路談到 CPU 快取階層、冷熱路徑拆分、多核流水線、執行緒親和性,並結合 AprNes 實戰的 PMU / ETW 分析流程。涵蓋 Inlining 與 I-Cache 的權衡、量化工具與階梯式策略、熱路徑溢出時的處理、跨核心溝通成本、C# 怎麼確保執行緒真正落在不同 core 上,最後延伸到高併發 web service。目標讀者是想從 JIT 行為與 CPU 微架構層級理解效能的開發者。
模擬器到底要把「時間」模擬到多細?這個問題看似效能議題,實則同時是架構、正確性、工程成本與維護性的問題。文章把常見的 timing 模型分類成從 frame-based、scanline、cycle、dot 一路到 sub-cycle / master clock,比較每一級買到什麼、付出什麼成本、能通過哪些測試 ROM。是設計新模擬器或評估既有模擬器精度的入門指南。
Catch-Up 在許多模擬器裡是省成本的主流做法 —— 讓某個元件先跑,等需要互動時再把其他元件補跑到正確時間點。但在追求 cycle-accurate 的設計裡,catch-up 帶來的副作用(延遲決策、補丁式邏輯、精度退化)反而成為包袱。文章解釋 AprNes 為什麼選擇 Mem_r → tick() → 3× ppu_step 的全域 tick 模型,以及這個結構讓哪些熱迴圈優化成為可能。
很多人以為 per-scanline 模擬器只是比較粗、比較不準、也比較容易做。實際上要讓 per-scanline 模擬器跑大多數遊戲不出錯,需要疊加大量的 hack 跟特例補償:MMC3 IRQ 時序、$2007 寫入時的 PPU 內部狀態、sprite 0 hit 的 cycle 精確位置、DMA 偷取週期……。文章梳理這些看不見的成本,解釋為什麼乾脆走 cycle-accurate 反而是更乾淨的設計選擇。
新的教學文章與技術心得會陸續加進來,包含 NTSC 訊號模擬、CRT shader 設計、SIMD 編程實踐、跨平台移植經驗等主題。也歡迎社群參與討論或在 GitHub 上提 issue 建議題目。
前往 GitHub