同时获得两把钥匙 - Assembly 8086

时间:2016-04-15 19:06:37

标签: assembly x86 x86-16

我正在组装游戏,有两名玩家。 所以我使用以下代码来按下当前键:

mov ah, 01h
int 16h

此代码为我提供了按键的扫描码和Ascii码 问题是两个玩家可能同时按下两个不同的按键。 如何同时收到两个密钥?

我尝试过几种方法来实现这一目标。我尝试使用al,060h直接获取输入。我也试过了int 9h,但它仍无效。

1 个答案:

答案 0 :(得分:5)

如果记忆有效,只需轻轻一点Google搜索就可以刷新数字......

BIOS不提供您想要的内容。它正在管理文本字符的输入流。这与捕捉按键事件密切相关,但是不允许你告诉现在哪些按键被按下,只有某些按键没有按下然后在过去被压抑了。

您需要使用int 21h,函数25hint 9h安装自己的处理程序。这样,您就可以直接从硬件获取密钥和密钥事件。

在处理程序中,读取端口60h以确定中断发生的原因。低七位是关键代码。如果顶部位清除,则键已转换为按下。如果设置了最高位,则该键已转换为未按下。

然后您需要将20h输出到端口20h以确认中断。

因此,您可以保留一个128字节的表,初始化为所有80h。在您的处理程序中,只需将value存储到value&7h

在您的实际游戏代码中,如果您想知道当时是否按下了键n,请从表中读取第n个值并在符号上分支。正=按,负=未按下。

(附录:你在退出之前启动和恢复它时也应该得到现有的矢量,否则你只是偶然地编写了TSR的挂钩部分,可能没有做SR部分)