我一直在尝试几件事来模拟 DoxBox 模拟器的串行鼠标(为了在 Settlers 2 中玩 2 人游戏)。
我还没有找到任何可行的解决方案,所以我尝试自己制作。似乎 dosbox 可以使用任何 /dev/ttyS* 作为串行输入。所以我认为直接将一些位写入 FIFO 以伪装成串行鼠标应该可以做到这一点!不幸的是,它并没有真正起作用,因为我显然错过了一些步骤(特别是初始化,告诉驱动程序它是鼠标?),而且我觉得我并不真正了解串行端口的工作原理。
除了Microsoft 串行鼠标协议外,我在鼠标协议上没有找到太多东西。我尝试输出合理的字节。但似乎什么都没有发生,dosbox 说它无法打开串口。
这是我实现的:
def bits(byte):
b = []
for i in xrange(8):
b.append((byte >> i) & 1)
return b
def pack(*args):
# packs the bits into a string
s = ""
for i in args:
v = 0
for bit in i:
v = v<<1
v+=bit
s+=chr(v)
return s
def makebytes(ld,rd,dx,dy):
# left down, right down, delta x, delta y
# create 3 byte message for mouse
dx = bits(dx)
dy = bits(dy)
A = [0,1,
1 if ld else 0,
1 if rd else 0,
dx[7],dx[6],
dy[7],dy[6]]
B = [0,0]+dx[::-1][2:]
C = [0,0]+dy[::-1][2:]
return pack(A,B,C)
# this is the FIFO I created with go+rw
f = file("/dev/ttyS42",'w')
print "Got"
import time
while 1:
# send some mouse movement
f.write(makebytes(0,0,10,10))
print "sent 1"
time.sleep(0.5)
f.write(makebytes(0,0,-10,-10))
print "sent 2"
所以,我现在不知道在哪里看,任何帮助将不胜感激。