スクリプト仕様

2011/04/07 Assembly Desk

0.検討中

以下は検討中の項目

1.概要

USBキーボード/マウス/ジョイパッドの一連の入力処理を記述する為のスクリプト仕様について定める。

このスクリプト仕様は、USBキーボード/マウス/ジョイパッドで可能な全ての操作を忠実に再現する事よりは、むしろ、8bitマイコンに実装しやすい形の記述を目指している。

また、外付けスイッチをひとつだけ搭載している事を想定している。

また、このスクリプトをどの様に動作させるか(スイッチを押したときに動作/押している時に動作)等のスクリプトに対するメタ情報も含めて定めている。

このスクリプト仕様策定時、Microchip社製マイコンであるPIC18F14K50 / PIC18F2550に実装する事を強く意識している。

2.スクリプト構成

スクリプトはヘッダ部、ボディ部、及びフッタ部からなる。

それぞれを区切るセパレータは特に用意しない。

スクリプト記述時に、ヘッダ部・ボディ部・フッタ部の順に記述される事が望まれ、この順番を守らなかった場合の動作は処理系(実装)依存となる。

各命令は以下の組み合わせで表現される。

ただし、[オペランド部]は以下いずれかで表現される。

2.1 ヘッダ部

ヘッダ部では、スクリプト自体の動作のさせかたを記述する。

例えば、スイッチを押した時に、スクリプトがどの様に実行されるか、「押したら一回だけ実行」「次に押されるまで実行」等、スクリプト自体の動作のさせかた(メタ情報)を記述する。

2.2 ボディ部

ここでは、スクリプトの実際の動作を記述する。

2.3 フッタ部

ここが、スクリプトの最後である事を示す。

3.詳細

3.1 ヘッダ部

3.1.1 スクリプト実行制御(オペコード : 0xFE)

スクリプトの実行のさせ方を定める命令。

[オペコード][オペランド]の構成を取る。

オペコードは0xFE。オペランドと動作の対応は以下の通り。

オペランド

動作

0x00

