首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >8086汇编语言中通过硬件端口201 h的操纵杆编程

8086汇编语言中通过硬件端口201 h的操纵杆编程
EN

Stack Overflow用户
提问于 2017-12-24 07:35:32
回答 1查看 794关注 0票数 1

我刚刚买了一个旧的2轴6按钮的eBay游戏垫,我计划在一个游戏中添加支持,我正在为MS编写8086程序集。

在等待交付时,我一直在研究操纵杆和基于游戏端口的控制器的低级编程。我找不到任何专门与编程游戏垫相关的文档,只有操纵杆。我假设他们在硬件级别被当作操纵杆一样对待,但我可能错了。

这是一个链接到游戏垫的图片,只是为了表明它没有什么像一个操纵杆。

https://i.ebayimg.com/images/g/9xsAAOSwBjdaOHFo/s-l1600.jpg

根据我所能找到的,您可以通过硬件端口201 h访问游戏端口,但我无法理解文档的实际含义是什么。

这个链接描述了位:port.html

首先,它只提到两个按钮。如果控制器有6个按钮怎么办?另外,“操纵杆a,x coord (0 =正时活动)”是位0的描述。好吧,但你到底在哪里收集X码?这似乎只是告诉你,时间是积极的,还是不活跃的。确定X坐标的是脉冲的时间长度吗?

这个链接提到int 15h函数84提供了一种更容易访问操纵杆的方法,但它只返回4个按钮输入,每个操纵杆返回2个按钮。

http://www.fysnet.net/joystick.htm

我宁愿直接从端口201h收集输入,也不愿使用BIOS服务。只是为了了解它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-24 09:54:50

根据我所能找到的,您可以通过硬件端口201 h访问游戏端口,但我无法理解文档的实际含义是什么。

我假设操纵杆使用RC (“电阻器/电容器”)电路,其中操纵杆的X或Y控制位置影响电阻,这影响电容器充电所需的时间。当电容器的电荷达到一定的水平时,它会设置“定时有源”位,而当电容器完全充电时,它将在下一次排空/排出。最终的结果是,通过反复阅读(例如)“操纵杆a,x coord”定期测量“位第一次设置”到“比特重新设置”之间的时间,它会告诉您操纵杆的(变量)电阻在哪个位置。

别忘了这些东西是出了名的不准确。在使用操纵杆之前,你必须先校准操纵杆(使用通常涉及测量“死中心”X和Y值的顺序,然后测量“右上”X和Y值以及“左下角”X和Y值,然后定义某种接近中间的死区;在做了这个痛苦的校准过程之后,您会玩15分钟的游戏,使可变电阻器加热一点点,并将校准抛出;通常(由于在通常便宜/低质量的可变电阻器内的碳轨上有灰尘/磨损),操纵杆在使用几天后就会变得不稳定。当然,这都假定可变电阻器实际上与PC操纵杆端口兼容(例如,具有相同曲线的相同电阻范围),因此没有理由假定游戏垫中的可变电阻器是兼容的。

还要注意的是,(当时)大多数人没有使用操纵杆端口(只是使用了一个没有精确性或可靠性问题的鼠标),而最初提供操纵杆端口的少数制造商在几十年前就停止了困扰(大家转而使用USB ),所以现在很难找到任何真正有工作操纵杆端口的硬件。我认为"BIOS在15h函数84“中也会出现同样的情况( BIOS制造商已经30年没有为实现BIOS而烦恼,该函数只是返回”进位标志集“或”一切都为零“)。

首先,它只提到两个按钮。如果控制器有6个按钮怎么办?

它只支持每个操纵杆2个按钮,但也打算支持2个操纵杆。这意味着您应该能够连接4个按钮(2个按钮作为“操纵杆a按钮”,另外2个按钮作为“操纵杆b按钮”);只要您自己编写软件,并且不希望任何现有的老游戏支持它。对于超过4个按钮,操纵杆端口将无法工作,但也许您可以将按钮连接到其他东西(例如,使用适当的缓冲逻辑和拉出电阻;将它们连接到并行口或串行端口中的控制线)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47958890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档