* Rev2のバックエンド命令セット(バイト単位版)
-(by [[K]], 2014.06.21)

** (0)
-このページは[[page0072]]の派生で、hh4かがわずらわしい人向けです。わかりやすいバイト単位で記述されています。
-このページは[[page0072]]の派生で、hh4がわずらわしい人向けです。わかりやすいバイト単位で記述されています。
-ASKAも内部ではこのコードを生成しているので、この出力がダサいとかそういうことはありません。
-appackというツールを使えば、以下のバックエンドのバイトコードからコンパクトなフロントエンドコードに変換できます(予定)。
-OSECPU-VMのrev2用のコンパイラとかを作る人は、このページの内容が役立つはずです。
--もちろん直接hh4でコンパクトに出してくれてもいいけど、それはそれなりに面倒だと思います。そんなことで手間をかけるのは本質じゃないよね、ということで。
--それに僕が手抜きで作るappackは、ひょっとしたら以下のフォーマットしか受け付けないかもしれません。だから以下のフォーマットにしておくことは重要です!
---まあでもさすがにそこまで手抜きはしないかも。

** (1) 基本構成
-最初に3バイトのシグネチャがある。
 05 E2 00

-命令表: (rはRxx+0x80のこと、pはPxx+0x80のこと、bitは定数32を入れておくとよい(つまり0x20)、uimmは符号なし整数のこと)
,+00,+01,+02,+03,+04,+05,+06,+07,+08,+09,+0A,+0B,+0C,+0D,+0E,+0F,+10,+11,+12,+13,+14,+15,+16,+17,命令表記,説明
,F0,,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,"NOP();",
,F1,F7,88,uimm,==,==,==,F7,88,opt,==,==,==,,==,==,==,==,==,==,==,==,==,==,"LB(opt, uimm);",
,F2,F7,88,imm,==,==,==,r,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,"LIMM(bit, r, imm);",
,F3,F7,88,uimm,==,==,==,p,,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,"PLIMM(p, uimm);",
,F4,r,,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,"CND(r);","CND命令は下位1bitしか見ない"
,88,p,F7,88,typ,==,==,==,F7,88,00,00,00,00,r,F7,88,bit,==,==,==,,==,==,"LMEM(bit, r, typ, p, 0);",
,8E,p1,F7,88,typ,==,==,==,r,F7,88,bit,==,==,==,p0,,==,==,==,==,==,==,==,"PADD(bit, p0, typ, p1, r);",
,+00,+01,+02,+03,+04,+05,+06,+07,+08,+09,+0A,+0B,+0C,+0D,+0E,+0F,+10,+11,+12,+13,+14,+15,+16,+17,命令表記,説明
,90,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"OR(bit, r0, r1, r2);","r1=r2にすると、CP(r0,r1);になる"
,91,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"XOR(bit, r0, r1, r2);",
,92,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"AND(bit, r0, r1, r2);",
,93,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"SBX(bit, r0, r1, r2);","符号ビット拡張、r2はR3Fしか指定できない"
,94,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"ADD(bit, r0, r1, r2);",
,95,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"SUB(bit, r0, r1, r2);",
,96,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"MUL(bit, r0, r1, r2);",
,98,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"SHL(bit, r0, r1, r2);",
,99,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"SAR(bit, r0, r1, r2);",
,9A,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"DIV(bit, r0, r1, r2);",
,9B,r1,r2,r0,F7,88,bit,==,==,==,,==,==,==,==,==,==,==,==,==,==,==,==,==,"MOD(bit, r0, r1, r2);",
,9E,p1,p0,,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,==,"PCP(p0, p1);",
,+00,+01,+02,+03,+04,+05,+06,+07,+08,+09,+0A,+0B,+0C,+0D,+0E,+0F,+10,+11,+12,+13,+14,+15,+16,+17,命令表記,説明
,A0,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"CMPE(bit0, bit1, r0, r1, r2);","bit1はr1とr2のbit、bit0はr0のbit"
,A1,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"CMPNE(bit0, bit1, r0, r1, r2);",
,A2,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"CMPL(bit0, bit1, r0, r1, r2);",
,A3,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"CMPGE(bit0, bit1, r0, r1, r2);",
,A4,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"CMPLE(bit0, bit1, r0, r1, r2);",
,A5,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"CMPG(bit0, bit1, r0, r1, r2);",
,A6,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"TSTZ(bit0, bit1, r0, r1, r2);",
,A7,r1,r2,F7,88,bit1,==,==,==,r0,F7,88,bit0,==,==,==,,==,==,==,==,==,==,==,"TSTNZ(bit0, bit1, r0, r1, r2);",

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS