フロントエンドコードを解読しよう!
目的
WebCPU_VM(OSECPU-VMのJavaScriptによる実装)でフロントエンドコードを直接実行できるようにするために、バックエンドコードへ変換するための情報を集める。
- page0034[Q0014]で既に変換の方法は示されているのですが、この変換もJavaScriptで実装したいのです…。
参考になりそうなURL
- http://k.osask.jp/klog/?osecpu_0001
- http://osask.sourceforge.jp/w/634.html
- page0054
- 符号付きhh4エンコードの解説>(3) hh4のエンコードテーブル
現在の予想
- FrontEndCodeは、全体的にhh4エンコードを利用している
- しかも特殊形式のhh4を一部使っている?(リンク1を参照)
- ただしデータ部分はエンコードされていないみたい…
app0023(bball)の解読
まだ途中です…やっと命令境界がみえてきた!fcodeのおかげです。
:シグネチャ
05e1
:DATA(type:0x03, size:0x20)
ae3a0 == 2E 3 20
:データ本体
c4 64 bb 3d a4 1d 81 09
5a 05 35 11 17 2c 07 51
07 77 17 9c 35 b7 5a c3
81 bf a4 ab bb 8b c4 64
6 5 0 8f = 6 5 0 F
88 0 1 0 = 8 0 1 0
88 1 1 0 = 8 1 1 0
4 3 2 6 = 4 3 2 6
6 6 b8 88 = 6 6 38 8
88 2 2 0 = 8 2 2 0
88 3 2 0 = 8 3 2 0
4 95 4 5 aa = 4 15 4 5 2A
a5 4 0 1 = 25 4 0 1
4 95 4 bf ac 1 = 4 15 4 3F 2C 1
1 = 1
a5 4 87 2 = 25 4 7 2
4 5 3 85 = 4 5 3 5
1 = 1
現状の解析コード
****LoadFrontEndBinaryText****
2E:DATA(type:0x3, length:0x20); [C464BB3DA41D81095A053511172C07510777179C35B75AC381BFA4ABBB8BC464]
06:LOOP.Begin(R5, initBy:0x0, endUntil:0xF);
08:LMEM(R0, P1, reserved:0x0);
08:LMEM(R1, P1, reserved:0x0);
04-03:PLIMEM(P2, Offset:0x6);
06:LOOP.Begin(R6, initBy:0x38, endUntil:0x8);
08:LMEM(R2, P2, reserved:0x0);
08:LMEM(R3, P2, reserved:0x0);
04-15:SUB(R4, R5, x:0x2A);
25:CMPG(R4, R0, x:0x1);
04-15:SUB(R4, R3F, x:0x2C);
01:LABEL
01:LABEL
25:CMPG(R4, R7, x:0x2);
04-05:03:drawLine(mode:0x5);
01:LABEL
****LoadFrontEndBinaryText End****
疑問点メモ
- 4 95 4 5 aa = 4 15 4 5 2A
- 4 95 4 bf ac 1 = 4 15 4 3F 2C 1
- どうしてどちらも同じSUB[4-95]なのに引数の数が違うんだ!?
- SUBなど三項演算子の第三引数は符号付き拡張整数みたい
- 符号付きhh4の仕組みがよくわからない…単なる補数表現?
まだ作成中…
コメント欄(間違いの指摘や、情報を知っている方は教えてください!)
- おもしろそうなことをはじめましたね!・・・そうですね、符号付き整数についてはhh4の特殊形式と言えるかもしれません。 -- K 2013-08-17 (土) 21:43:50
- このWebCPU_VMって、もしかしてすでに結構動いていませんか?!すごい!! -- K 2013-08-17 (土) 21:50:36
- バックエンドはbballが動く最低限の機能は実装しました…でもフロントエンドコードの仕様が難しいです… -- hikarupsp 2013-08-17 (土) 21:52:59
- きっと5で始まるAPI呼出し命令が難しいんですよね?それ以外はどうですか?何とかなりそうな感じですか? -- K 2013-08-17 (土) 21:59:03
- page0062を見るとフロントエンドコードの切れ目が分かると思います。そこから勉強するのが早道かもしれません。 -- K 2013-08-17 (土) 22:00:30
- fcodeが役に立ってよかった!>まだ途中です…やっと命令境界がみえてきた!fcodeのおかげです。 -- K 2013-08-17 (土) 22:18:39
- 三項演算子は、基本的に第一項と第二項がレジスタで、第三項が拡張符号付き整数です。しかしこれでは、 R04=1-R04;が表現できません。このような時は、とりあえずR04=R3F-R04;のコードを出力した直後に、R3Fに入れたかった整数を拡張符号付き整数で記述します。>どうしてどちらも同じSUB[4-95]なのに引数の数が違うんだ!? -- K 2013-08-18 (日) 02:34:50
- 符号付き整数は、2桁以上なら普通の補数表現です。1桁の場合、7が使えないので、-1がうまく表現できません。ということで、1桁の場合は特別ルールになっています。>符号付きhh4の仕組みがよくわからない…単なる補数表現? -- K 2013-08-18 (日) 02:38:13
- 拡張符号付きhh4はpage0054の(3)が詳しいかも? -- K 2013-08-18 (日) 03:25:14