Расшифровка 68к инструкций - PullRequest
       16

Расшифровка 68к инструкций

5 голосов
/ 07 сентября 2011

Я пишу интерпретированный 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 явно объясняет декодирование, чего я не нашел в справочном руководстве программиста 68k или в поиске по Google.

1 Ответ

2 голосов
/ 14 сентября 2011

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

...