我正在组装游戏,有两名玩家。 所以我使用以下代码来按下当前键:
mov ah, 01h
int 16h
此代码为我提供了按键的扫描码和Ascii码 问题是两个玩家可能同时按下两个不同的按键。 如何同时收到两个密钥?
我尝试过几种方法来实现这一目标。我尝试使用al,060h
直接获取输入。我也试过了int 9h
,但它仍无效。
答案 0 :(得分:5)
如果记忆有效,只需轻轻一点Google搜索就可以刷新数字......
BIOS不提供您想要的内容。它正在管理文本字符的输入流。这与捕捉按键事件密切相关,但是不允许你告诉现在哪些按键被按下,只有某些按键没有按下然后在过去被压抑了。
您需要使用int 21h
,函数25h
为int 9h
安装自己的处理程序。这样,您就可以直接从硬件获取密钥和密钥事件。
在处理程序中,读取端口60h
以确定中断发生的原因。低七位是关键代码。如果顶部位清除,则键已转换为按下。如果设置了最高位,则该键已转换为未按下。
然后您需要将20h
输出到端口20h
以确认中断。
因此,您可以保留一个128字节的表,初始化为所有80h
。在您的处理程序中,只需将value
存储到value&7h
。
在您的实际游戏代码中,如果您想知道当时是否按下了键n
,请从表中读取第n个值并在符号上分支。正=按,负=未按下。
(附录:你在退出之前启动和恢复它时也应该得到现有的矢量,否则你只是偶然地编写了TSR的挂钩部分,可能没有做SR部分)