我正在用C編寫我的第一個NES仿真器。目標是讓它易於理解並且循環準確(不一定必須是代碼效率),以便在正常的「硬件'的速度。在深入挖掘6502的技術參考資料時,看起來指令消耗的CPU週期不止一個 - 並且根據給定的條件(如分支)也有不同的週期。我的計劃是創建讀寫功能,並通過使用switch
尋址模式對操作碼進行分組。6502每個指令的週期時間
的問題是:當我有一個多週期指令,如BRK
,我需要效仿在每個週期中究竟發生了什麼:
#Method 1
cycle - action
1 - read BRK opcode
2 - read padding byte (ignored)
3 - store high byte of PC
4 - store low byte of PC
5 - store status flags with B flag set
6 - low byte of target address
7 - high byte of target address
...或者我能不能執行在一個「週期」(一個switch
case
)中的所有必需操作,並在剩餘的週期中不做任何事情?
#Method 2
1 - read BRK opcode,
read padding byte (ignored),
store high byte of PC,
store low byte of PC,
store status flags with B flag set,
low byte of target address,
high byte of target address
2 - do nothing
3 - do nothing
4 - do nothing
5 - do nothing
6 - do nothing
7 - do nothing
由於兩種方法都消耗了所需的7個週期,兩者之間是否沒有差異? (精度明智)
我個人認爲方法1的方式是對去解決,但是我想不出來實現它......一個適當的,簡單的方法(請幫助!)
它不會有所作爲,當你只** **模擬CPU。但考慮一下外設訪問與「STA」指令相同的內存 - 當存儲單元正好改變時,這可能很重要。所以,去選項1. –
至於如何,你將需要一個狀態機 –
你知道任何好的C實例或來源,實現方法1嗎?我所能找到的都是非C模擬器,有些在當前級別上太複雜:( –