Уменьшить размер оператора switch в эмуляторе?

Я начал писать эмулятор DCPU-16, используя эту спецификацию v1.7. Я начал разрабатывать архитектуру, и мне не нравится тот факт, что я использую очень длинные операторы switch. Я впервые пишу эмулятор, и поэтому я не знаю, есть ли лучший способ сделать это. Хотя переключатели не такие большие, из-за небольшого количества кодов операций DCPU (и того факта, что я еще не реализовал инструкции), я могу себе представить, если бы я писал эмулятор для более крупной инструкции, задающей операторы switch будет огромным

В любом случае, вот мой код.

РЕДАКТИРОВАТЬ: Я забыл передать свой вопрос:

  • Есть ли лучший способ создать эмулятор, чем использовать массивный коммутатор?

1 ответ

Решение

Этот подход кажется мне разумным. Это, конечно, то, как я бы это сделал (я написал несколько эмуляторов процессора и подобных типов кода).

Ближайшая альтернатива - это набор указателей на функции, но некоторые из ваших случаев, вероятно, будут довольно простыми (например, cpu_regs.flags &= ~CARRY или же if (cpu_regs.flags & CARRY) do_rel_jump(next_byte());, поэтому использование указателей на функции замедлит вас.

Вы можете объединить все "Операция не указана" в одном месте, что значительно сократит количество строк, но количество случаев, конечно, останется прежним [если вы не введете его в default:].

Другие вопросы по тегам