我刚刚买了一个旧的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服务。只是为了了解它是如何工作的。
发布于 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个按钮,操纵杆端口将无法工作,但也许您可以将按钮连接到其他东西(例如,使用适当的缓冲逻辑和拉出电阻;将它们连接到并行口或串行端口中的控制线)。
https://stackoverflow.com/questions/47958890
复制相似问题