* decoderの利用 -(by [[K]], 2013.08.21) ** (0) はいけい -[[hikarupsp_FrontEndCode]]を支援したい。 -OSECPU-VMでは、フロントエンド→バックエンドの変換をOSECPUアプリでやっています。なぜなら、こうしておけば他のCPU向けに移植するときに変換ルーチンを移植しないですむからです。 -[[hikarupsp]]さんはJavaScriptで変換しようとしているけど、変換をOSECPUアプリでやるほうが楽なんじゃないかと考えました(バージョンアップに追従するのも簡単です)。当然ですが、この変換アプリはバックエンドコードだけで書かれています。 ** (1) きほん -変換アプリはどこに入っているかですが、syslib.oseの中に入っています。しかしこれはライブラリ形式になっている上に、独自の簡易な圧縮がかかっているために、取り出すのは少々面倒です。ですからソースから.oseファイルを作ることにしましょう。 prompt>amake0 decoder osectols.exe -DNODBGINFO0 -これを実行するとdecoder.oseというファイルができます。これが変換用OSECPUアプリです。 -次はこのdecoder.oseの使い方です。 --フロントエンドコードをメモリに読み込んで、出力先のバッファとテンポラリを確保して、Pxxレジスタでそれらを教えてあげるだけです。 --先頭2バイトのシグネチャはdecoderが感知しないので、自分で2バイトをコピーしてください。 入力パラメータ: P02 = T_UINT8: &backend[2] (出力バッファ先頭) P03 = T_UINT8: &backend[backend-maxsize] (出力バッファの限界) P04 = T_UINT8: &frontend[2] (入力データ先頭) P05 = T_UINT8: &frontend[frontend-size] (入力データの終端:最終バイトの次のアドレス) P06 = T_UINT8: &temp0[0] (要素数が2M以上のテンポラリバッファ) P07 = T_UINT8: &temp0[temp-maxsize] P02 = T_UINT8: &backend[2] (出力バッファ先頭) P03 = T_UINT8: &backend[backend-maxsize] (出力バッファの限界) P04 = T_UINT8: &frontend[2] (入力データ先頭) P05 = T_UINT8: &frontend[frontend-size] (入力データの終端:最終バイトの次のアドレス) P06 = T_UINT8: &temp0[0] (要素数が2M以上のテンポラリバッファ) P07 = T_UINT8: &temp0[temp-maxsize] P0A = T_UINT32: &temp1[0] (要素数が16Kくらいあれば十分なバッファ) P0B = T_SINT32: &temp2[0] (要素数が64のバッファ:Pxxレジスタの個数) P0C = T_SINT32: &temp3[0] (要素数が4Kのバッファ:登録可能ラベル数) P0D = T_UINT8: &temp4[0] (要素数が256のバッファ) P0D = T_UINT8: &temp4[0] (要素数が256のバッファ) アプリ終了時: R00 == 0 正常終了 R00 != 0 変換失敗 P02 == バックエンドコードの終端, つまり P02 - &backend[0] = バックエンドコードのサイズ --バックエンドの実行エンジンをある程度完成させたうえで、decoder.oseの内容をダンプして配列にでも入れて、実行してください。 -参考情報: --decoder.oseは以下の25命令しか使っていません(ver.0.72の段階で)。 01: LB 02: LIMM 03: PLIMM 04: CND 08: LMEM 09: SMEM 0E: PADD 10: OR 11: XOR 12: AND 14: ADD 15: SUB 16: MUL 18: SHL 19: SAR 1E: PCP 20: CMPE 21: CMPNE 22: CMPL 23: CMPGE 24: CMPLE 25: CMPG 29: PCMPNE 2B: PCMPGE 34: (data) ** (2) なぜdecoderの利用を勧めるのか? -楽だから!それ以外にはないです。 -フロントエンド→バックエンドにおいて、基本的な変換はそんなに難しくはないのですが、文字列を含むAPI呼び出しと型推論が入っているところはとても面倒です。きっとここをdecoderを使わずにやろうとしたら、途中で心が折れると思います・・・。 -せっかくここを.ose化しておいたのだから、これを利用しない手はありませんよ! ** (3) 将来の計画 -tek5デコーダも早く.ose化したいと前から思っています・・・。 --そのためには[[page0047]]の符号なし演算がほしい。そうしないとけっこう遅くなる。 --あとできれば構造体サポートもほしい。 * こめんと欄 -うわぁ!ありがとうございます!確かにデコーダーがOSECPUコードで実行されているところまでは突き止めたのですが、その先がわからず…。最近は忙しくて更新できていませんが、これならすぐ実装できそうです。ありがとうございます! -- [[hikarupsp]] SIZE(10){2013-08-21 (水) 19:04:17} #comment