void sm511_device::execute_one() { switch (m_op & 0xf0) { case 0x20: op_lax(); break; case 0x30: op_adx(); break; case 0x40: op_lb(); break; case 0x70: op_tl(); break; case 0x80: case 0x90: case 0xa0: case 0xb0: op_t(); break; case 0xc0: case 0xd0: case 0xe0: case 0xf0: op_tm(); break; default: switch (m_op & 0xfc) { case 0x04: op_rm(); break; case 0x0c: op_sm(); break; case 0x10: op_exc(); break; case 0x14: op_exci(); break; case 0x18: op_lda(); break; case 0x1c: op_excd(); break; case 0x54: op_tmi(); break; case 0x68: op_tml(); break; default: switch (m_op) { case 0x00: op_rot(); break; // case 0x01: op_xxx(); break; // ? case 0x02: op_sbm(); break; case 0x03: op_atpl(); break; case 0x08: op_add(); break; case 0x09: op_add11(); break; case 0x0a: op_coma(); break; case 0x0b: op_exbla(); break; case 0x50: op_kta(); break; case 0x51: op_tb(); break; case 0x52: op_tc(); break; case 0x53: op_tam(); break; case 0x58: op_tis(); break; case 0x59: op_atl(); break; case 0x5a: op_ta0(); break; case 0x5b: op_tabl(); break; case 0x5c: op_atx(); break; // case 0x5d: op_cend(); break; case 0x5e: op_tal(); break; case 0x5f: op_lbl(); break; case 0x61: op_pre(); break; case 0x62: op_wr(); break; case 0x63: op_ws(); break; case 0x64: op_incb(); break; // case 0x65: op_idiv(); break; case 0x66: op_rc(); break; case 0x67: op_sc(); break; case 0x6c: op_decb(); break; case 0x6d: op_ptw(); break; case 0x6e: op_rtn0(); break; case 0x6f: op_rtn1(); break; // extended opcodes case 0x60: m_op = m_op << 8 | m_param; switch (m_param) { case 0x30: op_rme(); break; case 0x31: op_sme(); break; case 0x32: op_tmel(); break; case 0x33: op_atfc(); break; case 0x34: op_bdc(); break; case 0x35: op_atbp(); break; default: op_illegal(); break; } break; // 0x60 default: op_illegal(); break; } break; // 0xff } break; // 0xfc } // big switch }
void sm510_device::execute_one() { switch (m_op & 0xf0) { case 0x20: op_lax(); break; case 0x30: op_adx(); break; case 0x40: op_lb(); break; case 0x80: case 0x90: case 0xa0: case 0xb0: op_t(); break; case 0xc0: case 0xd0: case 0xe0: case 0xf0: op_tm(); break; default: switch (m_op & 0xfc) { case 0x04: op_rm(); break; case 0x0c: op_sm(); break; case 0x10: op_exc(); break; case 0x14: op_exci(); break; case 0x18: op_lda(); break; case 0x1c: op_excd(); break; case 0x54: op_tmi(); break; case 0x70: case 0x74: case 0x78: op_tl(); break; case 0x7c: op_tml(); break; default: switch (m_op) { case 0x00: op_skip(); break; case 0x01: op_atbp(); break; case 0x02: op_sbm(); break; case 0x03: op_atpl(); break; case 0x08: op_add(); break; case 0x09: op_add11(); break; case 0x0a: op_coma(); break; case 0x0b: op_exbla(); break; case 0x51: op_tb(); break; case 0x52: op_tc(); break; case 0x53: op_tam(); break; case 0x58: op_tis(); break; case 0x59: op_atl(); break; case 0x5a: op_ta0(); break; case 0x5b: op_tabl(); break; case 0x5d: op_cend(); break; case 0x5e: op_tal(); break; case 0x5f: op_lbl(); break; case 0x60: op_atfc(); break; case 0x61: op_atr(); break; case 0x62: op_wr(); break; case 0x63: op_ws(); break; case 0x64: op_incb(); break; case 0x65: op_idiv(); break; case 0x66: op_rc(); break; case 0x67: op_sc(); break; case 0x68: op_tf1(); break; case 0x69: op_tf4(); break; case 0x6a: op_kta(); break; case 0x6b: op_rot(); break; case 0x6c: op_decb(); break; case 0x6d: op_bdc(); break; case 0x6e: op_rtn0(); break; case 0x6f: op_rtn1(); break; default: op_illegal(); break; } break; // 0xff } break; // 0xfc } // big switch // BM high bit is only valid for 1 step m_sbm = (m_op == 0x02); }
void kb1013vk12_device::execute_one() { switch (m_op & 0xf0) { case 0x20: op_lax(); break; // LC case 0x30: op_adx(); break; // AS/A10 case 0x40: op_lb(); break; // LAS case 0x70: op_ssr(); break; // LP case 0x80: case 0x90: case 0xa0: case 0xb0: op_t(); break; // BR (LP+this=JMP) case 0xc0: case 0xd0: case 0xe0: case 0xf0: op_trs(); break; // CBR/CZP (LP+this=CAL) default: switch (m_op & 0xfc) { case 0x04: op_rm(); break; // BM0 case 0x0c: op_sm(); break; // BM1 case 0x10: op_exc(); break; // XM/XE case 0x14: op_exci(); break; // XI/XEI case 0x18: op_lda(); break; // LE case 0x1c: op_excd(); break; // XD/XED case 0x54: op_tmi(); break; // SM1 default: switch (m_op) { case 0x00: op_skip(); break; // NOP case 0x01: op_atr(); break; // OAR case 0x02: op_bs1(); break; // *BS1 case 0x03: op_atbp(); break; case 0x08: op_add(); break; // AM case 0x09: op_add11(); break; // AC case 0x0a: op_coma(); break; // COM case 0x0b: op_exbla(); break; // XL case 0x50: op_tal(); break; // SI1 case 0x51: op_tb(); break; // SI0 case 0x52: op_tc(); break; // SCO case 0x53: op_tam(); break; // SAM case 0x58: op_tis(); break; // TIM case 0x59: op_ptw(); break; case 0x5a: op_ta0(); break; // SAO case 0x5b: op_tabl(); break; // SAL case 0x5c: op_tw(); break; case 0x5d: op_dtw(); break; case 0x5f: op_lbl(); break; // LAF case 0x60: op_comcn(); break; case 0x61: op_pdtw(); break; case 0x62: op_wr(); break; case 0x63: op_ws(); break; case 0x64: op_incb(); break; // INC case 0x65: op_idiv(); break; // SYN case 0x66: op_rc(); break; // CLC case 0x67: op_sc(); break; // STC case 0x68: op_rmf(); break; // CLL case 0x69: op_smf(); break; // LD0 case 0x6a: op_kta(); break; // ICD case 0x6b: op_bs0(); break; // *BS0 case 0x6c: op_decb(); break; // DEC case 0x6d: op_comcb(); break; // CMS case 0x6e: op_rtn0(); break; // RT case 0x6f: op_rtn1(); break; // RTS // extended opcodes case 0x5e: m_op = m_op << 8 | m_param; switch (m_param) { case 0x00: op_cend(); break; // HLT case 0x04: op_dta(); break; // LDF default: op_illegal(); break; } break; // 0x5e default: op_illegal(); break; } break; // 0xff } break; // 0xfc } // big switch }
void doop(Mips * emu, uint32_t op) { switch(op & 0xfc000000) { case 0x8000000: op_j(emu,op); return; case 0xc000000: op_jal(emu,op); return; case 0x10000000: op_beq(emu,op); return; case 0x14000000: op_bne(emu,op); return; case 0x18000000: op_blez(emu,op); return; case 0x1c000000: op_bgtz(emu,op); return; case 0x20000000: op_addi(emu,op); return; case 0x24000000: op_addiu(emu,op); return; case 0x28000000: op_slti(emu,op); return; case 0x2c000000: op_sltiu(emu,op); return; case 0x30000000: op_andi(emu,op); return; case 0x34000000: op_ori(emu,op); return; case 0x38000000: op_xori(emu,op); return; case 0x3c000000: op_lui(emu,op); return; case 0x50000000: op_beql(emu,op); return; case 0x54000000: op_bnel(emu,op); return; case 0x58000000: op_blezl(emu,op); return; case 0x80000000: op_lb(emu,op); return; case 0x84000000: op_lh(emu,op); return; case 0x88000000: op_lwl(emu,op); return; case 0x8c000000: op_lw(emu,op); return; case 0x90000000: op_lbu(emu,op); return; case 0x94000000: op_lhu(emu,op); return; case 0x98000000: op_lwr(emu,op); return; case 0xa0000000: op_sb(emu,op); return; case 0xa4000000: op_sh(emu,op); return; case 0xa8000000: op_swl(emu,op); return; case 0xac000000: op_sw(emu,op); return; case 0xb8000000: op_swr(emu,op); return; case 0xbc000000: op_cache(emu,op); return; case 0xc0000000: op_ll(emu,op); return; case 0xcc000000: op_pref(emu,op); return; case 0xe0000000: op_sc(emu,op); return; } switch(op & 0xfc00003f) { case 0x0: op_sll(emu,op); return; case 0x2: op_srl(emu,op); return; case 0x3: op_sra(emu,op); return; case 0x4: op_sllv(emu,op); return; case 0x6: op_srlv(emu,op); return; case 0x7: op_srav(emu,op); return; case 0x8: op_jr(emu,op); return; case 0x9: op_jalr(emu,op); return; case 0xc: op_syscall(emu,op); return; case 0xf: op_sync(emu,op); return; case 0x10: op_mfhi(emu,op); return; case 0x11: op_mthi(emu,op); return; case 0x12: op_mflo(emu,op); return; case 0x13: op_mtlo(emu,op); return; case 0x18: op_mult(emu,op); return; case 0x19: op_multu(emu,op); return; case 0x1a: op_div(emu,op); return; case 0x1b: op_divu(emu,op); return; case 0x20: op_add(emu,op); return; case 0x21: op_addu(emu,op); return; case 0x22: op_sub(emu,op); return; case 0x23: op_subu(emu,op); return; case 0x24: op_and(emu,op); return; case 0x25: op_or(emu,op); return; case 0x26: op_xor(emu,op); return; case 0x27: op_nor(emu,op); return; case 0x2a: op_slt(emu,op); return; case 0x2b: op_sltu(emu,op); return; case 0x2d: op_addu(emu,op); //daddu return; case 0x36: op_tne(emu,op); return; } switch(op & 0xfc1f0000) { case 0x4000000: op_bltz(emu,op); return; case 0x4010000: op_bgez(emu,op); return; case 0x4020000: op_bltzl(emu,op); return; case 0x4030000: op_bgezl(emu,op); return; case 0x4100000: op_bltzal(emu,op); return; case 0x4110000: op_bgezal(emu,op); return; case 0x5c000000: op_bgtzl(emu,op); return; } switch(op & 0xffffffff) { case 0x42000002: op_tlbwi(emu,op); return; case 0x42000006: op_tlbwr(emu,op); return; case 0x42000008: op_tlbp(emu,op); return; case 0x42000018: op_eret(emu,op); return; } switch(op & 0xfc0007ff) { case 0xa: op_movz(emu,op); return; case 0xb: op_movn(emu,op); return; case 0x70000002: op_mul(emu,op); return; } switch(op & 0xffe00000) { case 0x40000000: op_mfc0(emu,op); return; case 0x40800000: op_mtc0(emu,op); return; } switch(op & 0xfe00003f) { case 0x42000020: op_wait(emu,op); return; } // printf("unhandled opcode at %x -> %x\n",emu->pc,op); setExceptionCode(emu,EXC_RI); emu->exceptionOccured = 1; return; }