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

📄 mpc.c

📁 motorola 针对coldfire 5275 评估板的Dbug bootloader源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    append_register(dstr,opword,REG_FLOAT,16);
}

/********************************************************************/
static void
func16 (unsigned int opword)
{
    append_Xbit_number(dstr,opword,3,6);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,11);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,16);
}

/********************************************************************/
static void
func17 (unsigned int opword)
{
    append_register(dstr,opword,REG_FLOAT,6);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,16);
}

/********************************************************************/
static void
func18 (unsigned int opword)
{
    append_register(dstr,opword,REG_FLOAT,6);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,11);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,21);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,16);
}

/********************************************************************/
static void
func19 (unsigned int opword)
{
    append_register(dstr,opword,REG_FLOAT,6);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,11);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_FLOAT,21);
}

/********************************************************************/
static void
insn_rD_d_rA (unsigned int opword, int *d, int *rA)
{
    /*
     * Ex: lbz  rD,d(rA)
     */
    char valstr[10];
    int disp;

    disp = opword & 0x0000FFFF;
    if (disp & 0x00008000)
    {
        disp = disp | 0xFFFF0000;
    }
    sprintf(valstr,"%d",disp);
    *d = disp;

    append_register(dstr,opword,REG_INT,6);
    append_string(dstr,COMMA);
    append_string(dstr,valstr);
    append_string(dstr,"(");
    *rA = append_register(dstr,opword,REG_INT,11);
    append_string(dstr,")");
}

/********************************************************************/
static void
insn_rD_rA_rB (unsigned int opword, int *rA, int *rB)
{
    /*
     * Ex: lbzx  rD,rA,rB
     */
    append_register(dstr,opword,REG_INT,6);
    append_string(dstr,COMMA);
    *rA = append_register(dstr,opword,REG_INT,11);
    append_string(dstr,COMMA);
    *rB = append_register(dstr,opword,REG_INT,16);
}

/********************************************************************/
static void
func20a (unsigned int opword)
{
    /*
     * Ex: lbz  rD,d(rA), where EA = (rA|0) + d
     */
    int d, rA;

    insn_rD_d_rA(opword, &d, &rA);
    append_ea_rA_0_d(dstr, d, rA);
}

/********************************************************************/
static void
func20b (unsigned int opword)
{
    /*
     * Ex: lhau  rD,d(rA), where EA = (rA) + (d)
     */
    int d, rA;

    insn_rD_d_rA(opword, &d, &rA);
    append_ea_rA_d(dstr, d, rA);
}

/********************************************************************/
static void
func20c (unsigned int opword)
{
    /*
     * Ex: lbzx  rD,rA,rB, where EA = (rA|0)+rB
     */
    int rA, rB;

    insn_rD_rA_rB(opword, &rA, &rB);
    append_ea_rA_0_rB(dstr, rA, rB);
}

/********************************************************************/
static void
func20d (unsigned int opword)
{
    /*
     * Ex: lbzx  rD,rA,rB, where EA = (rA) + (rB)
     */
    int rA, rB;

    insn_rD_rA_rB(opword, &rA, &rB);
    append_ea_rA_rB(dstr, rA, rB);
}

/********************************************************************/
static void
insn_frD_d_rA (unsigned int opword, int *d, int *rA)
{
    /*
     * Ex: lfd  frD,d(rA)
     */
    char valstr[10];
    int disp;

    disp = opword & 0x0000FFFF;
    if (disp & 0x00008000)
    {
        disp = disp | 0xFFFF0000;
    }
    sprintf(valstr,"%d",disp);
    *d = disp;

    append_register(dstr,opword,REG_FLOAT,6);
    append_string(dstr,COMMA);
    append_string(dstr,valstr);
    append_string(dstr,"(");
    *rA = append_register(dstr,opword,REG_INT,11);
    append_string(dstr,")");
}

/********************************************************************/
static void
insn_frD_rA_rB (unsigned int opword, int *rA, int *rB)
{
    /*
     * Ex: lfdux  frD,rA,rB
     */
    append_register(dstr,opword,REG_FLOAT,6);
    append_string(dstr,COMMA);
    *rA = append_register(dstr,opword,REG_INT,11);
    append_string(dstr,COMMA);
    *rB = append_register(dstr,opword,REG_INT,16);
}

/********************************************************************/
static void
func21a (unsigned int opword)
{
    /*
     * Ex: lfd  frD,d(rA), where EA = (rA|0) + d
     */
    int d, rA;

    insn_frD_d_rA(opword, &d, &rA);
    append_ea_rA_0_d(dstr, d, rA);
}

/********************************************************************/
static void
func21b (unsigned int opword)
{
    /*
     * Ex: lfd  frD,d(rA), where EA = (rA) + d
     */
    int d, rA;

    insn_frD_d_rA(opword, &d, &rA);
    append_ea_rA_d(dstr, d, rA);
}

/********************************************************************/
static void
func21c (unsigned int opword)
{
    /*
     * Ex: lfdx  frD,rA,rB where EA = (rA|0) + rB
     */
    int rA, rB;

    insn_frD_rA_rB(opword, &rA, &rB);
    append_ea_rA_0_rB(dstr, rA, rB);
}

/********************************************************************/
static void
func21d (unsigned int opword)
{
    /*
     * Ex: lfdux  frD,rA),rB where EA = (rA) + (rB)
     */
    int rA, rB;

    insn_frD_rA_rB(opword, &rA, &rB);
    append_ea_rA_rB(dstr, rA, rB);
}

/********************************************************************/
static void
func23 (unsigned int opword)
{
    int nb;
    char nbstr[10];

    nb = ((opword & 0x0000F800) >> 11);
    if (nb == 0)
    {
        nb = 32;
    }
    sprintf(nbstr,"%d",nb);
    append_register(dstr,opword,REG_INT,6);
    append_string(dstr,COMMA);
    append_register(dstr,opword,REG_INT,11);
    append_string(dstr,COMMA);
    append_string(dstr,nbstr);
}

/********************************************************************/
static void
func24 (unsigned int opword)
{
    append_Xbit_number(dstr,opword,3,6);
    append_string(dstr,COMMA);
    append_Xbit_number(dstr,opword,3,11);
}

/********************************************************************/
static void
func25 (unsigned int opword)
{
    append_Xbit_number(dstr,opword,3,6);
}

/********************************************************************/
static void
func26 (unsigned int opword)
{
    append_register(dstr,opword,REG_INT,6);
}

/********************************************************************/
static void
func27 (unsigned int opword)
{
    append_register(dstr,opword,REG_FLOAT,6);
}

/********************************************************************/
static void
func28 (unsigned int opword)
{
    unsigned int opw1, opw2;

    /* the SPR field is split, knock it out and put it together */
    /* as a single 10-bit field.                                */
    opw1 = (opword & 0x001F0000) >> 16;
    opw2 = (opword & 0x0000F800) >> 6;
    opw1 = opw1 | opw2;

    if (((opword & 0x000007FE) >> 1) == 339)    /* mfspr */
    {
        append_register(dstr,opword,REG_INT,6);
        append_string(dstr,COMMA);
    }
    switch (opw1)
    {
#if (defined(MPC602) || defined(MPC603) || defined(MPC604))
        case 1:
            append_string(dstr,"XER");
            break;
        case 8:
            append_string(dstr,"LR");
            break;
        case 9:
            append_string(dstr,"CTR");
            break;
        case 18:
            append_string(dstr,"DSISR");
            break;
        case 19:
            append_string(dstr,"DAR");
            break;
        case 22:
            append_string(dstr,"DEC");
            break;
        case 25:
            append_string(dstr,"SDR1");
            break;
        case 26:
            append_string(dstr,"SRR0");
            break;
        case 27:
            append_string(dstr,"SRR1");
            break;
        case 268:
        case 284:
            append_string(dstr,"TBL");
            break;
        case 269:
        case 285:
            append_string(dstr,"TBU");
            break;
        case 272:
            append_string(dstr,"SPRG0");
            break;
        case 273:
            append_string(dstr,"SPRG1");
            break;
        case 274:
            append_string(dstr,"SPRG2");
            break;
        case 275:
            append_string(dstr,"SPRG3");
            break;
        case 282:
            append_string(dstr,"EAR");
            break;
        case 287:
            append_string(dstr,"PVR");
            break;
        case 528:
            append_string(dstr,"IBAT0U");
            break;
        case 529:
            append_string(dstr,"IBAT0L");
            break;
        case 530:
            append_string(dstr,"IBAT1U");
            break;
        case 531:
            append_string(dstr,"IBAT1L");
            break;
        case 532:
            append_string(dstr,"IBAT2U");
            break;
        case 533:
            append_string(dstr,"IBAT2L");
            break;
        case 534:
            append_string(dstr,"IBAT3U");
            break;
        case 535:
            append_string(dstr,"IBAT3L");
            break;
        case 536:
            append_string(dstr,"DBAT0U");
            break;
        case 537:
            append_string(dstr,"DBAT0L");
            break;
        case 538:
            append_string(dstr,"DBAT1U");
            break;
        case 539:
            append_string(dstr,"DBAT1L");
            break;
        case 540:
            append_string(dstr,"DBAT2U");
            break;
        case 541:
            append_string(dstr,"DBAT2L");
            break;
        case 542:
            append_string(dstr,"DBAT3U");
            break;
        case 543:
            append_string(dstr,"DBAT3L");
            break;
#endif

#if (defined(MPC602))
        case 976:
            append_string(dstr,"DMISS");
            break;
        case 977:
            append_string(dstr,"DCMP");
            break;
        case 978:
            append_string(dstr,"HASH1");
            break;
        case 979:
            append_string(dstr,"HASH2");
            break;
        case 980:
            append_string(dstr,"IMISS");
            break;
        case 981:
            append_string(dstr,"ICMP");
            break;
        case 982:
            append_string(dstr,"RPA");
            break;
        case 984:
            append_string(dstr,"TCR");
            break;
        case 986:
            append_string(dstr,"IBR");
            break;
        case 987:
            append_string(dstr,"ESASRR");
            break;
        case 990:
            append_string(dstr,"SEBR");
            break;
        case 991:
            append_string(dstr,"SER");
            break;
        case 1008:
            append_string(dstr,"HID0");
            break;
        case 1009:
            append_string(dstr,"HID1");
            break;
        case 1010:
            append_string(dstr,"IABR");
            break;
        case 1021:
            append_string(dstr,"SP");
            break;
        case 1022:
            append_string(dstr,"LT");
            break;
#endif

#if (defined(MPC603))
        case 976:
            append_string(dstr,"DMISS");
            break;
        case 977:
            append_string(dstr,"DCMP");
            break;
        case 978:
            append_string(dstr,"HASH1");
            break;
        case 979:
            append_string(dstr,"HASH2");
            break;
        case 980:
            append_string(dstr,"IMISS");
            break;
        case 981:
            append_string(dstr,"ICMP");
            break;
        case 982:
            append_string(dstr,"RPA");
            break;
        case 1008:
            append_string(dstr,"HID0");
            break;
        case 1009:
            append_string(dstr,"HID1");
            break;
        case 1010:
            append_string(dstr,"IABR");
            break;
#endif

#if (defined(MPC821) || defined(MPC823) || defined(MPC850) || defined(MPC860))
        case 1:
            append_string(dstr,"XER");
            break;
        case 8:
            append_string(dstr,"LR");
            break;
        case 9:
            append_string(dstr,"CTR");
            break;
        case 18:
            append_string(dstr,"DSISR");
            break;
        case 19:
            append_string(dstr,"DAR");
            break;
        case 22:
            append_string(dstr,"DEC");
            break;
        case 26:
            append_string(dstr,"SRR0");
            break;
        case 27:
            append_string(dstr,"SRR1");
            break;
        case 80:
            append_string(dstr,"EIE");
            break;
        case 81:
            append_string(dstr,"EID");
            break;
        case 82:
            append_string(dstr,"NRI");
            break;
        case 144:
            append_string(dstr,"CMPA");
            break;
        case 145:
            append_string(dstr,"CMPB");
            break;
        case 146:
            append_string(dstr,"CMPC");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -