4

至少运行 VICE 2.4:

PRINT PEEK(53280)
 254

POKE 53280,14

PRINT PEEK(53280)
 254

很明显,只使用了#0-#3位,并且用 获得了“正确”的值AND 15,但是为什么6510将高位设置为1

4

1 回答 1

5

6510 CPU 没有将未使用的高位设置为 1;相反,没有内存支持相应 VIC 寄存器中的高位。所以发生的情况是,CPU 在写入时将任何 8 位值放在数据总线上,但 VIC 芯片只存储低 4 位;然后,当 CPU 尝试从该地址读取时,它会将 53280 放在地址总线上,VIC 芯片需要将所有 8 位放在数据总线上。但它只存储了低 4 位;较高的 4 位需要被伪造为 1。

当然,它也可以为这些额外的位选择其他假值(例如,它可以使用全 0);关键是,它必须是一个固定值,因为真正的 4 位从未存储在任何地方。

于 2016-09-04T13:52:15.010 回答