aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/arm/interpreter/armsupp.cpp
diff options
context:
space:
mode:
authorGravatar bunnei <ericbunnie@gmail.com>2014-05-01 23:03:50 -0400
committerGravatar bunnei <ericbunnie@gmail.com>2014-05-01 23:03:50 -0400
commitf7c6302009aa2453c37a6a7a3b1af4843f620078 (patch)
tree59d429e36b9c3acd60a779ffbf063c59b2079e32 /src/core/arm/interpreter/armsupp.cpp
parentc1e71ae1ac6700e2e849c59e55baeacda7a20ae6 (diff)
- added CallMCR function to coprocessor HLE module
- moved instruction decoding to coprocessor HLE module
Diffstat (limited to 'src/core/arm/interpreter/armsupp.cpp')
-rw-r--r--src/core/arm/interpreter/armsupp.cpp45
1 files changed, 23 insertions, 22 deletions
diff --git a/src/core/arm/interpreter/armsupp.cpp b/src/core/arm/interpreter/armsupp.cpp
index d913c179..e531dced 100644
--- a/src/core/arm/interpreter/armsupp.cpp
+++ b/src/core/arm/interpreter/armsupp.cpp
@@ -661,7 +661,8 @@ ARMul_STC (ARMul_State * state, ARMword instr, ARMword address)
void
ARMul_MCR (ARMul_State * state, ARMword instr, ARMword source)
{
- unsigned cpab;
+ HLE::CallMCR(instr, source);
+ //unsigned cpab;
////printf("SKYEYE ARMul_MCR, CPnum is %x, source %x\n",CPNum, source);
//if (!CP_ACCESS_ALLOWED (state, CPNum)) {
@@ -671,29 +672,29 @@ ARMul_MCR (ARMul_State * state, ARMword instr, ARMword source)
// return;
//}
- cpab = (state->MCR[CPNum]) (state, ARMul_FIRST, instr, source);
+ //cpab = (state->MCR[CPNum]) (state, ARMul_FIRST, instr, source);
- while (cpab == ARMul_BUSY) {
- ARMul_Icycles (state, 1, 0);
+ //while (cpab == ARMul_BUSY) {
+ // ARMul_Icycles (state, 1, 0);
- if (IntPending (state)) {
- cpab = (state->MCR[CPNum]) (state, ARMul_INTERRUPT,
- instr, 0);
- return;
- }
- else
- cpab = (state->MCR[CPNum]) (state, ARMul_BUSY, instr,
- source);
- }
+ // if (IntPending (state)) {
+ // cpab = (state->MCR[CPNum]) (state, ARMul_INTERRUPT,
+ // instr, 0);
+ // return;
+ // }
+ // else
+ // cpab = (state->MCR[CPNum]) (state, ARMul_BUSY, instr,
+ // source);
+ //}
- if (cpab == ARMul_CANT) {
- printf ("SKYEYE ARMul_MCR, CANT, UndefinedInstr %x CPnum is %x, source %x\n", instr, CPNum, source);
- ARMul_Abort (state, ARMul_UndefinedInstrV);
- }
- else {
- BUSUSEDINCPCN;
- ARMul_Ccycles (state, 1, 0);
- }
+ //if (cpab == ARMul_CANT) {
+ // printf ("SKYEYE ARMul_MCR, CANT, UndefinedInstr %x CPnum is %x, source %x\n", instr, CPNum, source);
+ // ARMul_Abort (state, ARMul_UndefinedInstrV);
+ //}
+ //else {
+ // BUSUSEDINCPCN;
+ // ARMul_Ccycles (state, 1, 0);
+ //}
}
/* This function does the Busy-Waiting for an MCRR instruction. */
@@ -739,7 +740,7 @@ ARMul_MRC (ARMul_State * state, ARMword instr)
{
unsigned cpab;
- ARMword result = HLE::CallMRC((HLE::ARM11_MRC_OPERATION)BITS(20, 27));
+ ARMword result = HLE::CallMRC(instr);
////printf("SKYEYE ARMul_MRC, CPnum is %x, instr %x\n",CPNum, instr);
//if (!CP_ACCESS_ALLOWED (state, CPNum)) {