我打算在接下來的幾個月內創建一個世嘉主系統模擬器,作爲Java中的一個業餘愛好項目(我知道這不是最好的語言,但我發現它工作起來非常舒適,並且作爲Windows和Linux的常用用戶,我認爲跨平臺應用會很棒)。我的問題是關於週期盤點;關於模擬CPU時的週期計數精度的問題
我看過了另一個Z80模擬器的源代碼,併爲其他仿真器爲好,特別是執行環令我着迷 - 當它被調用時,一個int作爲參數傳遞(假設1000作爲一個例子)。現在我知道每個操作碼都需要執行不同數量的週期,並且在執行這些操作時,週期數會從整體數字中減少。一旦剩餘的週期數爲< = 0,則執行循環結束。
我的問題是,許多這些模擬器不考慮一個事實,即要執行的最後一條指令可以推動的週期數爲負值 - 這意味着執行環之間,一個最終可能會說,執行1002個週期而不是1000個。這是否有意義?有些模擬器通過補償下一個執行循環來解決這個問題,有些則不這樣做 - 哪種方法最好?請允許我說明,我不是特別好,我的問題,在把自己跨越:
public void execute(int numOfCycles)
{ //this is an execution loop method, called with 1000.
while (numOfCycles > 0)
{
instruction = readInstruction();
switch (instruction)
{
case 0x40: dowhatever, then decrement numOfCycles by 5;
break;
//lets say for arguments sake this case is executed when numOfCycles is 3.
}
}
這個特殊的循環示例結束後,numOfCycles將在-2。這隻會是一個小小的不準確,但這對人們的經歷總體而言是否重要?我很感激任何人對此的洞察力。我打算在每幀之後中斷CPU,因爲這看起來很合適,所以我知道1000個週期是低的,但這只是一個例子。
非常感謝, 菲爾
感謝:-)幾天前我看到這篇文章,這是一個非常有趣的閱讀。看起來我可以忽略這個問題 - 把我的工作剪掉,但應該很有趣! :-P – PhilPotter1987