📚 Techbook 教學 / 心得 中文

技術文章

AprNes 開發過程中累積的研究筆記與心得整理。從 NES 硬體模擬的設計理論, 到 C# / .NET 的微架構效能優化技巧,分類收錄於此。文章持續增加中。


📖 綜合導論
模擬器主要技術名詞、邊界與選用建議的問答式總覽,以及任天堂主機 40 多年演進的開發指南。新讀者建議從這裡開始。
效能 架構 入門必讀 深度

模擬器技術問答集 — 從 JIT、DBT、KVM 到電晶體級模擬

以問答形式涵蓋現代模擬器的主要實作技術: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)給出練習目標推薦。

40 題 | 8 大章節 閱讀全文
架構 主機巡禮 深度

任天堂主機模擬器開發導論 — 從 1983 紅白機到 2017 Switch

發售日期順序逐一介紹任天堂 12 款主流家用機與掌機(NES → Game Boy → SNES → N64 → GBC → GBA → GameCube → NDS → Wii → 3DS → Wii U → Switch),每台主機涵蓋四個面向:硬體架構與設計哲學、發售日期、模擬實作的核心技術難點(CPU 同步、PPU/GPU 渲染管線、加密、HLE/LLE 取捨等)、以及代表性的開源模擬器專案。文末附難度排名表跟學習路徑建議,適合想自己動手寫模擬器或評估該挑戰哪台主機的開發者。

12 主機 | 40 多年演進 閱讀全文

📚 NES 模擬器系列教學
從零開始的 NES 模擬器實作教學系列,17 章 + 2 附錄,與 AprNes 程式碼章節對照。
架構 系列教學 深度

NES / AprNes 模擬器教學系列

為「會寫程式但不熟硬體」的初學者設計的逐章教學。從 NES 主機硬體觀念出發,逐步走到 AprNes / NesCore 的實作對照,涵蓋 ROM 載入、CPU bus、6502 核心、master clock 同步、PPU memory pipeline、APU、DMA、Controller、Mapper 0-4 等所有子系統,並用「廚房 / 主廚 / 工作檯」這類生活比喻把抽象概念接地氣。每章結構統一:硬體觀念 → 初學者簡化模型 → AprNes 實作對照 → 常見錯誤 → 重點整理。最後 A1 計算機組織複習與 A2 完整 256 opcode 實作參考可獨立查閱。

17 章 + 2 附錄 | 含廚房比喻 📂 完整目錄

效能優化
C# / .NET 模擬器的熱迴圈優化方法,從手寫技法到 JIT 與 CPU 微架構層面的設計考量。
效能 技法目錄 進階

AprNes 非 JIT 層優化技巧整理

整理 AprNes 主線從 2026-03-15 起所有效能改動,聚焦在語言/Runtime 層級以下的優化技巧。涵蓋 11 大類:位元運算(用 & 取代 %)、Branchless 程式碼、查表法(LUT)、Magic Number、SWAR、真正 SIMD、整數取代浮點(Bresenham / Fixed-Point)、迴圈展開與 ILP、函式指標靜態分派、資料佈局與 Cache-line aware 設計、冗餘計算消除。每一節都附真實 commit 的 before / after 範例,方便對照學習。

11 個技法 | 含 commit 對照 閱讀全文
效能 教學 進階

C# JIT 與 I-Cache 優化教學

從 Game Loop 出發,一路談到 CPU 快取階層、冷熱路徑拆分、多核流水線、執行緒親和性,並結合 AprNes 實戰的 PMU / ETW 分析流程。涵蓋 Inlining 與 I-Cache 的權衡、量化工具與階梯式策略、熱路徑溢出時的處理、跨核心溝通成本、C# 怎麼確保執行緒真正落在不同 core 上,最後延伸到高併發 web service。目標讀者是想從 JIT 行為與 CPU 微架構層級理解效能的開發者。

11 章 | 含 PMU 實戰 閱讀全文

🧩 模擬器設計理論
NES 硬體精確模擬的設計問題:要把時間模擬到多細?該不該用 Catch-Up?Per-Scanline 真的比較簡單嗎?
架構 教學

NES 模擬器 Timing 模型教學

模擬器到底要把「時間」模擬到多細?這個問題看似效能議題,實則同時是架構、正確性、工程成本與維護性的問題。文章把常見的 timing 模型分類成從 frame-based、scanline、cycle、dot 一路到 sub-cycle / master clock,比較每一級買到什麼、付出什麼成本、能通過哪些測試 ROM。是設計新模擬器或評估既有模擬器精度的入門指南。

分類學 + trade-off 比較 閱讀全文
架構 進階

AprNes 為什麼少用 Catch-Up,改走結構性優化

Catch-Up 在許多模擬器裡是省成本的主流做法 —— 讓某個元件先跑,等需要互動時再把其他元件補跑到正確時間點。但在追求 cycle-accurate 的設計裡,catch-up 帶來的副作用(延遲決策、補丁式邏輯、精度退化)反而成為包袱。文章解釋 AprNes 為什麼選擇 Mem_r → tick() → 3× ppu_step 的全域 tick 模型,以及這個結構讓哪些熱迴圈優化成為可能。

結構性 vs 補償性 閱讀全文
架構 進階

為什麼「高品質 Per-Scanline NES Emulator」其實很難

很多人以為 per-scanline 模擬器只是比較粗、比較不準、也比較容易做。實際上要讓 per-scanline 模擬器跑大多數遊戲不出錯,需要疊加大量的 hack 跟特例補償:MMC3 IRQ 時序、$2007 寫入時的 PPU 內部狀態、sprite 0 hit 的 cycle 精確位置、DMA 偷取週期……。文章梳理這些看不見的成本,解釋為什麼乾脆走 cycle-accurate 反而是更乾淨的設計選擇。

hidden cost 分析 閱讀全文

✍️

後續會持續補充

新的教學文章與技術心得會陸續加進來,包含 NTSC 訊號模擬、CRT shader 設計、SIMD 編程實踐、跨平台移植經驗等主題。也歡迎社群參與討論或在 GitHub 上提 issue 建議題目。

前往 GitHub