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

📄 i_scc.c

📁 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具
💻 C
字号:
/**********************************//*                                *//*  Copyright 2000, David Grant   *//*                                *//*  see LICENSE for more details  *//*                                *//**********************************/#include "coldfire.h"/* Set Conditionally *//* Format     15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+| 0 | 1 | 0 | 1 |   Condition   | 1 | 1 | 0 | 0 | 0 |  Register |+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+*/const char *code_mnemonic[16] = { "T", "F", "HI", "LS", "CC", "CS", "NE", "EQ",			"VC", "VS", "PL", "MI", "GE", "LT", "GT", "LE"};INSTRUCTION_4ARGS(SCC,	unsigned Code2,4,	unsigned Condition,4,	unsigned Code1,5,	unsigned Register,3);int SCCTime=1;static void execute(void){	struct _Address Destination;	SCC_Instr Instr;	unsigned char Result=0;	Memory_RetrWordFromPC(&Instr.Code);	if(!EA_GetFromPC(&Destination, 8, 0, Instr.Bits.Register)) return;	cycle(SCCTime);	switch(Instr.Bits.Condition) {	case 0: /* True */		Result=1;		break;	case 1: /* False */		break;	case 2: /* SHI */		/* The docs say (!C or !Z), however processor seems to do 		 * this: */		Result = SRBits->C || !SRBits->Z;		break;	case 3: /* SLS */		Result = SRBits->C || SRBits->Z;		break;	case 4: /* SCC */		Result = !SRBits->C;		break;	case 5: /* SCS */		Result = SRBits->C;		break;	case 6: /* SNE */		/* Set if they are not equal, ie Dest-Source != 0 */		Result = (!SRBits->Z);		break;	case 7: /* BEQ */		/* Don't set if they are not equal */		Result = (SRBits->Z);		break;	case 8: /* SVC */		Result = (!SRBits->V);		break;	case 9: /* SVS */		Result = SRBits->V;		break;	case 10: /* SPL */		Result = !SRBits->N;		break;	case 11: /* SMI */		Result = SRBits->N;		break;	case 12: /* SGE */		Result = ((SRBits->N && SRBits->V) || 					(!SRBits->N && !SRBits->V));		break;	case 13: /* SLT */		Result = ((SRBits->N && !SRBits->V) || 					(!SRBits->N && SRBits->V));		break;	case 14: /* SGT */		Result = ((SRBits->N && SRBits->V && !SRBits->Z) || 				(!SRBits->N && !SRBits->V && !SRBits->Z));		break;	case 15: /* SLE */		Result = (SRBits->Z || (SRBits->N && !SRBits->V) ||				(!SRBits->N && SRBits->V) );		break;	default:		SKYEYE_ERR("Unknown Condition Code 0x%02x\n", Instr.Bits.Condition);		return;	}	if(Result) Result = 0x000000FF;	EA_PutValue(&Destination, Result);			return;}static int disassemble(char *Instruction, char *Arg1, char *Arg2){		SCC_Instr Instr;	Memory_RetrWordFromPC(&Instr.Code);	sprintf(Instruction, "S%s", code_mnemonic[(int)Instr.Bits.Condition]);	sprintf(Arg1, "D%d", Instr.Bits.Register);	Arg2[0]=0;		return 0;}int scc_5206_register(void){	instruction_register(0x50C0, 0xF0F8, &execute, &disassemble);	return 1;}

⌨️ 快捷键说明

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