wiz*_*wor 6 assembly kernel c64 6502
我正在尝试使用Commodore 64中的内核例程来实现游戏控制.
下面的代码有一个例外.每个键击计为单个输入.例如:如果你一直按住按钮就没有效果.您必须释放并再次按下每个动作.我该如何改变这种行为?只要关键按下,我就想重新开始动作.
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
Run Code Online (Sandbox Code Playgroud)
Tom*_*mmy 10
SCNKEY不适合需要多个同时键输入的游戏.它是无状态的,只是简单地返回现在按下的"键" - 即如果两个按下,它只会告诉你一个,并且官方不保证哪个.你能做的最好的事情就是考虑一个按键仍然被按下,直到SCNKEY报告其他东西被按下或者什么都没有,但是对于是否忽略第二个同时按键或者替换第一个同时按键,它甚至是可能的.
如果你的程序不符合正统,只有被按下的''键,你必须自己打硬件.Codebase64 提供了一些示例代码 ; 我的摘要版本是(已经正确设置了CIA,虽然它可能已经适当配置):
通用例程需要单独测试每一行以避免阴影 - 假设您要求在第3位和第4位将0存储到DC00时同时读取第4行和第5行,并且返回的结果清除了最高位,你不知道是否按下了v或n或两者,只有至少其中一个是.
有关英语键盘上行和列的表格,请参见上面相同链接的最底部; 它们是物理键布局的结果,因此其他语言的变化与键盘一样多.如果您正在编写游戏,并且您对键的布局比对符号更感兴趣,那么您无需担心语言.