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

📄 cpu_threaded.c

📁 psp上的GBA模拟器
💻 C
📖 第 1 页 / 共 5 页
字号:
        else                                                                  \        {                                                                     \          /* SMULL rd, rm, rs */                                              \          arm_multiply_long(s64, no, no);                                     \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* SBC rd, rn, reg_op */                                              \        arm_data_proc(sbc, reg, no_flags);                                    \      }                                                                       \      break;                                                                  \                                                                              \    case 0x0D:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 0:                                                             \            /* SMULLS rdlo, rdhi, rm, rs */                                   \            arm_multiply_long(s64, no, yes);                                  \            break;                                                            \                                                                              \          case 1:                                                             \            /* LDRH rd, [rn], +imm */                                         \            arm_access_memory(load, up, post, u16, half_imm);                 \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn], +imm */                                        \            arm_access_memory(load, up, post, s8, half_imm);                  \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn], +imm */                                        \            arm_access_memory(load, up, post, s16, half_imm);                 \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* SBCS rd, rn, reg_op */                                             \        arm_data_proc(sbcs, reg, flags);                                      \      }                                                                       \      break;                                                                  \                                                                              \    case 0x0E:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        if(opcode & 0x20)                                                     \        {                                                                     \          /* STRH rd, [rn], +imm */                                           \          arm_access_memory(store, up, post, u16, half_imm);                  \        }                                                                     \        else                                                                  \        {                                                                     \          /* SMLAL rd, rm, rs */                                              \          arm_multiply_long(s64_add, yes, no);                                \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* RSC rd, rn, reg_op */                                              \        arm_data_proc(rsc, reg, no_flags);                                    \      }                                                                       \      break;                                                                  \                                                                              \    case 0x0F:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 0:                                                             \            /* SMLALS rdlo, rdhi, rm, rs */                                   \            arm_multiply_long(s64_add, yes, yes);                             \            break;                                                            \                                                                              \          case 1:                                                             \            /* LDRH rd, [rn], +imm */                                         \            arm_access_memory(load, up, post, u16, half_imm);                 \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn], +imm */                                        \            arm_access_memory(load, up, post, s8, half_imm);                  \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn], +imm */                                        \            arm_access_memory(load, up, post, s16, half_imm);                 \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* RSCS rd, rn, reg_op */                                             \        arm_data_proc(rscs, reg, flags);                                      \      }                                                                       \      break;                                                                  \                                                                              \    case 0x10:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        if(opcode & 0x20)                                                     \        {                                                                     \          /* STRH rd, [rn - rm] */                                            \          arm_access_memory(store, down, pre, u16, half_reg);                 \        }                                                                     \        else                                                                  \        {                                                                     \          /* SWP rd, rm, [rn] */                                              \          arm_swap(u32);                                                      \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* MRS rd, cpsr */                                                    \        arm_psr(reg, read, cpsr);                                             \      }                                                                       \      break;                                                                  \                                                                              \    case 0x11:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 1:                                                             \            /* LDRH rd, [rn - rm] */                                          \            arm_access_memory(load, down, pre, u16, half_reg);                \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn - rm] */                                         \            arm_access_memory(load, down, pre, s8, half_reg);                 \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn - rm] */                                         \            arm_access_memory(load, down, pre, s16, half_reg);                \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* TST rd, rn, reg_op */                                              \        arm_data_proc_test(tst, reg_flags);                                   \      }                                                                       \      break;                                                                  \                                                                              \    case 0x12:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        /* STRH rd, [rn - rm]! */                                             \        arm_access_memory(store, down, pre_wb, u16, half_reg);                \      }                                                                       \      else                                                                    \      {                                                                       \        if(opcode & 0x10)                                                     \        {                                                                     \          /* BX rn */                                                         \          arm_bx();                                                           \        }                                                                     \        else                                                                  \        {                                                                     \          /* MSR cpsr, rm */                                                  \          arm_psr(reg, store, cpsr);                                          \        }                                                                     \      }                                                                       \      break;                                                                  \                                                                              \    case 0x13:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 1:                                                             \            /* LDRH rd, [rn - rm]! */                                         \            arm_access_memory(load, down, pre_wb, u16, half_reg);             \            break;                                                            \                                                                              \

⌨️ 快捷键说明

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