我一直在尝试为摩托罗拉 68000 格式化二进制操作码,但我一直发现不可能同时对目标内存地址、指令指定和寻址模式/大小以及要复制到内存映射的地址总线的数据值进行编码输入/输出。
对于 Sega Genesis 的视频显示处理器,我正在尝试写入控制端口,该控制端口在 Genesis 的内存映射中的 C00004 内存映射。
C0004 是二进制的 1100 0000 0000 0000 0000 0100 或三个字节。我正在写入的值是 87,VDP 在 VDP 寄存器 #7 中将其识别为 8787。我遇到的问题是弄清楚如何编码 32 位的数据,例如指令前缀指定move.b
、值 87,以及MMIO 重新路由到正确 VDP 端口#$87
的目标内存地址C00004
人民民主党。
总而言之,它看起来像这样:
move.b #$87, $00C00004,
松散地转换为不是四个,而是四个字节和一个半字节(准确地说是 36 位!)
0001 1000 0111 1100 0000 0000 0000 0000 0100
由于 Motorola 68000 在处理到microcode时只会解析 32 位,如果没有足够的空间(并且在同一指令内),如何编码所需的信息?
我知道这超出了大多数程序员的预期水平,但我希望周围的人可以为我分解它并解释这种编码方案是如何工作的。