我正在寫一個gameboy模擬器,並努力確保opcode正確地模擬。某些操作會設置標誌寄存器,並且可能很難追蹤標誌設置是否正確以及在哪裏。Gameboy模擬器測試策略?
我想寫某種測試框架,但認爲這將會是值得一問這裏的一些幫助。目前我看到幾個選項:
單位每個測試,並與多組測試每個操作碼。問題是有256個8位操作碼和50+(不能記住確切的數字)16位操作碼。這需要很長時間才能正確執行。
寫某種日誌框架,在每個動作日誌堆棧跟蹤,並將其與其他已建立的仿真器。這個過程非常快,並且可以快速瞭解到底發生了什麼問題。日誌文件看起來有點像這樣:
...
PC = 212 Just executed opcode 7c - Register: AF: 5 30 BC: 0 13 HL: 5 ce DE: 1 cd SP: ffad
PC = 213 Just executed opcode 12 - Register: AF: 5 30 BC: 0 13 HL: 5 ce DE: 1 cd SP: ffad
...
缺點是我需要修改另一個模擬器的來源輸出相同的形式。並且不能保證操作碼是正確的,因爲它假定其他仿真器是。
我還應該考慮什麼?
這裏是我的代碼,如果有幫助:https://github.com/dbousamra/scalagb
我喜歡在某些時間點比較內存映射的想法。 –
好吧我已經添加了一些測試來比較另一個模擬器(JavaBoy)的堆棧跟蹤。效果很好。 –
與其他仿真器相比,一個問題是很多仿真器不是很準確。我建議用專用的測試ROM進行測試。 – nijoakim