Вопрос

Я пишу интерпретированный эмулятор 68K как личный/образовательный проект. Прямо сейчас я пытаюсь разработать простой, общий механизм декодирования.

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

Вот что я хотел бы достичь на своей фазе декодирования:

1. read two bytes
2. determine which instruction it is
3. extract the operands
4. pass the opcode and the operands on to the execute phase

Я не могу просто перенести первые два байта в таблицу поиска, как я мог с первыми несколькими битами в арке RISC, потому что операнды «на пути». Как я могу сделать часть 2 в целом?

В целом, мой вопрос: Как удалить изменчивость операндов из процесса декодирования?

Больше фона:

Вот частичная таблица из Раздела 8.2 справочного руководства программиста:

Table 8.2. Operation Code Map

Bits 15-12      Operation
0000            Bit Manipulation/MOVEP/Immediate
0001            Move Byte
...
1110            Shift/Rotate/Bit Field
1111            Coprocessor Interface...

Для меня это имело большой смысл, но затем я смотрю на битовые узоры для каждой инструкции и замечаю, что нет ни одной инструкции, где биты 15-12-0001, 0010 или 0011. Должен быть какой-то большой кусок картинки что мне не хватает.

Этот Декодирование Z80 Opcodes Сайт явно объясняет декодирование, что я не нашел в справочном руководстве по программисту 68K или по Googling.

Это было полезно?

Решение

Я решил просто создать таблицу поиска со всеми возможными шаблонами для каждой инструкции. Это была моя первая идея, но я отказался от этого как «расточительного, неэлегантного». Теперь я принимаю это как «очень быстро».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top