Я пишу эмулятор ЦП 6502, используя Rust, и я пытаюсь сделать свой код как можно более СУХИМ.
Код для декодирования опкодов и их выполнения выглядит так:
//self refers to CPU struct
match opcode {
0x29 => {self.A &= self.imm(); update_flags!(self.cpu, "Z0", "N7");},
// ... other 55 opcodes
}
Мне нужен простой способ обновить флаги ЦП после выполнения каждой инструкции. Например, после выполнения инструкции AND должен быть установлен флаг Z, если A = 0, и флаг N должен быть установлен, если бит 7 равен 1. Я мог бы описать эти два условия как Z0 и N7.
Мне нужно написать макрос, который принимает структуру ЦП, Z0 и N7 в качестве аргументов и расширяется во что-то вроде:
if self.A == 0 {set flag Z};
if self.A.7thbit == 1 {set flag N};
Это возможно?