1
我正在写一个使用Rust的6502 CPU模拟器,我试图尽可能地让我的代码尽可能干。如何编写一个有条件地更新仿真器CPU标志的宏?
解码操作码的代码并执行这些看起来是这样的:
//self refers to CPU struct
match opcode {
0x29 => {self.A &= self.imm(); update_flags!(self.cpu, "Z0", "N7");},
// ... other 55 opcodes
}
我希望有一个简单的方法执行每条指令后更新CPU的标志。例如,执行AND指令后,如果A = 0,则应设置标志Z,如果位7为1,则应设置标志N.我可以将这两个条件描述为Z0和N7。
我需要编写一个宏,占用CPU结构,Z0和N7作为参数,并扩展到类似:
if self.A == 0 {set flag Z};
if self.A.7thbit == 1 {set flag N};
这可能吗?
为什么这是一个宏?有一个名为'Z'和'N'的函数会有什么问题,例如fn Z(&mut self,value:u8){self.z_flag = self.A == 0; }&'fn N(&mut self,bit:u8){self.n_flag = self.A&(1u8 << bit)!= 0; }'那么你可以称它们为'self.Z(0); self.N(7);'。当用常量参数调用时,它们应该像宏一样有效。 – user4815162342
是的,我会适当地使用功能。最后,它们更容易调试。 –
我现在发布了上面的答案。 – user4815162342