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

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

Anywhom, вот мой код.

РЕДАКТИРОВАТЬ: я забыл объяснить мой вопрос:

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

2

Решение

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]