我正在编写一个解释的68k模拟器作为个人/教育项目。现在我正在尝试开发一个简单的,通用的解码机制。解码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时没有单个指令。我必须有一些大的图片丢失。
这Decoding Z80 Opcodes网站明确解释解码,这是我没有在68k程序员的参考手册或通过谷歌搜索找到的东西。
您的项目发展到什么程度,您有反汇编程序还是仿真程序? –
我还在构建一个生成完整查找表的脚本。大约完成了70%。 – mwcz
@CountablyInfinite你正在做一个类似的项目吗? – mwcz