📄 arm7tdmi-opcodes.cpp
字号:
/*************************************************************************** DSemu - The Next Generation ** Portable ARM7TDMI core: ARM7-specific opcodes [arm7tdmi-opcodes.cpp] ** Copyright Imran Nazar, 2005; released under the BSD public licence. ***************************************************************************/// There isn't much in here, because most of the ARM7 is subsumed into the// ARM9; therefore, those opcodes are common, and defined in arm-dp|ls.#include "arm7tdmi.h"#include "plgmmu32.h"#include "armhelp.h"#include "armmasks.h"#include "datadefs.h"#include "log.h"#include "err.h"//---Conditional execution-------------------------------------------------// Each of these functions returns 1 or 0, dependent on flag state.// Called by the dispatcher, by lookup in the condition LUT.int ARM7TDMI::condEQ(){return reg.flags[FLAG_Z];}int ARM7TDMI::condNE(){return !reg.flags[FLAG_Z];}int ARM7TDMI::condCS(){return reg.flags[FLAG_C];}int ARM7TDMI::condCC(){return !reg.flags[FLAG_C];}int ARM7TDMI::condMI(){return reg.flags[FLAG_N];}int ARM7TDMI::condPL(){return !reg.flags[FLAG_N];}int ARM7TDMI::condVS(){return reg.flags[FLAG_V];}int ARM7TDMI::condVC(){return !reg.flags[FLAG_V];}int ARM7TDMI::condHI(){return (!reg.flags[FLAG_Z])®.flags[FLAG_C];}int ARM7TDMI::condLS(){return reg.flags[FLAG_Z]|(!reg.flags[FLAG_C]);}int ARM7TDMI::condGE(){return !(reg.flags[FLAG_N]^reg.flags[FLAG_V]);}int ARM7TDMI::condLT(){return (reg.flags[FLAG_N]^reg.flags[FLAG_V]);}int ARM7TDMI::condGT(){return (!reg.flags[FLAG_Z])&(!(reg.flags[FLAG_N]^reg.flags[FLAG_V]));}int ARM7TDMI::condLE(){return reg.flags[FLAG_Z]|(reg.flags[FLAG_N]^reg.flags[FLAG_V]);}int ARM7TDMI::condAL(){return 1;}int ARM7TDMI::condNV(){return 0;}//---Branching-------------------------------------------------------------OPC opB(){ s32 i = (reg.curop & 0x00FFFFFF) << 2; // Extract address i = (i & 0x02000000)?(0xFC000000 | i):i; // Sign extend reg.r[15] += i+4; // And branch return 3;}OPC opBL(){ reg.r[14] = reg.r[15]; // Save link addr s32 i = (reg.curop & 0x00FFFFFF) << 2; // Extract address i = (i & 0x02000000)?(0xFC000000 | i):i; // Sign extend reg.r[15] += i+4; // And branch return 3;}OPC opBX(){/* if((_RM&3)==2) opUNP();*/ reg.r[15]=(_RM&~1)+Rm15hack; reg.flags[FLAG_T]=_RM&1; return 1;}/*** EOF: arm7tdmi-opcodes.cpp *******************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -