J3Wではプロセスが1つの単位となって,順に命令を実行します. プロセスと は,1つの仮想のCPUが命令を実行することを示します. CPUが実行す る命令には別のCPU(プロセス)を作成する命令,「物体」を作成する命 令,「物体」を運動させる命令,計算を行う命令,文字を表示する命令など 多くの命令があります. ここでいう「物体」とは頂点と頂点で構成された 多角形をを示します.
以下にJ3Wの全命令を簡単に解説します. 詳細は【10】章を参照して下さい.
J3Wの中心的な存在であるプロセスの生成と削除,プロセス間の通信に関する 命令には以下の10種類があります.
| GENPRC | プロセスの生成,レジスタをコピー |
| DELPRC | プロセスの削除 |
| NOOP | 指定時間の間何もしない メッセージを受けると次の命令へ進む |
| THROW | 制御を別のプロセスに渡す |
| WAIT | プロセスの一時停止 時間無制限のNOP |
| STPALL | 全プロセスの停止と消滅 |
| SEND | 指定プロセスIDにメッセージ送出 |
| RECEIV | メッセージを取得 |
| SENDTO | 指定プロセスNoにメッセージ送出 |
| CHILD | 子「物体」とプロセスの生成 |
1つのプロセスは1つの「物体」を持つことができます. 以下の命令を使用 して「物体」の形状を設定したり,位置や角度の設定と取得を行います. 「物体」を持っていないプロセスが以下の命令を実行するとエラーとなりま す.
| GENOBJ | 「物体」の生成 |
| DEFPNT | 「物体」の頂点の定義 |
| DEFPLN | 「物体」の面の定義 |
| DELOBJ | 「物体」の削除 |
| SETEYE | この命令を実行した「物体」が視点(目)を持つ |
| POINT | 「物体」頂点の定義 座標は(RX,RY,RZ) |
| GETVXN | 頂点番号の取得 |
| PLANE | 面の定義(データメモリ使用) |
| TRANSP | 頂点座標全体の平行移動 |
| UPDTVP | 頂点番号の相対指定 |
| RSETVP | 頂点番号の絶対指定 |
| SLIDE | 頂点登録時のオフセットを設定 |
| HOME | 頂点登録時のオフセットを解除 |
| GETPOS | 「物体」の位置と姿勢を取得 |
| SETPOS | 「物体」の位置と姿勢を設定 |
| PRCPOS | 指定プロセスの位置と姿勢を得る |
| DISTNC | 指定プロセスIDまでの距離を得る |
| PRIOR | ポリゴンの表示優先順位を指定 |
| RELATV | 「物体」間の相対位置と角度を返す |
| RELAT2 | ワールド座標と「物体」との相対位置と角度を返す |
| LOOK | 指定プロセスへの角度を返す |
| FINDVX | 「物体」の頂点番号を取得 |
| SETVTX | 「物体」頂点位置の更新 |
| GETVTX | 「物体」頂点位置の取得 |
| SETPLN | ポリゴンデータの設定 |
| GETPLN | ポリゴンデータの読み出し |
| SETSCL | 「物体」が属する座標系の縮尺の設定 |
| GETSCL | 「物体」が属する座標系の縮尺の取得 |
| EMIT | 光源となる「物体」が設定 |
「物体」を持っているプロセスが以下の命令を実行すると,「物体」は空間 内で運動します. 「物体」を持っていないプロセスが以下の命令を実行する とエラーとなります.
| MOVF | 前進 X座標の増加 |
| MOVB | 後退 X座標の減少 |
| MOVL | 左移動 Y座標の減少 |
| MOVR | 右移動 Y座標の増加 |
| MOVU | 上移動 Z座標の減少 |
| MOVD | 下移動 Z座標の増加 |
| ROTH | ヘッド回転 横を向く |
| ROTP | ピッチ回転 見上げる |
| ROTB | バンク回転 首をかしげる |
| MOVALL | RX,RY,RZ,RH,RP,RBの値で同時に移動と回転を行う |
| MOVALH | RX,RY,RZ,RH,RP,RBの値で同時に移動と回転を行う |
| SETGRV | 重力加速度の設定 初期値はゼロ |
| GETGRV | 重力加速度の取得 |
| SETACL | 加速度の設定 初期値はゼロ |
| GETACL | 加速度の取得 |
| SETVEL | 速度,角速度の設定 初期値はゼロ |
| GETVEL | 速度,角速度の取得 |
| SETWVL | 「物体」の速度を世界座標系で設定 初期値はゼロ |
| GETWVL | 「物体」の速度を世界座標系で取得 |
| SCALE | 指定した時間で「物体」の縮尺を変化 |
●テクスチャ
物体にテクスチャマッピングすることができます.
| PNTUV | 「物体」頂点の定義(UV座標付き) |
| DEFPNT | 「物体」の頂点の定義(UV座標付き) |
| TXFILE | テクスチャビットマップファイル読み込み |
| TXSET | テクスチャ指定 |
| TXAXIS | テクスチャ貼り付け軸の指定 |
| TXALPH | テクスチャの透明度の指定 |
| TXSCAL | テクスチャの拡大率の指定 |
| TXCHG | テクスチャの変更 |
| TXMAP | テクスチャのマッピング方法の指定 |
| TXBIAS | テクスチャ座標のオフセットの設定 |
●演算
レジスタを用いて演算を行います. 結果は指定したレジスタに返ります.
| INC | 指定レジスタに1を加算 |
| DEC | 指定レジスタから1を減算 |
| ADD | レジスタにレジスタ,メモリ,定数を加算 |
| SUB | レジスタからレジスタ,メモリ,定数を減算 |
| MUL | レジスタにレジスタ,メモリ,定数を乗算 |
| DIV | レジスタをレジスタ,メモリ,定数で除算 |
| SHL | レジスタをレジスタ,メモリ,定数で左シフト |
| SHR | レジスタにレジスタ,メモリ,定数で右シフト |
| AND | レジスタにレジスタ,メモリ,定数をビット積 |
| OR | レジスタにレジスタ,メモリ,定数をビット和 |
| NOT | レジスタをビット反転 |
| CMP | レジスタをレジスタ,メモリ,定数と比較 |
| NEG | レジスタの符号反転 |
| SQRT | レジスタの平方根 |
| SIN | サイン 角度8倍, 結果10000倍 |
| COS | コサイン 角度8倍, 結果10000倍 |
| ATAN | アークタンジェント |
| RANDOM | レジスタに乱数を取得 |
プロセスは命令を順番に実行しますが,実行する順序を変更する命令です. 次に実行する命令のあるアドレスを渡します.
| BRA | 無条件にジャンプ |
| BEQ | 演算結果が0か等しいならジャンプ |
| BNE | 演算結果が非0か等しくないならジャンプ |
| BGR | より大きいならジャンプ |
| BGE | より大きいか等しいならジャンプ |
| BLS | より小さいならジャンプ |
| BLE | より小さいか等しいならジャンプ |
| BMI | 演算結果が負ならジャンプ |
| BPL | 演算結果が0以上ならジャンプ |
| LOOP | RLレジスタの回数分の繰り返し |
| CALL | 副手続きの呼出し |
| RETURN | 副手続きからのリターン CALLの次の命令に処理が移る |
レジスタの設定,メモリへの格納,スタックへの退避とスタックからの復帰 等に関する命令です.
| PUSH | レジスタのプッシュ |
| POP | レジスタのポップ |
| CLEARA | 位置姿勢レジスタの一括クリア |
| PUSHA | 位置姿勢レジスタのスタックへの一括プッシュ |
| POPA | 位置姿勢レジスタのスタックから一括ポップ |
| CLEARG | 汎用レジスタの一括クリア |
| PUSHG | 汎用レジスタのスタックへの一括プッシュ |
| POPG | 汎用レジスタのスタックから一括ポップ |
| ENTER | スタックフレームの作成 |
| LEAVE | スタックフレームの解放 |
| CALLTB | 共有メモリのテーブルで呼び出し |
| LOAD | レジスタに値を設定 |
| LOADM | デ-タメモリに値を設定 |
| XLOAD | レジスタ相対でデータメモリの値を取得 |
| CLOAD | 共有メモリからレジスタに値を取得 |
| LOADBP | ローカル変数をレジスタにコピー |
| STORE | レジスタをデータメモリにコピー |
| XSTORE | レジスタ相対指定でレジスタをデータメモリにコピー |
| CSTORE | レジスタを共有メモリに格納 |
| STORBP | レジスタをスタック上のローカル変数にコピー |
テキスト画面とグラフィック画面への文字出力,線分の描画,音の出力と キーボード,マウスからの入力に関する命令です. これらの命令はプロセス 毎に独立していません. どのプロセスも同じデバイスに対して操作すること になります.
| GRAPHM | グラフィックモードに設定 |
| TEXTM | テキストモードに設定 |
| BCOLOR | グラフィックウインドウの背景色の設定 (0-255) |
| ZOOM | グラフィックウインドウの視野角の設定 (0:90度,1:53度) |
| INKEY | キーコードをレジスタに入力 |
| RAWKEY | キーチェック |
| MOUSE | マウス座標の取得 |
| OUTNUM | レジスタ1の示す値をテキストウインドウへ出力 |
| OUTCHR | テキストウインドウへ1文字の出力 |
| OUTSTM | データメモリの文字列をテキストウインドウへ出力 |
| OUTSTR | 文字列をテキストウインドウへ出力 |
| GRNUM | レジスタの示す値をグラフィックウインドウへ出力 |
| GRCHR | グラフィックウインドウへ1文字の出力 |
| GRSTM | データメモリ文字列をグラフィックウインドウへ出力 |
| GRSTR | 文字列をグラフィックウインドウへ出力 |
| GRCOL | グラフィックウインドウの文字色を設定 |
| GRCLR | グラフィックウインドウの文字列クリア |
| GRCSR | グラフィックウインドウ文字カーソルの設定(0-1999) |
| GRPOS | グラフィックウインドウの文字書き込み位置取得 |
| GRLINE | グラフィックウインドウのラインの描画設定 |
| GRLINC | グラフィックウインドウのラインの消去 |
| NOTE | MIDI 音階出力 |
| MIDI | MIDIメッセージ(0..127, 0..127)の出力 |
●システム関連命令
J3Wシステム(プロセスに依存しない)に関する状態の取得と設定,共有メ モリのファイル入出力に関する命令です.
| SYSTIM | システム時間の取得 |
| SYSCNT | ジョブ実行ループ回数の取得 |
| SYSPRC | 現在のプロセス数の取得 |
| DATA | 共有メモリに書き込む数値列を指定 |
| WRITE | 共有メモリをファイルに書出し RX:位置, RY:サイズ |
| READ | 共有メモリにファイルから読み込み RX:位置 |
| LIGHT | 光源の強度,方向の設定 |
| PARALL | 点光源,平行光源の指定 |
| COLNUM | シェイディング可能な色数を取得 |
| COLWDT | シェイディング段数を取得 |
| CNTVTX | 総頂点数を取得 |
| CNTPLY | 総ポリゴン数を取得 |
| SETCOL | 色の再設定 |
| RSTCOL | 色をデフォルトに戻す |
| VER | J3Wのバージョン番号を返す |