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