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로 설명 할 수 있습니다.
내가 좋아하는 무언가로 인수로, Z0 및 N7을 CPU 구조체를 받아 확장 매크로 작성해야
:
if self.A == 0 {set flag Z};
if self.A.7thbit == 1 {set flag N};
이 가능를?
왜 매크로 여야합니까? 'Z'와 'N'이라는 함수를 갖는 것은 잘못된 것입니다. fn Z (& mut 자체, 값 : u8) {self.z_flag = self.A == 0; }'와'fn N (& mut self, bit : u8) {self.n_flag = self.A & (1u8 << bit)! = 0; }'그럼 self.Z (0);로 호출 할 수 있습니다. 자기 .N (7);'. 상수 인수를 사용하여 호출하면 매크로만큼 효율적이어야합니다. – user4815162342
예, 필자는 기능을 능동적으로 사용할 것입니다. 결국 그들은 디버그하기가 더 쉽습니다. –
나는 위의 답변을 게시했습니다. – user4815162342