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

📄 dsmlib.c

📁 vxworks5.5.1源代码。完整源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                case 0x009a:    strcpy (ss, "x1");	break;		case 0x00aa:    strcpy (ss, "y0");	break;		case 0x00ba:    strcpy (ss, "y1");	break;#endif /* CPU==SH7700 || CPU==SH7600 */		default:	strcpy (ss, "????");		}	    sprintf (s, "%s,r%u", ss, (insn & 0x0f00) >> 8);		break;	case itAtOneReg:#if (CPU==SH7750)	    if (iPtr->op == 0x00c3)	/* MOVCA.L R0,@Rn */		sprintf (s, "r0,@r%u", (insn & 0x0f00) >> 8);	    else#endif /* CPU==SH7750 */		sprintf (s, "@r%u", (insn & 0x0f00) >> 8);	    break;	case itPushCsr:	    switch (iPtr->op)		{		case 0x4003:	strcpy (ss, "sr");	break;		case 0x4013:	strcpy (ss, "gbr");	break;		case 0x4023:	strcpy (ss, "vbr");	break;#if (CPU==SH7750 || CPU==SH7700)		case 0x4033:	strcpy (ss, "ssr");	break;		case 0x4043:	strcpy (ss, "spc");	break;		case 0x4083:	strcpy (ss, "r0_bank");	break;		case 0x4093:	strcpy (ss, "r1_bank");	break;		case 0x40a3:	strcpy (ss, "r2_bank");	break;		case 0x40b3:	strcpy (ss, "r3_bank");	break;		case 0x40c3:	strcpy (ss, "r4_bank");	break;		case 0x40d3:	strcpy (ss, "r5_bank");	break;		case 0x40e3:	strcpy (ss, "r6_bank");	break;		case 0x40f3:	strcpy (ss, "r7_bank");	break;#endif /* CPU==SH7750 || CPU==SH7700 */		case 0x4002:	strcpy (ss, "mach");	break;		case 0x4012:	strcpy (ss, "macl");	break;		case 0x4022:	strcpy (ss, "pr");	break;#if (CPU==SH7700 || CPU==SH7600)		case 0x4053:	strcpy (ss, "mod");	break;		case 0x4062:	strcpy (ss, "dsr");	break;		case 0x4063:	strcpy (ss, "rs");	break;		case 0x4072:	strcpy (ss, "a0");	break;		case 0x4073:	strcpy (ss, "re");	break;		case 0x4082:	strcpy (ss, "x0");	break;		case 0x4092:	strcpy (ss, "x1");	break;		case 0x40a2:	strcpy (ss, "y0");	break;		case 0x40b2:	strcpy (ss, "y1");	break;#endif /* CPU==SH7700 || CPU==SH7600 */		default:	strcpy (ss, "????");		}	    sprintf (s, "%s,@-r%u", ss, (insn & 0x0f00) >> 8);		break;	case itBraDispRm:	    sprintf (s, "r%u", (insn & 0x0f00) >> 8);			break;	case itLoadCsr:	    switch (iPtr->op)		{		case 0x400e:	strcpy (ss, "sr");	break;		case 0x401e:	strcpy (ss, "gbr");	break;		case 0x402e:	strcpy (ss, "vbr");	break;#if (CPU==SH7750 || CPU==SH7700)		case 0x403e:	strcpy (ss, "ssr");	break;		case 0x404e:	strcpy (ss, "spc");	break;		case 0x408e:	strcpy (ss, "r0_bank");	break;		case 0x409e:	strcpy (ss, "r1_bank");	break;		case 0x40ae:	strcpy (ss, "r2_bank");	break;		case 0x40be:	strcpy (ss, "r3_bank");	break;		case 0x40ce:	strcpy (ss, "r4_bank");	break;		case 0x40de:	strcpy (ss, "r5_bank");	break;		case 0x40ee:	strcpy (ss, "r6_bank");	break;		case 0x40fe:	strcpy (ss, "r7_bank");	break;#endif /* CPU==SH7750 || CPU==SH7700 */		case 0x400a:	strcpy (ss, "mach");	break;		case 0x401a:	strcpy (ss, "macl");	break;		case 0x402a:	strcpy (ss, "pr");	break;#if (CPU==SH7700 || CPU==SH7600)		case 0x405e:	strcpy (ss, "mod");	break;		case 0x406a:	strcpy (ss, "dsr");	break;		case 0x406e:	strcpy (ss, "rs");	break;		case 0x407a:	strcpy (ss, "a0");	break;		case 0x407e:	strcpy (ss, "re");	break;		case 0x408a:	strcpy (ss, "x0");	break;		case 0x409a:	strcpy (ss, "x1");	break;		case 0x40aa:	strcpy (ss, "y0");	break;		case 0x40ba:	strcpy (ss, "y1");	break;#endif /* CPU==SH7700 || CPU==SH7600 */		default:	strcpy (ss, "????");		}	    sprintf (s, "r%u,%s", (insn & 0x0f00) >> 8, ss);		break;	case itPopCsr:	    switch (iPtr->op)		{		case 0x4007:	strcpy (ss, "sr");	break;		case 0x4017:	strcpy (ss, "gbr");	break;		case 0x4027:	strcpy (ss, "vbr");	break;#if (CPU==SH7750 || CPU==SH7700)		case 0x4037:	strcpy (ss, "ssr");	break;		case 0x4047:	strcpy (ss, "spc");	break;		case 0x4087:	strcpy (ss, "r0_bank");	break;		case 0x4097:	strcpy (ss, "r1_bank");	break;		case 0x40a7:	strcpy (ss, "r2_bank");	break;		case 0x40b7:	strcpy (ss, "r3_bank");	break;		case 0x40c7:	strcpy (ss, "r4_bank");	break;		case 0x40d7:	strcpy (ss, "r5_bank");	break;		case 0x40e7:	strcpy (ss, "r6_bank");	break;		case 0x40f7:	strcpy (ss, "r7_bank");	break;#endif /* CPU==SH7750 || CPU==SH7700 */		case 0x4006:	strcpy (ss, "mach");	break;		case 0x4016:	strcpy (ss, "macl");	break;		case 0x4026:	strcpy (ss, "pr");	break;#if (CPU==SH7700 || CPU==SH7600)		case 0x4057:	strcpy (ss, "mod");	break;		case 0x4066:	strcpy (ss, "dsr");	break;		case 0x4067:	strcpy (ss, "rs");	break;		case 0x4076:	strcpy (ss, "a0");	break;		case 0x4077:	strcpy (ss, "re");	break;		case 0x4086:	strcpy (ss, "x0");	break;		case 0x4096:	strcpy (ss, "x1");	break;		case 0x40a6:	strcpy (ss, "y0");	break;		case 0x40b6:	strcpy (ss, "y1");	break;#endif /* CPU==SH7700 || CPU==SH7600 */		default:	strcpy (ss, "????");		}	    sprintf (s, "@r%u+,%s", (insn & 0x0f00) >> 8, ss);		break;	case itTwoReg:	    sprintf (s, "r%u,r%u",	(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itPutRmAtRn:	    sprintf (s, "r%u,@r%u",	(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itGetRnAtRm:	    sprintf (s, "@r%u,r%u",	(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itMac:	    sprintf (s, "@r%u+,@r%u+",	(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itPopReg:	    sprintf (s, "@r%u+,r%u",	(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itPushReg:	    sprintf (s, "r%u,@-r%u",	(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itPutRmAtR0Rn:	    sprintf (s, "r%u,@(r0,r%u)",(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itGetRnAtR0Rm:	    sprintf (s, "@(r0,r%u),r%u",(insn & 0x00f0) >> 4,					(insn & 0x0f00) >> 8);		break;	case itGetR0AtDispRm:	    switch (iPtr->op)		{		case 0x8400:		    sprintf (s, "@(%d,r%u),r0",  insn & 0x000f,						(insn & 0x00f0) >> 4);	break;		case 0x8500:		    sprintf (s, "@(%d,r%u),r0", (insn & 0x000f) << 1,						(insn & 0x00f0) >> 4);	break;		default:		    strcpy (s, "????");		}									break;	case itPutR0AtDispRn:       /* nd4 format: "opcode R0,@(disp,Rn)"   */	    switch (iPtr->op)		{		case 0x8000:		    sprintf (s, "r0,@(%d,r%u)",  insn & 0x000f,						(insn & 0x00f0) >> 4);	break;		case 0x8100:		    sprintf (s, "r0,@(%d,r%u)", (insn & 0x000f) << 1,						(insn & 0x00f0) >> 4);	break;		default:		    strcpy (s, "????");		}									break;	case itPutRmAtDispRn:       /* nmd format: "opcode Rm,@(disp,Rn)"   */	    sprintf (s, "r%u,@(%d,r%u)",	(insn & 0x00f0) >> 4,						(insn & 0x000f) << 2,						(insn & 0x0f00) >> 8);	break;	case itGetRnAtDispRm:       /* nmd format: "opcode @(disp,Rm),Rn"   */	    sprintf (s, "@(%d,r%u),r%u",	(insn & 0x000f) << 2,						(insn & 0x00f0) >> 4,						(insn & 0x0f00) >> 8);	break;	case itPutR0AtDispGbr:      /* d   format: "opcode R0,@(disp,GBR)"  */	    switch (iPtr->op)		{		case 0xc000:		    sprintf (s, "r0,@(%#x,gbr)", insn & 0x00ff);	break;		case 0xc100:		    sprintf (s, "r0,@(%#x,gbr)", (insn & 0x00ff) << 1);	break;		case 0xc200:		    sprintf (s, "r0,@(%#x,gbr)", (insn & 0x00ff) << 2);	break;		default:		    strcpy (s, "????");		}									break;	case itGetR0AtDispGbr:      /* d   format: "opcode @(disp,GBR),R0"  */	    switch (iPtr->op)		{		case 0xc400:		    sprintf (s, "@(%#x,gbr),r0", insn & 0x00ff);	break;		case 0xc500:		    sprintf (s, "@(%#x,gbr),r0", (insn & 0x00ff) << 1);	break;		case 0xc600:		    sprintf (s, "@(%#x,gbr),r0", (insn & 0x00ff) << 2);	break;		default:		    strcpy (s, "????");		}									break;	case itMova:                /* d   format: "opcode @(disp,PC),R0"   */	    {	    char sym [MAX_SYS_SYM_LEN + 1];	    disp = (insn & 0x00ff) << 2;	    addr = (UINT32)((address + 4 + disp) & 0xfffffffc);	    dsmFormatAdrs (addr, sym);	    sprintf (s, "@(%#x,pc),r0 (= %s)", (INT16)disp, sym);	    }									break;	case itBraDisp8:            /* d   format: "opcode disp"            */	    {	    char sym [MAX_SYS_SYM_LEN + 1];	    if (insn & 0x0080) disp = (insn | 0xff00) << 1;	    else               disp = (insn & 0x00ff) << 1;	    addr = (UINT32)(address + 4 + (INT16)disp);	    dsmFormatAdrs (addr, sym);	    sprintf (s, "%+d       (==> %s)", (INT16)disp, sym);	    }									break;	case itBraDisp12:           /* d12 format: "opcode disp"            */	    {	    char sym [MAX_SYS_SYM_LEN + 1];	    if (insn & 0x0800) disp = (insn | 0xf000) << 1;	    else               disp = (insn & 0x0fff) << 1;	    addr = (UINT32)(address + 4 + (INT16)disp);	    dsmFormatAdrs (addr, sym);	    sprintf (s, "%+d       (==> %s)", (INT16)disp, sym);	    }									break;	case itGetRnAtDispPc:       /* nd8 format: "opcode @(disp,PC),Rn"   */	    switch (iPtr->op)		{		case 0x9000:		    disp = (insn & 0x00ff) << 1;		    dPtr = (UINT32 *)((address + 4 + disp) & 0xfffffffe);		    sprintf (s, "@(%#x,pc),r%u (= 0x%08x)",			     disp, (insn & 0x0f00) >> 8, *(INT16 *)dPtr);		    break;		case 0xd000:		    {		    char     *label;  /* pointer to sym tbl copy of name */		    void     *actVal;		    SYMBOL_ID symId;		    char      demangled [MAX_SYS_SYM_LEN + 1];		    char     *labelToPrint;		    disp = (insn & 0x00ff) << 2;		    dPtr = (UINT32 *)((address + 4 + disp) & 0xfffffffc);		    addr = *dPtr;		    		    if ((symFindSymbol (sysSymTbl, NULL, 					(void *)addr, SYM_MASK_NONE, 					SYM_MASK_NONE, &symId) == OK) &&			(symNameGet (symId, &label) == OK) &&			(symValueGet (symId, &actVal) == OK) && 			(actVal == (void *)addr))			{			labelToPrint = cplusDemangle (label, demangled,						      sizeof (demangled));			sprintf (s, "@(%#x,pc),r%u (= 0x%08x = %s)",				 disp, (insn & 0x0f00) >> 8,				 *dPtr, labelToPrint);			}		    else			{			sprintf (s, "@(%#x,pc),r%u (= 0x%08x)",				 disp, (insn & 0x0f00) >> 8, *dPtr);			}		    }		    break;		default:		    strcpy (s, "????");		}									break;#if (CPU==SH7700 || CPU==SH7600)        case itGetDispPc:	    {	    char sym [MAX_SYS_SYM_LEN + 1];	    switch (iPtr->op)		{		case 0x8e00:		case 0x8c00: /* allows negative ofsets */		    if (insn & 0x0080)		        disp = (insn | 0xff00) << 1; 		    else		        disp = (insn & 0x00ff) << 1; 		    break;		default:     		    disp = 0;		    break;		}	    addr = (UINT32)(address + 4 + (INT16)disp);	    dsmFormatAdrs (addr, sym);	    sprintf (s, "@(%#x,pc)       (==> %s)", disp, sym);	    }									break;#endif /* CPU==SH7700 || CPU==SH7600 */	case itImmAtR0Gbr:	    sprintf (s, "#0x%x,@(r0,gbr)",   insn & 0x00ff);		break;	case itImmToR0:	    switch (iPtr->op)		{		case 0x8800:		    sprintf (s, "#0x%x,r0", (INT8)(insn & 0x00ff));	break;		default:		    sprintf (s, "#0x%x,r0",        insn & 0x00ff );		}									break;	case itImm:	    sprintf (s, "#%d",		insn & 0x00ff);			break;	case itImmToRn:	    sprintf (s, "#%d,r%u",(INT8)(insn & 0x00ff),				        (insn & 0x0f00) >> 8);		break;	default:	    strcpy (s, "unknown instruction type.");	}    }/********************************************************************************* dsmFormatAdrs - prints addresses as symbols, if an exact match can be found** NOMANUAL*/ LOCAL void dsmFormatAdrs    (    int address,		/* address to print */    char *s    )    {    char *label; /* pointer to symbol table copy of name */

⌨️ 快捷键说明

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