Assembly 如何改变Commodore 64中的内核SCNKEY常规行为
我正在尝试使用Commodore64中的内核例程实现游戏控件 下面的代码只有一个例外。每个按键笔划都算作单个输入。e、 g:如果你一直按住按钮,就没有效果了。每次移动都必须释放并再次按下。我怎样才能改变这种行为?只要按住键,我就想重新开始动作Assembly 如何改变Commodore 64中的内核SCNKEY常规行为,assembly,kernel,6502,c64,Assembly,Kernel,6502,C64,我正在尝试使用Commodore64中的内核例程实现游戏控件 下面的代码只有一个例外。每个按键笔划都算作单个输入。e、 g:如果你一直按住按钮,就没有效果了。每次移动都必须释放并再次按下。我怎样才能改变这种行为?只要按住键,我就想重新开始动作 GETIN = $FFE4 SCNKEY = $FF9F keyScan: jsr SCNKEY ;get key jsr GETIN ;put key in A cmp #65 beq le
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;我的摘要版本是(正确设置了CIA,但可能已经进行了适当配置):
请参阅上面相同链接的最底部,以查看英语键盘上的行和列表;它们是物理键布局的结果,因此其他语言的差异与它们的键盘一样大。如果你在写一个游戏,你对按键的布局比对它们的符号更感兴趣,那么你不必担心语言 是的,C64没有重复键(就像我现在输入的编辑器一样) 解决此问题的典型方法是轮询内存位置197,它保存当前键盘扫描代码。要进行尝试,请运行以下命令: 10 printpeek(197):转到10
您可以看到197的值发生了变化,并且实际上保持了它的值。当然,键值不是ascii,甚至不是petscii,但你可以通过实验找到你感兴趣的键值的扫描码。这类似于ZX Spectrum,在ZX Spectrum中,有些游戏确实使用多行的“阴影”来允许在多行键盘上用相同的键控制游戏(例如“k/l”)与“o/p”的工作方式相同。(不确定键盘的实际布局,也许我是1)。对于像arkanoid这样的一些游戏,实际上几乎整个键盘都是左键或右键工作的。:这是一个很好的问题