emulation - 解码 68k 条指令

标签 emulation decode 68000

我正在编写一个解释性 68k 模拟器作为个人/教育项目。现在我正在尝试开发一种简单、通用的解码机制。

据我了解,每条指令的前两个字节足以唯一标识操作(有两个罕见的异常(exception))和剩余要读取的字数(如果有)。

这是我想在解码阶段完成的任务:

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。必须有一些大图我失踪了。

Decoding Z80 Opcodes站点明确解释了解码,这是我在 68k 程序员引用手册或谷歌搜索中没有找到的内容。

最佳答案

我决定简单地创建一个查找表,其中包含每条指令的所有可能模式。这是我的第一个想法,但我因为“浪费、不雅”而将其丢弃。现在,我接受它“非常快”。

关于emulation - 解码 68k 条指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328383/

相关文章:

json - 从 JSON 解码为自定义对象

Python:Beautifulsoup 为 tis-620、字符集 windows-874 返回错误的解码

c - 防止 GCC 优化掉对内存映射地址的循环写入

android - 应用程序在模拟器上运行但不在真实设备上

encryption - 解码和解密有什么区别?

安卓模拟器无法上网

motorola - 为什么Motorola 68k的32位通用寄存器分为数据寄存器和地址寄存器?

c - m68k-elf 目标是否支持 GCC 内联 asm goto?

android - 模拟器真的很烦人的问题

node.js - 在本地主机模拟跨站请求