* 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);",