Стратегии тестирования эмулятора Gameboy? - PullRequest
4 голосов
/ 05 августа 2011

Я пишу эмулятор 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

Ответы [ 2 ]

7 голосов
/ 22 октября 2012

Вы можете использовать уже установленные тестовые диски. Я бы порекомендовал тестовые ромы Бларга. Вы можете получить их здесь: http://gbdev.gg8.se/files/roms/blargg-gb-tests/.

2 голосов
/ 05 августа 2011

Для меня лучшая идея - та, о которой вы уже упоминали:

  • взять существующий эмулятор, который хорошо известен, и у вас есть исходный код.давайте назовем это мастер-эмулятор
  • и возьмем некоторое ПЗУ, которое вы можете использовать для проверки
  • протестируйте эти ПЗУ в эмуляторе, который, как известно, хорошо работает.
  • изменить главный эмулятор , чтобы он создавал журнал во время работы для каждого выполняемого кода операции.
  • сделайте то же самое в своем собственном эмуляторе
  • сравните вывод

Я думаю, что у этого есть больше преимуществ:

  • вы будетеполучить файл журнала из хорошего эмулятора
  • результат теста можно оценить гораздо быстрее
  • вы можете использовать более одного эмулятора
  • вы можете пойти глубже, напримерпамяти в журнал и увидеть различия между двумя реализациями.
...