📄 dis_cf.c
字号:
disp = (int)cpu_read_data((ADDRESS)disasm_pc,32); inc_disasm_pc(4); append_register(dstr,opword,ADDRESS_REGISTER,2); append_string(dstr,",#"); sprintf(buffer,"%d",disp); append_string(dstr,buffer);}static voidfunc44 (int index, WORD opword){ /* BKPT */ int data; (void)index; append_string(dstr,"#"); data = opword & 0x0007; append_value(dstr,data,8);}static voidfunc45 (int index, WORD opword){ /* SBCD ABCD Dy,Dx */ (void)index; append_register(dstr,opword,DATA_REGISTER,2); append_string(dstr,","); append_register(dstr,opword,DATA_REGISTER,11);}static voidfunc46 (int index, WORD opword){ /* SBCD ABCD -(Ay),-(Ax) */ (void)index; append_string(dstr,"-("); append_register(dstr,opword,ADDRESS_REGISTER,2); append_string(dstr,"),-("); append_register(dstr,opword,ADDRESS_REGISTER,11); append_string(dstr,")");}#endif /* MCF5200 */static voidfunc47 (int index, WORD opword){ /* EOR SUB ADD OR */ append_size(dstr,opword,7,TRUE); append_register(dstr,opword,DATA_REGISTER,11); append_string(dstr,","); append_ea(dstr,opword,5,isa[index].ea_mask);}#ifndef MCF5200static voidfunc48 (int index, WORD opword){ /* BFCHG BFCLR BFSET BFTST */ int opword2; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,"{"); if (opword2 & 0x0800) { /* Do = 1 -- Dn */ append_register(dstr,opword2,DATA_REGISTER,8); } else { append_value(dstr,((opword2 & 0x07C0) >> 6),SIZE_BYTE); } append_string(dstr,":"); if (opword2 & 0x0020) { /* Dw = 1 -- Dn */ append_register(dstr,opword2,DATA_REGISTER,2); } else { append_value(dstr,(opword2 & 0x001F),SIZE_BYTE); } append_string(dstr,"}");}static voidfunc49 (int index, WORD opword){ /* BFEXTS BFEXTU */ int opword2; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,"{"); if (opword2 & 0x0800) { /* Do = 1 -- Dn */ append_register(dstr,opword2,DATA_REGISTER,8); } else { append_value(dstr,((opword2 & 0x07C0) >> 6),SIZE_BYTE); } append_string(dstr,":"); if (opword2 & 0x0020) { /* Dw = 1 -- Dn */ append_register(dstr,opword2,DATA_REGISTER,2); } else { append_value(dstr,(opword2 & 0x001F),SIZE_BYTE); } append_string(dstr,"},"); append_register(dstr,opword2,DATA_REGISTER,14);}static voidfunc50 (int index, WORD opword){ /* BFINS */ int opword2; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_register(dstr,opword2,DATA_REGISTER,14); append_string(dstr,","); append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,"{"); if (opword2 & 0x0800) { /* Do = 1 -- Dn */ append_register(dstr,opword2,DATA_REGISTER,8); } else { append_value(dstr,((opword2 & 0x07C0) >> 6),SIZE_BYTE); } append_string(dstr,":"); if (opword2 & 0x0020) { /* Dw = 1 -- Dn */ append_register(dstr,opword2,DATA_REGISTER,2); } else { append_value(dstr,(opword2 & 0x001F),SIZE_BYTE); } append_string(dstr,"}");}static voidfunc51 (int index, WORD opword){ /* CHK */ append_size2(dstr,opword,8,TRUE); append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,","); append_register(dstr,opword,DATA_REGISTER,11);}static voidfunc52 (int index, WORD opword){ /* CMPM */ (void)index; append_size(dstr,opword,7,TRUE); append_string(dstr,"("); append_register(dstr,opword,ADDRESS_REGISTER,2); append_string(dstr,")+,("); append_register(dstr,opword,ADDRESS_REGISTER,11); append_string(dstr,")+");}static voidfunc53 (int index, WORD opword){ /* DBcc */ int disp, target;#ifdef SYMBOL_TABLE char tstr[100];#endif (void)index; disp = (int)((SWORD)cpu_read_data((ADDRESS)disasm_pc,16)); target = (unsigned int)disasm_pc + disp; inc_disasm_pc(2); append_register(dstr,opword,DATA_REGISTER,2); append_string(dstr,",");#ifdef SYMBOL_TABLE if (symtab_convert_address((ADDRESS)target,tstr)) { append_string(dstr,tstr); } else append_value(dstr,target,SIZE_LONG);#else append_value(dstr,target,SIZE_LONG);#endif}static voidfunc54 (int index, WORD opword){ /* DIVS.W DIVU.W */ append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,","); append_register(dstr,opword,DATA_REGISTER,11);}static voidfunc55 (int index, WORD opword){ /* DIVS.L DIVU.L DIVSL.L DIVUL.L*/ int opword2, same_reg; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); same_reg = (((opword2 & 0x7000) >> 12) == (opword2 & 0x0007)); if (opword2 & 0x0800) { /* DIVS */ if ((opword2 & 0x0400) || same_reg) { append_instruction(dstr,"DIVS.L"); } else { append_instruction(dstr,"DIVSL.L"); } } else { /* DIVU */ if ((opword2 & 0x0400) || same_reg) { append_instruction(dstr,"DIVU.L"); } else { append_instruction(dstr,"DIVUL.L"); } } append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,","); if (same_reg) { append_register(dstr,opword2,DATA_REGISTER,14); } else { append_register(dstr,opword2,DATA_REGISTER,2); append_string(dstr,":"); append_register(dstr,opword2,DATA_REGISTER,14); }}static voidfunc56 (int index, WORD opword){ /* EXG.L */ (void)index; switch (opword & 0x00F8) { case 0x0040: append_register(dstr,opword,DATA_REGISTER,11); append_string(dstr,","); append_register(dstr,opword,DATA_REGISTER,2); break; case 0x0048: append_register(dstr,opword,ADDRESS_REGISTER,11); append_string(dstr,","); append_register(dstr,opword,ADDRESS_REGISTER,2); break; case 0x0088: append_register(dstr,opword,DATA_REGISTER,11); append_string(dstr,","); append_register(dstr,opword,ADDRESS_REGISTER,2); break; default: valid_instruction = FALSE; }}static voidfunc57 (int index, WORD opword){ /* PACK UNPK -(Ax),-(Ay),#<adj> */ int adj; (void)index; adj = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_string(dstr,"-("); append_register(dstr,opword,ADDRESS_REGISTER,2); append_string(dstr,"),-("); append_register(dstr,opword,ADDRESS_REGISTER,11); append_string(dstr,"),#"); append_value(dstr,adj,SIZE_WORD);}static voidfunc58 (int index, WORD opword){ /* PACK UNPK Dx,Dy,#<adj> */ int adj; (void)index; adj = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_register(dstr,opword,DATA_REGISTER,2); append_string(dstr,","); append_register(dstr,opword,DATA_REGISTER,11); append_string(dstr,",#"); append_value(dstr,adj,SIZE_WORD);}static voidfunc59 (int index, WORD opword){ /* TRAPcc .W .L #<data> */ int data; (void)index; if (opword & 0x0001) { /* long */ data = cpu_read_data((ADDRESS)disasm_pc,SIZE_LONG); inc_disasm_pc(4); append_size(dstr,0x0002,1,TRUE); append_string(dstr,"#"); append_value(dstr,data,SIZE_LONG); } else { /* word */ data = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_size(dstr,0x0002,2,TRUE); append_string(dstr,"#"); append_value(dstr,data,SIZE_WORD); }}static voidfunc60 (int index, WORD opword){ /* MOVE to USP */ (void)index; append_register(dstr,opword,ADDRESS_REGISTER,2); append_string(dstr,",USP");}static voidfunc61 (int index, WORD opword){ /* MOVE from USP */ (void)index; append_string(dstr,"USP,"); append_register(dstr,opword,ADDRESS_REGISTER,2);}#endif /* MCF5200 */#ifdef CPU32static voidfunc62 (int index, WORD opword){ /* TBL */ int opword2; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); switch (opword2 & 0x0C00) { case 0x0000: append_instruction(dstr,"TBLU"); break; case 0x0400: append_instruction(dstr,"TBLUN"); break; case 0x0800: append_instruction(dstr,"TBLS"); break; case 0x0C00: append_instruction(dstr,"TBLSN"); break; } append_size(dstr,opword2,7,TRUE); if ((opword & 0x0038) == 0) { /* TBL Dym:Dyn,Dx */ append_register(dstr,opword,DATA_REGISTER,2); append_string(dstr,":"); append_register(dstr,opword2,DATA_REGISTER,2); append_string(dstr,","); append_register(dstr,opword2,DATA_REGISTER,14); } else { /* TBL <ea>,Dx */ append_ea(dstr,opword,5,isa[index].ea_mask); append_string(dstr,","); append_register(dstr,opword2,DATA_REGISTER,14); }}static voidfunc63 (int index, WORD opword){ /* LPSTOP */ int opword2, data; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); if (opword == 0x01C0) { data = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); append_string(dstr,"#"); append_value(dstr,data,SIZE_WORD); } else { /* this opcode matches TBL as well, check it */ disasm_pc = disasm_pc - 2; func62(index,opword); }}#endif /* CPU32 *//*************************************************************/#ifdef MCF5200Mstatic voidmac1 (int index, WORD opword){ /* MAC.W Rw,Rx */ /* MAC.L Rw,Rx */ /* MSAC.W Rw,Rx */ /* MSAC.L Rw,Rx */ int opword2; opword2 = cpu_read_data((ADDRESS)disasm_pc,SIZE_WORD); inc_disasm_pc(2); if (opword2 & 0x0100) { if (opword2 & 0x0100) append_instruction(dstr,"MSAC.L"); else append_instruction(dstr,"MSAC.W"); } else { if (opword2 & 0x0100) append_instruction(dstr,"MAC.L"); else append_instruction(dstr,"MAC.W"); } append_register(dstr,opword,6,11); /* Rw */ if (opword2 & 0x0080) append_string(dstr,".U,");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -