【问题标题】:Why are the upper bits of 53280 $D020 always set (c64)为什么总是设置 53280 $D020 的高位(c64)
【发布时间】:2017-01-11 23:23:07
【问题描述】:

至少运行 VICE 2.4:

PRINT PEEK(53280)
 254

POKE 53280,14

PRINT PEEK(53280)
 254

很明显only bits #0-#3 are used,用AND 15得到“正确”的值,但是为什么6510把高位设置为1

【问题讨论】:

    标签: c64 commodore


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。然而,一定有一个原因,为什么它是设计上的1,而不是更方便的0……也许是一些硬件优化,除非这纯粹是一个“随机”的设计选择。
    • 我不能代表 nMOS,但 TTL 通常会将任何未连接的输入读取为正电压或 1 位。这是晶体管在输入端排列方式不对称的产物。我忘记了细节,但快速搜索表明 TTL 输入要么被“拉到地面”(0)或“没有被拉到地面”(1),所以当什么都没有连接时,默认答案是 1(它也可能是最省电的答案是1)。 nMOS 可能使用了类似的 FET 排列……但我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多