⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dis_cf.c

📁 完整的Bell实验室的嵌入式文件系统TFS
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -