+// calculate EA and read\r
+// if (ea < 0x10) nothing is trashed\r
+// if (ea == 0x3c) r2 and r3 are trashed\r
+// else r0-r3 are trashed\r
+// size values 0, 1, 2 ~ byte, word, long\r
+// r_ea is reg to store ea in (-1 means ea is not needed), r is dst reg\r
+// if sign_extend is 0, non-32bit values will have MS bits undefined\r
+int EaCalcRead(int r_ea,int r,int ea,int size,int mask,int sign_extend)\r
+{\r
+ if (ea<0x10)\r
+ {\r
+ if (r_ea==-1)\r
+ {\r
+ r_ea=r;\r
+ if (!sign_extend) size=2;\r
+ }\r
+ }\r
+ else if (ea==0x3c) // #imm\r
+ {\r
+ r_ea=r;\r
+ }\r
+ else\r
+ {\r
+ if (r_ea==-1) r_ea=0;\r
+ }\r
+\r
+ EaCalc (r_ea,mask,ea,size,0,sign_extend);\r
+ EaRead (r_ea, r,ea,size,mask,0,sign_extend);\r
+\r
+ return 0;\r
+}\r
+\r
+int EaCalcReadNoSE(int r_ea,int r,int ea,int size,int mask)\r
+{\r
+ return EaCalcRead(r_ea,r,ea,size,mask,0);\r
+}\r
+\r