[心得] AprNes CRT 電視模擬功能介紹置底
4/12
◆ 這次更新了什麼
之前的 AprNes 已通過 AccuracyCoin (Commit 62ed684) 136/136
以及 blargg 174/174 測試,當時以為精度已經夠好了。
結果跑 scanline-a1 和 colorwin_ntsc 等測試 ROM 才發現
PPU 渲染還是有明顯瑕疵,根因是 timing 顆粒度不夠精確。
◆ TriCNES 時序架構移植
最終決定移植 TriCNES 的 timing 架構來提升精度。
TriCNES 是一款非常優秀的 NES 模擬器,偏向作者個人興趣下的
學術研究,以及追求 TAS 執行過程的極致正確性,設計方向一直
在朝真實電路級行為邁進,令人印象深刻。
● 第一次移植:改善 PPU 測試 ROM
移植前 AprNes 的 AccuracyCoin (Commit 62ed684) 就已經 136/136。
第一次移植主要是修 scanline-a1、colorwin_ntsc 等畫面瑕疵,
同時 blargg 從 174 增加到 184 項全過(含 10 個 PAL APU 測試)。
● AccuracyCoin 新版的衝擊
AccuracyCoin 更新到新版 (Commit 03385dd),測試從 136 增到 138 項。
之前版本直接被打掉 10 項,成績掉到 128/138。
● 第二次移植:應對新版 AccuracyCoin
重新移植 timing 架構,成績回到 135/138,修復後達 137/138。
但 $2007 Stress Test 怎麼都過不了,行為層級模擬碰到極限。
最後從 TriCNES 更新版移植了 SR Latch Pipeline 設計 ——
用 5 階段 NOR gate 鏈模擬 $2007 讀寫的時序管線,
基於真實電路描述 (RTL) 的設計理念,相當令人驚嘆。
只選擇性移植了解決最後一個測試所需的部分,最終達成:
★ blargg 184/184 全數通過
★ AccuracyCoin (Commit 03385dd) 138/138 滿分
◆ 效能影響
移植後效能受到相當大的衝擊。電路級時序模擬(SR Latch 每個
PPU dot 都要推進、Master Clock 驅動的子週期排程等)運算成本
不可忽視。
傳統的 Catchup 加速技巧在這架構下極難實現,因為:
- NMI/IRQ 精確到 Master Clock 層級
- SR Latch pipeline 每個 dot 都必須推進
- APU GET/PUT 半周期交替影響 DMC DMA 時序
- 新版 AccuracyCoin 直接驗證這些微觀行為
已完成的安全優化:位元管線化 SR latch、SWAR 64-bit 批次操作、
managed array 消除、方法 inline、Mode 0 音效取樣 catchup。
相信還有優化空間,需要更多時間。
以現代 CPU 效能來說,基礎模式可以流暢運行,但 AprNes 另外
加了不少影音 DSP 鏈(NTSC 類比模擬、CRT 效果、音效後處理),
開啟類比模式(特別是 Ultra Analog + CRT)處理性能可能吃力。
◆ Benchmark 工具
附帶三個效能測試批次檔:
benchmark_baseline.bat
基準測試。純數位模式(1x、無濾鏡),測量核心純粹效能。
benchmark_full.bat
完整管線。NTSC + 音效 Mode 2 + Analog + Ultra + CRT,
2x/4x/6x/8x 四種解析度分別測試。
benchmark_analog_full.bat
極限壓力。8x 解析度、Ultra Analog、RF 輸出、CRT、
音效 DSP Mode 2,測試硬體極限承受能力。
◆ 定位與建議
AprNes 偏向概念驗證與個人興趣,不是以大眾需求為最終方向。
如果你在意 Mapper 數量、介面完善度、除錯器等附帶功能,
目前最好的選擇仍然是 Mesen2。
不計代價把模擬正確性推到極致,比較偏向研究或個人挑戰。
如果之前版本用起來比較流暢,也喜歡它的音效畫面處理效果,
電腦效能不夠跑新版的話,沒必要更新。
◆ 未來發展
- 持續優化,不犧牲精度
- 增加中文常用 Mapper
- 最終以 .NET 10 版本發佈(類比/CRT 可能用 GPU 加速)
- 轉向研究 Visual6502,設計讓 Gate-level Netlist 模擬
能 real-time 跑遊戲的方案 —— 這才是我真正想做的東西
◆ 授權
WTFPL 授權,不保留任何著作權。任何設計歡迎自由使用、改善、
移植到你的專案。
程式本身借助 AI 協助實現,我真正的產出只有設計概念本身。
如果有人欣賞這個概念,歡迎完善。特別是影音 DSP 鏈可能
還有學術理論上的錯誤需要修正。
3/30
很多拉哩拉雜的更新 介面也大幅更新 搞到快像別的軟體
不過重點更新大概是下面這東西 AudioPlus的處理
https://tinyurl.com/yswxt6bw
已經盡可能改善效能 可以再用全螢幕試試看跑ultra類比
在我的電腦ok了 如果還是會降fps 可能得之後等我新的獨立專案
改用.net 10版本甚至搭配gpu版本試試看了
https://baxermux.org/myemu/AprNes/index.html
官網下載解壓縮後 會有一些readme文件 有詳細介紹更新項目
3/23 全螢幕試用版
https://tinyurl.com/hs8w7ek7
程式開啟可以在遊戲畫面上按滑鼠右鍵 呼叫出功能選單
有一個 畫面模式 可以選全螢幕 基本上 在我電腦4K已經可以順跑
不過是左右留黑邊維持正常比例的做法 加上在WINDOWS上要*一個縮放比例
所以輸出解析度計算負荷其實在能夠負荷的範圍
之後也來看看 一些其他FILTER效果差異 目前有收到一些國外網友回饋
在學理上有部分說法有問題 畢竟ai輔助coding 也可能會訓練到錯誤規格資訊
目前是希望盡可能朝向效果有依據 有論述的方向走 而不是感覺對感覺爽就好
所以後續應該陸續會修正一些處理方式 至於一般人 非開發者 原則只有一個
相信你自己的感覺 哪個呈現方式讓最符合你印象中的童年 自己開心就好
理論.對錯等等 那都是其次 只是我個人偏好而已
可以試試看全螢幕RF 那個真的很有味
3/22更新 用一堆parallel for和SIMD優化
至少在我電腦 類比模擬功能全開 8X下 可以到60FPS了
但性能弱的 可能4X就好 下載後 啟動程式 設定那邊
類比設定 相關選項都勾一勾 視訊端子選RF最古早味
建議先切類比解析度4X跑看看 需要再改6X 8X
跑超級瑪利歐3 真的超有FU
嫌口味太重可以改S或是AV端子
然後其實隨著電視顯示進步 不一定都爛到那樣
所以進階設定那邊可以改 反正看個人喜好
https://baxermux.org/myemu/AprNes
0322版本
PS.我會建議離螢幕遠一點的距離 就真的很接近CRT了
也可以跟其他模擬器比較看看 那些高運算不是沒道理的
多虧現在在2026年 跑NES模擬效能過剩 才可以這樣搞
古早時代 別說跑這種效果 連master clock都是根本不可能的事情
另外這是ai輔助coding 省了我很大力氣 但說真的 絕對不是啥
嘿..兄弟 幫我寫個模擬器 東西就能生出來....
中間過程還是有很多技術性的細節要引導要測試 要避免幻覺等等
github https://github.com/erspicu/AprNes/tree/master/MD
目錄裡有紀錄不少過程
另外.NETFRAMEWORK的東西有JIT 第一次開啟跑可能會lag跑一陣子關閉
再重開後效能會正常很多
裡面有很詳細的介紹
https://tinyurl.com/574rehzv
也有提到跟 Blargg 的 nes_ntsc 函式庫的差異性
我的版本比較偏向實驗性質 驗證物理與訊號處理的完整性
搞到現在有效能議題還在調整優化 4X我這邊還OK
6X 8X GG掉了
照理來說應該要調用gpu上場了 但想盡量簡單
盡可能靠基本的CPU和SIMD去解決
看能校調到什麼程度 晚點再打包發佈
PS.除非是7年級生前段班 不然知道RF輸入的人應該不多了
我這邊實作有實作到聲音訊號對畫面的干擾 看起來真的很有味道
因為RF是把音訊一起參入訊號內 解調會有影響
如果音量大啥的 畫面會有波動 不過RF這東西在我比較小時後才有體驗
後來NES好像最少都是AV端子了
至於SVIDEO輸出應該是NES時代末段的新機型才有
用過的人也不多
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.233.248.16 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Emulator/M.1774084976.A.9BD.html
※ 編輯: erspicu (182.233.248.16 臺灣), 03/21/2026 17:28:17
※ 編輯: erspicu (182.233.248.16 臺灣), 03/21/2026 17:31:19
→
03/21 18:55,
4周前
, 1F
03/21 18:55, 1F
推
03/21 20:18,
4周前
, 2F
03/21 20:18, 2F
※ 編輯: erspicu (182.233.248.16 臺灣), 03/22/2026 01:46:45
→
03/22 09:15,
4周前
, 3F
03/22 09:15, 3F
→
03/22 09:21,
4周前
, 4F
03/22 09:21, 4F
→
03/22 09:22,
4周前
, 5F
03/22 09:22, 5F
對 台灣小時候買到的 很多都是盜版的 但那時候我也分不清楚 沒意識到這件事情
然後以前我聽FC的簡稱比較順耳 畢竟台灣是玩日版的紅白機
但模擬器程式.社群 老外習慣用NES簡稱 所以當初對專案名稱也有猶豫
最後西瓜靠大邊 決定用NES命名 後來就習慣了 老外都在那邊NES來NES去的
反來是FC這日版主機的說法 相對稍微弱勢一點了 個人感受 不是客觀統計
PS.個人有過聽到NES這種說法會不舒服的階段 到後來習慣甚至取代
※ 編輯: erspicu (182.233.248.16 臺灣), 03/22/2026 10:52:02
推
03/22 15:54,
4周前
, 6F
03/22 15:54, 6F
→
03/22 16:17,
4周前
, 7F
03/22 16:17, 7F
3/23更新
※ 編輯: erspicu (182.233.248.16 臺灣), 03/23/2026 23:13:43
※ 編輯: erspicu (182.233.248.16 臺灣), 03/23/2026 23:17:15
推
03/24 08:21,
3周前
, 8F
03/24 08:21, 8F
推
03/24 13:24,
3周前
, 9F
03/24 13:24, 9F
→
03/24 13:24,
3周前
, 10F
03/24 13:24, 10F
→
03/24 13:24,
3周前
, 11F
03/24 13:24, 11F
→
03/24 13:24,
3周前
, 12F
03/24 13:24, 12F
推
03/24 21:02,
3周前
, 13F
03/24 21:02, 13F
一些雜七雜八的問題 我假日再彙整發佈好了
※ 編輯: erspicu (182.233.248.16 臺灣), 03/26/2026 00:56:54
再用新版試試看 沒辦法的化 就暫時先沒辦法了 以後等新專案
※ 編輯: erspicu (182.233.248.16 臺灣), 03/30/2026 01:47:18
→
03/31 16:16,
2周前
, 14F
03/31 16:16, 14F
※ 編輯: erspicu (182.233.248.16 臺灣), 04/12/2026 23:06:51
※ 編輯: erspicu (182.233.248.16 臺灣), 04/12/2026 23:07:54
Emulator 近期熱門文章
PTT遊戲區 即時熱門文章
14
17