私は 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"
だから、今どこを見ればいいのかわからないので、助けていただければ幸いです。