为了好玩,我正在实现一个 NES 模拟器。我目前正在阅读 6502 CPU 的文档,我有点困惑。
我看过文档说明因为 6502 是 little-endian,所以在使用绝对寻址模式时,您需要交换字节。我是在 x86 机器上编写的,它也是 little-endian,所以我不明白为什么我不能简单地转换为 uint16_t*,取消引用它,然后让编译器计算出细节。
我在谷歌测试中写了一些简单的测试,他们似乎同意我的看法。
// implementation of READ16
#define READ16(addr) (*(uint16_t*)addr)
TEST(MemMacro, READ16) {
uint8_t arr[] = {0xFF,0xCC};
uint8_t *mem = (&arr[0]);
EXPECT_EQ(0xCCFF, READ16(mem));
}
这通过了,所以看来我的假设是正确的,但我想我会问比我更有经验的人。
这对于在 6502 绝对寻址模式下提取操作数是否正确?我可能错过了什么吗?