gpt4 book ai didi

assembly - 如何更改 Commodore 64 中的内核 MONKEY 例程行为

转载 作者:行者123 更新时间:2023-12-02 19:22:14 25 4
gpt4 key购买 nike

我正在尝试使用 Commodore 64 中的内核例程来实现游戏控制。

下面的代码可以正常工作,但有一个异常(exception)。每个击键都算作单个输入。例如:如果按住按钮,则没有任何效果。每次移动都必须松开并再次按下。我怎样才能改变这种行为?只是我想只要按住键就重复该操作。

    GETIN  =  $FFE4
SCNKEY = $FF9F

keyScan:
jsr SCNKEY ;get key
jsr GETIN ;put key in A

cmp #65
beq left

cmp #68
beq right

jmp keyScan

最佳答案

SCNKEY 不适合需要多个同时按键输入的游戏。它是无状态的,只是返回现在按下的“那个”键——也就是说,如果按下了两个键,它只会告诉您一个,并且官方不保证是哪个键。您可以做的最好的事情是考虑仍然按下一个键,直到 SCNKEY 报告按下其他按键或没有按下任何按键,但第二个同时按下的按键是否被忽略或替换的可能性是偶数第一个。

如果你的程序不符合只有按下“the”键的正统观念,你就必须自己敲击硬件。代码库64 offers some example code ;我的摘要版本是(已正确设置 CIA,尽管它可能已经进行了适当配置):

  1. 向 DC00 写入一个字节,其中包含您要同时扫描的每一行的 0;
  2. 从 DC01 读取一个字节并检查前四位以找出所选行上的哪些键被按下。

通用例程需要单独测试每一行以避免阴影 - 假设您要求通过在位 3 和 4 中存储 0 到 DC00 来同时读取第 4 行和第 5 行,并且您得到的结果是顶部有点清楚,您不知道是否按下了 v 或 n 或两者都按下了,只知道至少其中之一按下了。

请参阅上述同一链接的最底部,了解英语键盘上的行和列的表格;它们是物理按键布局的结果,因此其他语言的差异与键盘的差异一样大。如果您正在编写游戏并且您对按键的布局比其符号更感兴趣,那么您不必担心语言。

关于assembly - 如何更改 Commodore 64 中的内核 MONKEY 例程行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com