対応するSWが押される度、一度だけ動作する(デフォルト

0x01

対応するSWが離されると、一度だけ動作する(未実装

0x02

対応するSWによらず、一度だけ動作する(未実装

0x03

対応するSWによらず、動作を繰り返す(未実装

0x04

対応するSWが押されている間動作し、一度離されると動作は初めに戻る(未実装

0x05

対応するSWが押されている間動作し、動作はリジュームされる(未実装

ヘッダ部が省略された場合、デフォルトが選択される。

3.2 ボディ部

3.2.1 動作周期設定

スクリプトの動作周期を変更する。変更した動作周期はこの後に記述される命令に適用される。

また、この命令が解釈された時に実行中のコマンドに対しては影響しない。

[オペコード][オペランド]の構成を取る。

3.2.1.1 動作周期設定ms(オペコード0x80)

動作周期をms単位で1ms~256msの間で指定する。

オペコードは0x80。オペランドに何msかが入る。

0msを指定すると、256msとなる。

3.2.1.2 動作周期設定100ms(オペコード0x81)

動作周期を100ms単位で100ms~25.6sの間で指定する。

オペコードは0x81。オペランドに何百msかが入る。

0msを指定すると、25.6sとなる。

3.2.1.3 動作周期設定10s(オペコード0x82)(未実装

動作周期を10s単位で10s~2560sの間で指定する。

オペコードは0x82。オペランドに何十sかが入る。

0msを指定すると、2560sとなる。

3.3.2 ウェイト処理

3.3.2.1 一定時間ウェイト(オペコード0x90)

次の命令を実行する前に、指定された時間だけウェイトをおく。

ここでの待ち時間の間も、現在キューに入っている命令は実行される。

[オペコード(0x90)]の構成を取る。

現在の動作周期設定の時間だけ、ウェイトする。

3.3.2.2 命令実行ウェイト(オペコード0x91)

現在キューに入っている命令が全て終わるまでウェイトする。

3.2.3 マウスの動作

各種マウスの動作をさせる。

3.2.3.1 x移動(オペコード 0x10)

マウスをx方向に移動に移動させる。

設定した移動量を設定した回数だけ実行する。

移動量は現在の動作周期設定で決定される。

[オペコード(0x10)][オペランド1][オペランド2]の構成を取る。

オペランド1に移動量を設定する。0x80~0x7F。

オペランド2に回数を設定する。0~256。(0を設定すると256回となる)

負の移動量で左方向、正の移動量で右方向に動く。

例 マウスを1msおきに1dotづつ左に100回移動させる。

0x80 0x01 0x10 0x01 0x64

例 マウスを20msおきに3dotづつ右に33回移動させる。

0x80 0x14 0x10 0xFD 0x21

3.2.3.2 y移動(オペコード 0x11)

マウスをy方向に移動させる。

設定した移動量を設定した回数だけ実行する。

移動量は現在の動作周期設定で決定される。

[オペコード(0x11)][オペランド1][オペランド2]の構成を取る。

オペランド1に移動量を設定する。0x80~0x7F。

オペランド2に回数を設定する。0~256。(0を設定すると256回となる)

負の移動量で上方向、正の移動量で下方向に動く。

3.2.3.3 ホイール(オペコード 0x12)

ホイールを動かす。

設定した移動量を設定した回数だけ実行する。

移動量は現在の動作周期設定で決定される。

[オペコード(0x11)][オペランド1][オペランド2]の構成を取る。

オペランド1に移動量を設定する。0x80~0x7F。

オペランド2に回数を設定する。0~256。(0を設定すると256回となる)

負の移動量で上方向、正の移動量で下方向にホイールを動かす。

3.2.3.4 左クリック(オペコード 0x13)

マウスの左ボタンを押す。

[オペコード(0x14)]の構成を取る。

現在の動作周期の時間だけ押される。

3.2.3.5 右クリック(オペコード 0x14)

マウスの右ボタンを押す。

[オペコード(0x15)]の構成を取る。

現在の動作周期の時間だけ押される。

3.2.3.6 ホイールクリック(オペコード 0x15)

マウスのホイールボタンを押す。

[オペコード(0x14)]の構成を取る。

現在の動作周期の時間だけ押される。

3.2.4 キーボードの動作

各種キーボードの動作をさせる。

3.2.4.1 キーコード入力(オペコード 0x20)

キーコードの入力を行う。

[オペコード(0x20)][オペランド]の構成を取る。

オペランドで指定したキーコードを、現在の動作周期の時間だけ押し続ける。

なお、オペランドで指定するキーコードは「USB キーコード」等で検索し探す。

3.2.4.2 モディファイアの入力(オペコード0x21)

モディファイアの入力を行う。(CTRL / SHIFT等)

[オペコード(0x21)][オペランド]の構成を取る。

オペランドで指定したモディファイアを、現在の動作周期の時間だけ押し続ける。

なお、オペランド1で指定するモディファイアの対応は以下のとおり。

0bit目

左CTRL

1bit目

左SHIFT

2bit目

左ALT

3bit目

左WIN

4bit目

右CTRL

5bit目

右SHIFT

6bit目

右ALT

7bit目

右WIN

3.2.5 ジョイパッド未実装

3.3  フッタ部

3.3.1 スクリプト終了(オペコード 0xFF)

スクリプトの最後を表す。

この命令が解釈された時、実行中のコマンドは最後まで実行される。

[オペコード(0xFF)]の構成を取る。

4 サンプル

4.1 マウス自動クリック

デバイスを挿し込むと、1sに一回右クリックを1msだけ押す。サンプルを書く。

0xFE        //スクリプト実行制御(オペコード)

0x03        //対応するスイッチによらず動作し続ける(オペランド)

0x81        //動作周期を100msに単位で(オペコード)

0x0A        //動作周期を1sに(オペランド)

0x90        //一定時間ウェイト(1s待つ)

0x80        //動作周期をms単位で(オペコード)

0x01        //動作周期を1msに(オペランド)

0x14        //右クリック

0xFF        //終了