为什么总是设置 53280 $D020 的高位 (c64)

Why are the upper bits of 53280 $D020 always set (c64)

至少 运行 VICE 2.4:

PRINT PEEK(53280)
 254

POKE 53280,14

PRINT PEEK(53280)
 254

明明是only bits #0-#3 are used,"correct"值是用AND 15得到的,但是为什么6510设置上位 1?

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

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