trax workshop: windows版traxソフトウェアをwineで動かして開発する

24
Windows 版 Trax ソフトウェアと Wine で作る Unix な開発環境 長名保範 (琉球大学工学部)

Upload: yasunori-osana

Post on 15-Apr-2017

359 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Windows 版 Trax ソフトウェアと Wine で作る Unix な開発環境

長名保範 (琉球大学工学部)

Page 2: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Wine ってなに?

POSIX なプラットフォームで Windows のバイナリが実行できるツール

Windows DLL の仕組みなどが提供され、バイナリがそのまま動く

Windows API のオープンな実装であり、エミュレータではない

WINE: Wine Is Not An Emulator

x86, x64 な Mac, BSD, Linux などで動く

2

Page 3: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

今日のお題

Trax ソフトウェア (公式版) を Un*x な環境で動かしましょう

Mac, FreeBSD, Linux で動作チェックしました

自分の stdin/stdout な Trax プレーヤを接続しましょう

DOBY AI と戦えます (なんか知らないけど、あいつ強い...)

3

Page 4: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Windows な人はどうするの?

仮想 COM ポートドライバ com0com / com2tcp が使えます

前回 WS の児島先生の発表資料にあります

http://com0com.sourceforge.net

Windows「だけ」で作業してる場合、僕の話は関係ないかも...

4

Page 5: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

必要なもの + 参考資料

wine と socat と screen か minicom をインストールした開発環境

ダウンロードだけでよいもの

Trax 公式ソフトウェア: http://www.traxgame.com/shop_download.php#v5

Trax プラグイン: fpga.dll (ICFPT への参加仮登録が必要)

前回ワークショップの児島先生の発表資料

5

Page 6: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Wine + socat のインストール

お使いの package system にたぶんあります

socat はない場合もあるかも・・・

前半戦で必要なのは wine です

6

Page 7: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Wine に Trax 環境をインストール

Wine でインストーラを実行するだけです% wine ~/Downloads/setuptrax511.exe

たまにインストーラのボタンが表示されなかったりするので、固まったかな、と思ったら tab キーを叩いて探しましょう...

インストール自体はすぐにおわります

MONO (.NET Compatibility) はなくても動きます

7

Page 8: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Wine の環境をみてみる

~/.wine に Wine の環境

dosdevices/ にデバイス

drive_c/ が C:\

% ls ~/.wine dosdevices/ drive_c/ system.reg user.reg userdef.reg

8

Page 9: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

起動する

% wine ~/.wine/drive_c/Program\ Files/Trax/trax.exe

必ずしも実行ファイルが ~/.wine 以下にある必要はない

DLL とかの絡みがないものならどこに置いてもよい

Windows でネットワーク上に実行ファイルがあってもいいのと同じ

9

Page 10: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

普通にできること

人-人の対戦

Utility → Lobby でネットワーク越しに誰かと対戦

DOBY AI と対戦 (要インストール・ライセンス認証)

fpga.dll によるシリアル接続は...?

10

Page 11: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

Wineでのデバイスの扱い

~/.wine/dosdevices

デフォルトではドライブだけ存在

ここに com1 や lpt1 を作るとシリアルやパラレルが使える

% ls ~/.wine/dosdevices c: d: d:: e:: z:

11

Page 12: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

com1 はどうやって作る?

普通のシリアルデバイス (pty device) で OK

つまり...ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1ln -s /dev/cuaU0 ~/.wine/dosdevices/com1

/dev/ 以下の permission はなんともしてくれないので自分で解決する

12

Page 13: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

com1 はどうやって (続き)

/dev/ 以下にある (実在の) デバイスなら symbolic link すれば OK

~/.wine/dosdevices/com[1-9]

アクセス権限は /dev/ 以下の実体の方で解決する必要あり

devfs とか udev とかそのへんで、なんとか

なんにしても実体はただの PTY デバイス

13

Page 14: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

socat を使ってみる

"socat アドレス1 アドレス2" が使い方の基本

たとえばこう% socat tcp-l:1234 tcp-l:1235

TCP/1234 と TCP/1235 が Listen状態になる

コンソールをふたつ開いてそれぞれに telnet するとチャット状態

14

Page 15: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

socat x PTY

片方を pty にしてみましょう

-d -d をつけないとデバイス名が見えないので注意

TCP-listen なアドレスには reuseaddr を付けておくとよい

/dev/ttys004 へリダイレクトなどで読み書きすると、telnet から見える

15

% socat -d -d tcp-l:1235,reuseaddr pty socat[40200] N listening on ... socat[40200] N accepting connection ... [ここで telnet をつなぐ] socat[40200] N PTY is /dev/ttys004 [/dev/ttys004 をアクセス]

Page 16: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

socat x サブプロセス

PTY なアドレスの場合にはコマンドの実行を行うことも可能% socat -d -d tcp-l:1235,reuseaddr exec:"ls -l",pty

telnet localhost 1235 するとファイルの一覧が見える

16

Page 17: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

socat で Virtual null modem

これが socat で PTY を扱うときの基本形% socat -d -d pty,raw,echo=0 pty,raw,echo=0

ふたつのデバイス名が表示されるので screen / minicom などでアクセスしてみましょう

よくわかんなかったら echo と cat とかでもいいです

17

Page 18: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

やりたいことを整理する

Virtual Null modem cable 的なものをつくる

片方の PTY は Wine の com1 にしたい

もう片方の PTY では自分の Trax player を走らせたい

18

Page 19: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

~/.wine/dosdevices/com1

socat で作る PTY のデバイス名は毎回変わる

手動で ln -s するのって大変ですよね...

pty,raw,link=${HOME}/.wine/dosdevices/com1

これで自動的に symbolic link ができる

19

Page 20: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

PTY に自分の bot を接続

これはさっきの例で出てきたやつ

exec:"path/to/my_player_program",pty,echo=0

20

Page 21: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

これで準備完了... のはず...

さてここで TeraTerm を使ってテストしてみましょう

socat \pty,raw,link=${HOME}/.wine/dosdevices/com1 \tcp-l:12345,reuseaddr

21

Page 22: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

どうしてこうなった

Wine が PTY を読むときに文字が落ちまくることがある

Windows 側のプログラムによってはまったく落ちないので、なにか Wine の Windows API 実装との相性...?

残念ながら Trax のプログラムはデータが落ちる側のグループです

22

Page 23: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

黒魔術で対応しましょう

Trax の通信は公式には "Trax notation + newline"

でも実際には余計な改行とかスペースは受け取ってもらえる

通信では最初の2バイトが落ちることが多いので前後にスペースを挿入

23

Page 24: Trax Workshop: Windows版TraxソフトウェアをWineで動かして開発する

こんな感じで動きます

std::cout << "\n__________" << move << "___\n_\n\n_\n";

24