Я пишу интерпретированный 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.