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

📄 simops.c

📁 gdb-6.0 linux 下的调试工具
💻 C
📖 第 1 页 / 共 5 页
字号:
/* bclr imm8, (abs32) */void OP_FE010000 (insn, extension)     unsigned long insn, extension;{  unsigned long temp;  int z;  temp = load_byte (((insn & 0xffff) << 16) | (extension >> 8));  z = (temp & (extension & 0xff)) == 0;  temp = temp & ~(extension & 0xff);  store_byte (((insn & 0xffff) << 16) | (extension >> 8), temp);  PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);  PSW |= (z ? PSW_Z : 0);}/* bclr imm8,(d8,an) */void OP_FAF40000 (insn, extension)     unsigned long insn, extension;{  unsigned long temp;  int z;  temp = load_byte ((State.regs[REG_A0 + REG0_16 (insn)]                     + SEXT8 ((insn & 0xff00) >> 8)));  z = (temp & (insn & 0xff)) == 0;  temp = temp & ~(insn & 0xff);  store_byte ((State.regs[REG_A0 + REG0_16 (insn)]	       + SEXT8 ((insn & 0xff00) >> 8)), temp);  PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);  PSW |= (z ? PSW_Z : 0);}/* asr dm, dn */void OP_F2B0 (insn, extension)     unsigned long insn, extension;{  long temp;  int z, n, c;  temp = State.regs[REG_D0 + REG0 (insn)];  c = temp & 1;  temp >>= State.regs[REG_D0 + REG1 (insn)];  State.regs[REG_D0 + REG0 (insn)] = temp;  z = (State.regs[REG_D0 + REG0 (insn)] == 0);  n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N | PSW_C);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));}/* asr imm8, dn */void OP_F8C800 (insn, extension)     unsigned long insn, extension;{  long temp;  int z, n, c;  temp = State.regs[REG_D0 + REG0_8 (insn)];  c = temp & 1;  temp >>= (insn & 0xff);  State.regs[REG_D0 + REG0_8 (insn)] = temp;  z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);  n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N | PSW_C);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));}/* lsr dm, dn */void OP_F2A0 (insn, extension)     unsigned long insn, extension;{  int z, n, c;  c = State.regs[REG_D0 + REG0 (insn)] & 1;  State.regs[REG_D0 + REG0 (insn)]    >>= State.regs[REG_D0 + REG1 (insn)];  z = (State.regs[REG_D0 + REG0 (insn)] == 0);  n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N | PSW_C);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));}/* lsr imm8, dn */void OP_F8C400 (insn, extension)     unsigned long insn, extension;{  int z, n, c;  c = State.regs[REG_D0 + REG0_8 (insn)] & 1;  State.regs[REG_D0 + REG0_8 (insn)] >>=  (insn & 0xff);  z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);  n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N | PSW_C);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));}/* asl dm, dn */void OP_F290 (insn, extension)     unsigned long insn, extension;{  int n, z;  State.regs[REG_D0 + REG0 (insn)]    <<= State.regs[REG_D0 + REG1 (insn)];  z = (State.regs[REG_D0 + REG0 (insn)] == 0);  n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));}/* asl imm8, dn */void OP_F8C000 (insn, extension)     unsigned long insn, extension;{  int n, z;  State.regs[REG_D0 + REG0_8 (insn)] <<= (insn & 0xff);  z = (State.regs[REG_D0 + REG0_8 (insn)] == 0);  n = (State.regs[REG_D0 + REG0_8 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));}/* asl2 dn */void OP_54 (insn, extension)     unsigned long insn, extension;{  int n, z;  State.regs[REG_D0 + REG0 (insn)] <<= 2;  z = (State.regs[REG_D0 + REG0 (insn)] == 0);  n = (State.regs[REG_D0 + REG0 (insn)] & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));}/* ror dn */void OP_F284 (insn, extension)     unsigned long insn, extension;{  unsigned long value;  int c,n,z;  value = State.regs[REG_D0 + REG0 (insn)];  c = (value & 0x1);  value >>= 1;  value |= ((PSW & PSW_C) != 0) ? 0x80000000 : 0;  State.regs[REG_D0 + REG0 (insn)] = value;  z = (value == 0);  n = (value & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));}/* rol dn */void OP_F280 (insn, extension)     unsigned long insn, extension;{  unsigned long value;  int c,n,z;  value = State.regs[REG_D0 + REG0 (insn)];  c = (value & 0x80000000) ? 1 : 0;  value <<= 1;  value |= ((PSW & PSW_C) != 0);  State.regs[REG_D0 + REG0 (insn)] = value;  z = (value == 0);  n = (value & 0x80000000) != 0;  PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);  PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));}/* beq label:8 */void OP_C800 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (PSW & PSW_Z)    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bne label:8 */void OP_C900 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (!(PSW & PSW_Z))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bgt label:8 */void OP_C100 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (!((PSW & PSW_Z)        || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bge label:8 */void OP_C200 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (!(((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* ble label:8 */void OP_C300 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if ((PSW & PSW_Z)       || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* blt label:8 */void OP_C000 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bhi label:8 */void OP_C500 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (!(((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bcc label:8 */void OP_C600 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (!(PSW & PSW_C))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bls label:8 */void OP_C700 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0)    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bcs label:8 */void OP_C400 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  if (PSW & PSW_C)    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* bvc label:8 */void OP_F8E800 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 3 after we return, so     we subtract two here to make things right.  */  if (!(PSW & PSW_V))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;}/* bvs label:8 */void OP_F8E900 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 3 after we return, so     we subtract two here to make things right.  */  if (PSW & PSW_V)    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;}/* bnc label:8 */void OP_F8EA00 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 3 after we return, so     we subtract two here to make things right.  */  if (!(PSW & PSW_N))    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;}/* bns label:8 */void OP_F8EB00 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 3 after we return, so     we subtract two here to make things right.  */  if (PSW & PSW_N)    State.regs[REG_PC] += SEXT8 (insn & 0xff) - 3;}/* bra label:8 */void OP_CA00 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 2 after we return, so     we subtract two here to make things right.  */  State.regs[REG_PC] += SEXT8 (insn & 0xff) - 2;}/* leq */void OP_D8 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (PSW & PSW_Z)    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lne */void OP_D9 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (!(PSW & PSW_Z))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lgt */void OP_D1 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (!((PSW & PSW_Z)        || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lge */void OP_D2 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (!(((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lle */void OP_D3 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if ((PSW & PSW_Z)       || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* llt */void OP_D0 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lhi */void OP_D5 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (!(((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lcc */void OP_D6 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (!(PSW & PSW_C))    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lls */void OP_D7 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0)    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lcs */void OP_D4 (insn, extension)     unsigned long insn, extension;{  /* The dispatching code will add 1 after we return, so     we subtract one here to make things right.  */  if (PSW & PSW_C)    State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* lra */void OP_DA (insn, extension)     unsigned long insn, extension;{  State.regs[REG_PC] = State.regs[REG_LAR] - 4 - 1;}/* setlb */void OP_DB (insn, extension)     unsigned long insn, extension;{  State.regs[REG_LIR] = load_mem_big (State.regs[REG_PC] + 1, 4);  State.regs[REG_LAR] = State.regs[REG_PC] + 5;}/* jmp (an) */void OP_F0F4 (insn, extension)     unsigned long insn, extension;{  State.regs[REG_PC] = State.regs[REG_A0 + REG0 (insn)] - 2;}/* jmp label:16 */void OP_CC0000 (insn, extension)     unsigned long insn, extension;{  State.regs[REG_PC] += SEXT16 (insn & 0xffff) - 3;}/* jmp label:32 */void OP_DC000000 (insn, extension)     unsigned long insn, extension;{  State.regs[REG_PC] += (((insn & 0xffffff) << 8) + extension) - 5;}/* call label:16,reg_list,imm8 */void OP_CD000000 (insn, extension)     unsigned long insn, extension;{  unsigned int next_pc, sp;  unsigned long mask;  sp = State.regs[REG_SP];  next_pc = State.regs[REG_PC] + 5;  State.mem[sp] = next_pc & 0xff;  State.mem[sp+1] = (next_pc & 0xff00) >> 8;  State.mem[sp+2] = (next_pc & 0xff0000) >> 16;  State.mem[sp+3] = (next_pc & 0xff000000) >> 24;  mask = insn & 0xff;  if (mask & 0x80)    {      sp -= 4;      store_word (sp, State.regs[REG_D0 + 2]);    }  if (mask & 0x40)    {      sp -= 4;      store_word (sp, State.regs[REG_D0 + 3]);    }  if (mask & 0x20)    {      sp -= 4;      store_word (sp, State.regs[REG_A0 + 2]);    }  if (mask & 0x10)    {      sp -= 4;      store_word (sp, State.regs[REG_A0 + 3]);    }  if (mask & 0x8)    {      sp -= 4;      store_word (sp, State.regs[REG_D0]);      sp -= 4;      store_word (sp, State.regs[REG_D0 + 1]);      sp -= 4;      store_word (sp, State.regs[REG_A0]);      sp -= 4;      store_word (sp, State.regs[REG_A0 + 1]);      sp -= 4;      store_word (sp, State.regs[REG_MDR]);      sp -= 4;      store_word (sp, State.regs[REG

⌨️ 快捷键说明

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