more MAME fixes, some optimization
[picodrive.git] / cpu / Cyclone / Ea.cpp
index 58faa46..39ed8a2 100644 (file)
@@ -181,7 +181,7 @@ int EaCalc(int a,int mask,int ea,int size,int top)
   if (ea<0x30) // ($nn,An) (di)\r
   {\r
     EaCalcReg(2,8,mask,0,0);\r
-    ot("  ldrsh r0,[r4],#2 ;@ Fetch offset\n");\r
+    ot("  ldrsh r0,[r4],#2 ;@ Fetch offset\n"); pc_dirty=1;\r
     ot("  ldr r2,[r7,r2,lsl #2]\n");\r
     ot("  add r%d,r0,r2 ;@ Add on offset\n",a);\r
     Cycles+=size<2 ? 8:12; // Extra cycles\r
@@ -191,7 +191,7 @@ int EaCalc(int a,int mask,int ea,int size,int top)
   if (ea<0x38) // ($nn,An,Rn) (ix)\r
   {\r
     ot(";@ Get extension word into r3:\n");\r
-    ot("  ldrh r3,[r4],#2 ;@ ($Disp,PC,Rn)\n");\r
+    ot("  ldrh r3,[r4],#2 ;@ ($Disp,PC,Rn)\n"); pc_dirty=1;\r
     ot("  mov r2,r3,lsr #10\n");\r
     ot("  tst r3,#0x0800 ;@ Is Rn Word or Long\n");\r
     ot("  and r2,r2,#0x3c ;@ r2=Index of Rn\n");\r
@@ -209,7 +209,7 @@ int EaCalc(int a,int mask,int ea,int size,int top)
 \r
   if (ea==0x38) // (aw)\r
   {\r
-    ot("  ldrsh r%d,[r4],#2 ;@ Fetch Absolute Short address\n",a);\r
+    ot("  ldrsh r%d,[r4],#2 ;@ Fetch Absolute Short address\n",a); pc_dirty=1;\r
     Cycles+=size<2 ? 8:12; // Extra cycles\r
     return 0;\r
   }\r
@@ -217,7 +217,7 @@ int EaCalc(int a,int mask,int ea,int size,int top)
   if (ea==0x39) // (al)\r
   {\r
     ot("  ldrh r2,[r4],#2 ;@ Fetch Absolute Long address\n");\r
-    ot("  ldrh r0,[r4],#2\n");\r
+    ot("  ldrh r0,[r4],#2\n"); pc_dirty=1;\r
     ot("  orr r%d,r0,r2,lsl #16\n",a);\r
     Cycles+=size<2 ? 12:16; // Extra cycles\r
     return 0;\r
@@ -227,7 +227,7 @@ int EaCalc(int a,int mask,int ea,int size,int top)
   {\r
     ot("  ldr r0,[r7,#0x60] ;@ Get Memory base\n");\r
     ot("  sub r0,r4,r0 ;@ Real PC\n");\r
-    ot("  ldrsh r2,[r4],#2 ;@ Fetch extension\n");\r
+    ot("  ldrsh r2,[r4],#2 ;@ Fetch extension\n"); pc_dirty=1;\r
     ot("  mov r0,r0,lsl #8\n");\r
     ot("  add r%d,r2,r0,asr #8 ;@ ($nn,PC)\n",a);\r
     Cycles+=size<2 ? 8:12; // Extra cycles\r
@@ -239,7 +239,7 @@ int EaCalc(int a,int mask,int ea,int size,int top)
     ot("  ldr r0,[r7,#0x60] ;@ Get Memory base\n");\r
     ot("  ldrh r3,[r4] ;@ Get extension word\n");\r
     ot("  sub r0,r4,r0 ;@ r0=PC\n");\r
-    ot("  add r4,r4,#2\n");\r
+    ot("  add r4,r4,#2\n"); pc_dirty=1;\r
     ot("  mov r0,r0,asl #8 ;@ use only 24bits of PC\n");\r
     ot("  mov r2,r3,lsr #10\n");\r
     ot("  tst r3,#0x0800 ;@ Is Rn Word or Long\n");\r
@@ -257,13 +257,13 @@ int EaCalc(int a,int mask,int ea,int size,int top)
   {\r
     if (size<2)\r
     {\r
-      ot("  ldr%s r%d,[r4],#2 ;@ Fetch immediate value\n",Sarm[size&3],a);\r
+      ot("  ldr%s r%d,[r4],#2 ;@ Fetch immediate value\n",Sarm[size&3],a); pc_dirty=1;\r
       Cycles+=4; // Extra cycles\r
       return 0;\r
     }\r
 \r
     ot("  ldrh r2,[r4],#2 ;@ Fetch immediate value\n");\r
-    ot("  ldrh r0,[r4],#2\n");\r
+    ot("  ldrh r0,[r4],#2\n"); pc_dirty=1;\r
     ot("  orr r%d,r0,r2,lsl #16\n",a);\r
     Cycles+=8; // Extra cycles\r
     return 0;\r
@@ -320,10 +320,8 @@ int EaRead(int a,int v,int ea,int size,int mask,int top)
     ot("\n"); return 0;\r
   }\r
 \r
-  if (a!=0) ot("  mov r0,r%d\n",a);\r
-\r
-  if (ea>=0x3a && ea<=0x3b) MemHandler(2,size); // Fetch\r
-  else                      MemHandler(0,size); // Read\r
+  if (ea>=0x3a && ea<=0x3b) MemHandler(2,size,a); // Fetch\r
+  else                      MemHandler(0,size,a); // Read\r
 \r
   if (v!=0 || shift) {\r
     if (shift) ot("  mov r%d,r0,asl #%d\n",v,shift);\r
@@ -388,11 +386,9 @@ int EaWrite(int a,int v,int ea,int size,int mask,int top)
 \r
   if (ea==0x3c) { ot("Error! Write EA=0x%x\n\n",ea); return 1; }\r
 \r
-  if (a!=0 && v!=0)  ot("  mov r0,r%d\n",a);\r
   if (v!=1 || shift) ot("  mov r1,r%d,asr #%d\n",v,shift);\r
-  if (a!=0 && v==0)  ot("  mov r0,r%d\n",a);\r
 \r
-  MemHandler(1,size); // Call write handler\r
+  MemHandler(1,size,a); // Call write handler\r
 \r
   ot("\n"); return 0;\r
 }\r