按照尼克梅龍鎮的評論(因此即時羣體維基),加載過程is a bit more complicated than you might naively guess:
現在,你可以從偏移量0x0010開始加載0x4000字節,並且將 作爲ROM加載到仿真的 6502的存儲器映射的$ 8000- $ BFFF和$ C000- $ FFFF中。
'現在'假設你要編寫一個NES模擬器,因此有一天會正確解析測試存儲在NES相關的文件格式並模擬NES特定的內存映射方案到內容的鏡像。
在此之前,您應該忽略註釋,您應該「在每個週期」[登錄]您的PC(並註冊)「,以及在該帖子之後的含義;他的意思是:
- 取出第一個操作碼字節之前,做一個程序計數器和其他寄存器的內部記錄;
- 在讀完最終操作數字節後,記錄您在步驟(1)中存儲的所有值加上完整指令及其反彙編。
如果您已經簡化了模擬器中的內容,以原子方式讀取和執行每個操作,然後將時間提前跳過應花費的週期數,那麼您可能會忽略臨時存儲。我懷疑生成示例日誌的作者已經實現了這種模擬。關鍵線索將是由操作碼索引的switch
表,它不以某種方式作爲協程和/或指令長度的查找表。
更多建議:
的NES實際上並不使用6502它採用省略了小數模式的克隆 - 十進制標誌也沒有效果。所以如果你正在模擬一個6502,期望測試結果在那裏變化。
對於其他好6502周的測試,請參閱:
我用這三種方法來引導我最近的6502仿真器,再加上一些自行編寫的循環週期測試,例如中斷,你不希望代碼位於6502的地址空間內能夠處理。
我後來發現,我在十進制處理方面有一個很小的偏差 - 小到足以通過所有這些測試,但不足以通過詳盡的6502比較。我在Acorn BBC社區發現了一個更好的測試,在檔案attached to this post內。我選擇通過:
- 加載
BCDTEST_beeb
的內容在0x2900
;
- 寫
JSR 2900h
地址0x200
;
- 把
RTS
置於0xffee
,但也確保你可以捕獲該地址;
- 將程序計數器設置爲
0x200
並繼續運行,直到它在0x203
;
- 然後測試
0x84
的值是0
。如果是別的東西,則表示失敗。
想要獲得更多反饋,任何時候PC進入0xffee
,都要在A寄存器中輸出ASCII字符。
看起來你需要在[0x8000和0xC000](https://github.com/PyAndy/Py3NES/issues/1)上加載它。 –
哦,這不是所謂的鏡像嗎? –