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

📄 cpu_threaded.c

📁 psp上的GBA模拟器
💻 C
📖 第 1 页 / 共 5 页
字号:
          case 2:                                                             \            /* LDRSB rd, [rn - rm]! */                                        \            arm_access_memory(load, down, pre_wb, s8, half_reg);              \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn - rm]! */                                        \            arm_access_memory(load, down, pre_wb, s16, half_reg);             \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* TEQ rd, rn, reg_op */                                              \        arm_data_proc_test(teq, reg_flags);                                   \      }                                                                       \      break;                                                                  \                                                                              \    case 0x14:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        if(opcode & 0x20)                                                     \        {                                                                     \          /* STRH rd, [rn - imm] */                                           \          arm_access_memory(store, down, pre, u16, half_imm);                 \        }                                                                     \        else                                                                  \        {                                                                     \          /* SWPB rd, rm, [rn] */                                             \          arm_swap(u8);                                                       \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* MRS rd, spsr */                                                    \        arm_psr(reg, read, spsr);                                             \      }                                                                       \      break;                                                                  \                                                                              \    case 0x15:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 1:                                                             \            /* LDRH rd, [rn - imm] */                                         \            arm_access_memory(load, down, pre, u16, half_imm);                \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn - imm] */                                        \            arm_access_memory(load, down, pre, s8, half_imm);                 \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn - imm] */                                        \            arm_access_memory(load, down, pre, s16, half_imm);                \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* CMP rn, reg_op */                                                  \        arm_data_proc_test(cmp, reg);                                         \      }                                                                       \      break;                                                                  \                                                                              \    case 0x16:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        /* STRH rd, [rn - imm]! */                                            \        arm_access_memory(store, down, pre_wb, u16, half_imm);                \      }                                                                       \      else                                                                    \      {                                                                       \        /* MSR spsr, rm */                                                    \        arm_psr(reg, store, spsr);                                            \      }                                                                       \      break;                                                                  \                                                                              \    case 0x17:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 1:                                                             \            /* LDRH rd, [rn - imm]! */                                        \            arm_access_memory(load, down, pre_wb, u16, half_imm);             \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn - imm]! */                                       \            arm_access_memory(load, down, pre_wb, s8, half_imm);              \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn - imm]! */                                       \            arm_access_memory(load, down, pre_wb, s16, half_imm);             \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* CMN rd, rn, reg_op */                                              \        arm_data_proc_test(cmn, reg);                                         \      }                                                                       \      break;                                                                  \                                                                              \    case 0x18:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        /* STRH rd, [rn + rm] */                                              \        arm_access_memory(store, up, pre, u16, half_reg);                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* ORR rd, rn, reg_op */                                              \        arm_data_proc(orr, reg, no_flags);                                    \      }                                                                       \      break;                                                                  \                                                                              \    case 0x19:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 1:                                                             \            /* LDRH rd, [rn + rm] */                                          \            arm_access_memory(load, up, pre, u16, half_reg);                  \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn + rm] */                                         \            arm_access_memory(load, up, pre, s8, half_reg);                   \            break;                                                            \                                                                              \          case 3:                                                             \            /* LDRSH rd, [rn + rm] */                                         \            arm_access_memory(load, up, pre, s16, half_reg);                  \            break;                                                            \        }                                                                     \      }                                                                       \      else                                                                    \      {                                                                       \        /* ORRS rd, rn, reg_op */                                             \        arm_data_proc(orrs, reg_flags, flags);                                \      }                                                                       \      break;                                                                  \                                                                              \    case 0x1A:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        /* STRH rd, [rn + rm]! */                                             \        arm_access_memory(store, up, pre_wb, u16, half_reg);                  \      }                                                                       \      else                                                                    \      {                                                                       \        /* MOV rd, reg_op */                                                  \        arm_data_proc_unary(mov, reg, no_flags);                              \      }                                                                       \      break;                                                                  \                                                                              \    case 0x1B:                                                                \      if((opcode & 0x90) == 0x90)                                             \      {                                                                       \        switch((opcode >> 5) & 0x03)                                          \        {                                                                     \          case 1:                                                             \            /* LDRH rd, [rn + rm]! */                                         \            arm_access_memory(load, up, pre_wb, u16, half_reg);               \            break;                                                            \                                                                              \          case 2:                                                             \            /* LDRSB rd, [rn + rm]! */                                        \            arm_access_memory(load, up, pre_wb, s8, half_reg);                \            break;                                                            \                                                                              \          case 3:                                                  

⌨️ 快捷键说明

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