#pragma once #include "types.h" #include "../sh4_interpreter.h" /* Opcodes :) */ //stc SR, sh4op(i0000_nnnn_0000_0010); //stc GBR, sh4op(i0000_nnnn_0001_0010); //stc VBR, sh4op(i0000_nnnn_0010_0010); //stc SSR, sh4op(i0000_nnnn_0011_0010); //stc SGR, sh4op(i0000_nnnn_0011_1010); //stc SPC, sh4op(i0000_nnnn_0100_0010); //stc R0_BANK, sh4op(i0000_nnnn_1mmm_0010); //braf sh4op(i0000_nnnn_0010_0011); //bsrf sh4op(i0000_nnnn_0000_0011); //movca.l R0, @ sh4op(i0000_nnnn_1100_0011); //ocbi @ sh4op(i0000_nnnn_1001_0011); //ocbp @ sh4op(i0000_nnnn_1010_0011); //ocbwb @ sh4op(i0000_nnnn_1011_0011); //pref @ sh4op(i0000_nnnn_1000_0011); //mov.b ,@(R0,) sh4op(i0000_nnnn_mmmm_0100); //mov.w ,@(R0,) sh4op(i0000_nnnn_mmmm_0101); //mov.l ,@(R0,) sh4op(i0000_nnnn_mmmm_0110); //mul.l , sh4op(i0000_nnnn_mmmm_0111); //clrmac sh4op(i0000_0000_0010_1000); //clrs sh4op(i0000_0000_0100_1000); //clrt sh4op(i0000_0000_0000_1000); //ldtlb sh4op(i0000_0000_0011_1000); //sets sh4op(i0000_0000_0101_1000); //sett sh4op(i0000_0000_0001_1000); //div0u sh4op(i0000_0000_0001_1001); //movt sh4op(i0000_nnnn_0010_1001); //nop sh4op(i0000_0000_0000_1001); //sts FPUL, sh4op(i0000_nnnn_0101_1010); //sts FPSCR, sh4op(i0000_nnnn_0110_1010); //stc GBR, sh4op(i0000_nnnn_1111_1010); //sts MACH, sh4op(i0000_nnnn_0000_1010); //sts MACL, sh4op(i0000_nnnn_0001_1010); //sts PR, sh4op(i0000_nnnn_0010_1010); //rte sh4op(i0000_0000_0010_1011); //rts sh4op(i0000_0000_0000_1011); //sleep sh4op(i0000_0000_0001_1011); //mov.b @(R0,), sh4op(i0000_nnnn_mmmm_1100); //mov.w @(R0,), sh4op(i0000_nnnn_mmmm_1101); //mov.l @(R0,), sh4op(i0000_nnnn_mmmm_1110); //mac.l @+,@+ sh4op(i0000_nnnn_mmmm_1111); // // 1xxx //mov.l ,@(,) sh4op(i0001_nnnn_mmmm_iiii); // // 2xxx //mov.b ,@ sh4op(i0010_nnnn_mmmm_0000); // mov.w ,@ sh4op(i0010_nnnn_mmmm_0001); // mov.l ,@ sh4op(i0010_nnnn_mmmm_0010); // mov.b ,@- sh4op(i0010_nnnn_mmmm_0100); //mov.w ,@- sh4op(i0010_nnnn_mmmm_0101); //mov.l ,@- sh4op(i0010_nnnn_mmmm_0110); // div0s , sh4op(i0010_nnnn_mmmm_0111); // tst , sh4op(i0010_nnnn_mmmm_1000); //and , sh4op(i0010_nnnn_mmmm_1001); //xor , sh4op(i0010_nnnn_mmmm_1010); //or , sh4op(i0010_nnnn_mmmm_1011); //cmp/str , sh4op(i0010_nnnn_mmmm_1100); //xtrct , sh4op(i0010_nnnn_mmmm_1101); //mulu , sh4op(i0010_nnnn_mmmm_1110); //muls , sh4op(i0010_nnnn_mmmm_1111); // // 3xxx // cmp/eq , sh4op(i0011_nnnn_mmmm_0000); // cmp/hs , sh4op(i0011_nnnn_mmmm_0010); //cmp/ge , sh4op(i0011_nnnn_mmmm_0011); //div1 , sh4op(i0011_nnnn_mmmm_0100); //dmulu.l , sh4op(i0011_nnnn_mmmm_0101); // cmp/hi , sh4op(i0011_nnnn_mmmm_0110); //cmp/gt , sh4op(i0011_nnnn_mmmm_0111); // sub , sh4op(i0011_nnnn_mmmm_1000); //subc , sh4op(i0011_nnnn_mmmm_1010); //subv , sh4op(i0011_nnnn_mmmm_1011); //add , sh4op(i0011_nnnn_mmmm_1100); //dmuls.l , sh4op(i0011_nnnn_mmmm_1101); //addc , sh4op(i0011_nnnn_mmmm_1110); // addv , sh4op(i0011_nnnn_mmmm_1111); // // 4xxx //sts.l FPUL,@- sh4op(i0100_nnnn_0101_0010); //sts.l FPSCR,@- sh4op(i0100_nnnn_0110_0010); //sts.l MACH,@- sh4op(i0100_nnnn_0000_0010); //sts.l MACL,@- sh4op(i0100_nnnn_0001_0010); //sts.l PR,@- sh4op(i0100_nnnn_0010_0010); //sts.l DBR,@- sh4op(i0100_nnnn_1111_0010); //stc.l SR,@- sh4op(i0100_nnnn_0000_0011); //stc.l GBR,@- sh4op(i0100_nnnn_0001_0011); //stc.l VBR,@- sh4op(i0100_nnnn_0010_0011); //stc.l SSR,@- sh4op(i0100_nnnn_0011_0011); //stc.l SGR,@- sh4op(i0100_nnnn_0011_0010); //stc.l SPC,@- sh4op(i0100_nnnn_0100_0011); //stc Rm_BANK,@- sh4op(i0100_nnnn_1mmm_0011); //lds.l @+,MACH sh4op(i0100_nnnn_0000_0110); //lds.l @+,MACL sh4op(i0100_nnnn_0001_0110); //lds.l @+,PR sh4op(i0100_nnnn_0010_0110); //lds.l @+,FPUL sh4op(i0100_nnnn_0101_0110); //lds.l @+,FPSCR sh4op(i0100_nnnn_0110_0110); //ldc.l @+,DBR sh4op(i0100_nnnn_1111_0110); //ldc.l @+,SR sh4op(i0100_nnnn_0000_0111); //ldc.l @+,GBR sh4op(i0100_nnnn_0001_0111); //ldc.l @+,VBR sh4op(i0100_nnnn_0010_0111); //ldc.l @+,SSR sh4op(i0100_nnnn_0011_0111); //ldc.l @+,SGR sh4op(i0100_nnnn_0011_0110); //ldc.l @+,SPC sh4op(i0100_nnnn_0100_0111); //ldc.l @+,R0_BANK sh4op(i0100_nnnn_1mmm_0111); //lds ,MACH sh4op(i0100_nnnn_0000_1010); //lds ,MACL sh4op(i0100_nnnn_0001_1010); //lds ,PR sh4op(i0100_nnnn_0010_1010); //lds ,FPUL sh4op(i0100_nnnn_0101_1010); //lds ,FPSCR sh4op(i0100_nnnn_0110_1010); //ldc ,GBR sh4op(i0100_nnnn_1111_1010); //ldc ,SR sh4op(i0100_nnnn_0000_1110); //ldc ,GBR sh4op(i0100_nnnn_0001_1110); //ldc ,VBR sh4op(i0100_nnnn_0010_1110); //ldc ,SSR sh4op(i0100_nnnn_0011_1110); //ldc ,SGR sh4op(i0100_nnnn_0011_1010); //ldc ,SPC sh4op(i0100_nnnn_0100_1110); //ldc ,R0_BANK sh4op(i0100_nnnn_1mmm_1110); //shll sh4op(i0100_nnnn_0000_0000); //4210 //dt sh4op(i0100_nnnn_0001_0000); //shal sh4op(i0100_nnnn_0010_0000); //shlr sh4op(i0100_nnnn_0000_0001); //cmp/pz sh4op(i0100_nnnn_0001_0001); //shar sh4op(i0100_nnnn_0010_0001); //rotcl sh4op(i0100_nnnn_0010_0100); //rotl sh4op(i0100_nnnn_0000_0100); //cmp/pl sh4op(i0100_nnnn_0001_0101); //rotcr sh4op(i0100_nnnn_0010_0101); //rotr sh4op(i0100_nnnn_0000_0101); //shll2 sh4op(i0100_nnnn_0000_1000); //shll8 sh4op(i0100_nnnn_0001_1000); //shll16 sh4op(i0100_nnnn_0010_1000); //shlr2 sh4op(i0100_nnnn_0000_1001); //shlr8 sh4op(i0100_nnnn_0001_1001); //shlr16 sh4op(i0100_nnnn_0010_1001); //jmp @ sh4op(i0100_nnnn_0010_1011); //jsr @ sh4op(i0100_nnnn_0000_1011); //tas.b @ sh4op(i0100_nnnn_0001_1011); //shad , sh4op(i0100_nnnn_mmmm_1100); //shld , sh4op(i0100_nnnn_mmmm_1101); //mac.w @+,@+ sh4op(i0100_nnnn_mmmm_1111); // // 5xxx //mov.l @(,), sh4op(i0101_nnnn_mmmm_iiii); // // 6xxx //mov.b @, sh4op(i0110_nnnn_mmmm_0000); //mov.w @, sh4op(i0110_nnnn_mmmm_0001); //mov.l @, sh4op(i0110_nnnn_mmmm_0010); //mov , sh4op(i0110_nnnn_mmmm_0011); //mov.b @+, sh4op(i0110_nnnn_mmmm_0100); //mov.w @+, sh4op(i0110_nnnn_mmmm_0101); //mov.l @+, sh4op(i0110_nnnn_mmmm_0110); //not , sh4op(i0110_nnnn_mmmm_0111); //swap.b , sh4op(i0110_nnnn_mmmm_1000); //swap.w , sh4op(i0110_nnnn_mmmm_1001); //negc , sh4op(i0110_nnnn_mmmm_1010); //neg , sh4op(i0110_nnnn_mmmm_1011); //extu.b , sh4op(i0110_nnnn_mmmm_1100); //extu.w , sh4op(i0110_nnnn_mmmm_1101); //exts.b , sh4op(i0110_nnnn_mmmm_1110); //exts.w , sh4op(i0110_nnnn_mmmm_1111); // // 7xxx //add #, sh4op(i0111_nnnn_iiii_iiii); // // 8xxx // bf sh4op(i1000_1011_iiii_iiii); // bf.s sh4op(i1000_1111_iiii_iiii); // bt sh4op(i1000_1001_iiii_iiii); // bt.s sh4op(i1000_1101_iiii_iiii); // cmp/eq #,R0 sh4op(i1000_1000_iiii_iiii); // mov.b R0,@(,) sh4op(i1000_0000_mmmm_iiii); // mov.w R0,@(,) sh4op(i1000_0001_mmmm_iiii); // mov.b @(,),R0 sh4op(i1000_0100_mmmm_iiii); // mov.w @(,),R0 sh4op(i1000_0101_mmmm_iiii); // // 9xxx //mov.w @(,PC), sh4op(i1001_nnnn_iiii_iiii); // // Axxx // bra sh4op(i1010_iiii_iiii_iiii); // // Bxxx // bsr sh4op(i1011_iiii_iiii_iiii); // // Cxxx // mov.b R0,@(,GBR) sh4op(i1100_0000_iiii_iiii); // mov.w R0,@(,GBR) sh4op(i1100_0001_iiii_iiii); // mov.l R0,@(,GBR) sh4op(i1100_0010_iiii_iiii); // trapa # sh4op(i1100_0011_iiii_iiii); // mov.b @(,GBR),R0 sh4op(i1100_0100_iiii_iiii); // mov.w @(,GBR),R0 sh4op(i1100_0101_iiii_iiii); // mov.l @(,GBR),R0 sh4op(i1100_0110_iiii_iiii); // mova @(,PC),R0 sh4op(i1100_0111_iiii_iiii); // tst #,R0 sh4op(i1100_1000_iiii_iiii); // and #,R0 sh4op(i1100_1001_iiii_iiii); // xor #,R0 sh4op(i1100_1010_iiii_iiii); // or #,R0 sh4op(i1100_1011_iiii_iiii); // tst.b #,@(R0,GBR) sh4op(i1100_1100_iiii_iiii); // and.b #,@(R0,GBR) sh4op(i1100_1101_iiii_iiii); // xor.b #,@(R0,GBR) sh4op(i1100_1110_iiii_iiii); // or.b #,@(R0,GBR) sh4op(i1100_1111_iiii_iiii); // // Dxxx // mov.l @(,PC), sh4op(i1101_nnnn_iiii_iiii); // // Exxx // mov #, sh4op(i1110_nnnn_iiii_iiii); // Fxxx //fadd , sh4op(i1111_nnnn_mmmm_0000); //fsub , sh4op(i1111_nnnn_mmmm_0001); //fmul , sh4op(i1111_nnnn_mmmm_0010); //fdiv , sh4op(i1111_nnnn_mmmm_0011); //fcmp/eq , sh4op(i1111_nnnn_mmmm_0100); //fcmp/gt , sh4op(i1111_nnnn_mmmm_0101); //fmov.s @(R0,), sh4op(i1111_nnnn_mmmm_0110); //fmov.s ,@(R0,) sh4op(i1111_nnnn_mmmm_0111); //fmov.s @, sh4op(i1111_nnnn_mmmm_1000); //fmov.s @+, sh4op(i1111_nnnn_mmmm_1001); //fmov.s ,@ sh4op(i1111_nnnn_mmmm_1010); //fmov.s ,@- sh4op(i1111_nnnn_mmmm_1011); //fmov , sh4op(i1111_nnnn_mmmm_1100); //fabs sh4op(i1111_nnnn_0101_1101); // FSCA FPUL, DRn//F0FD//1111_nnnn_1111_1101 sh4op(i1111_nnn0_1111_1101); //fcnvds ,FPUL sh4op(i1111_nnnn_1011_1101); //fcnvsd FPUL, sh4op(i1111_nnnn_1010_1101); //fipr , sh4op(i1111_nnmm_1110_1101); //fldi0 sh4op(i1111_nnnn_1000_1101); //fldi1 sh4op(i1111_nnnn_1001_1101); //flds ,FPUL sh4op(i1111_nnnn_0001_1101); //float FPUL, sh4op(i1111_nnnn_0010_1101); //fneg sh4op(i1111_nnnn_0100_1101); //frchg sh4op(i1111_1011_1111_1101); //fschg sh4op(i1111_0011_1111_1101); //fsqrt sh4op(i1111_nnnn_0110_1101); //ftrc , FPUL sh4op(i1111_nnnn_0011_1101); //fsts FPUL, sh4op(i1111_nnnn_0000_1101); //fmac ,, sh4op(i1111_nnnn_mmmm_1110); //ftrv xmtrx, sh4op(i1111_nn01_1111_1101); //FSRRA sh4op(i1111_nnnn_0111_1101); sh4op(iNotImplemented);