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