X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2FCyclone%2FEa.cpp;h=4be33e134eabfe23aedee5f2fba4018c04d2500b;hb=de89bf45d7b961e63abdffa79962e9951e8bf432;hp=35f0048a4d2ddbc8769891b41ec7f8d8375e3905;hpb=03c5768cb5cb2cd8a7ea3e4383fd10065d27970e;p=picodrive.git diff --git a/cpu/Cyclone/Ea.cpp b/cpu/Cyclone/Ea.cpp index 35f0048..4be33e1 100644 --- a/cpu/Cyclone/Ea.cpp +++ b/cpu/Cyclone/Ea.cpp @@ -1,6 +1,8 @@ #include "app.h" +int earead_check_addrerr = 1, eawrite_check_addrerr = 0; + // some ops use non-standard cycle counts for EAs, so are listed here. // all constants borrowed from the MUSASHI core by Karl Stenerud. @@ -149,7 +151,7 @@ int EaCalc(int a,int mask,int ea,int size,int top,int sign_extend) if (ea<0x28) { int step=1<=0x3a && ea<=0x3b) MemHandler(2,size,a); // Fetch - else MemHandler(0,size,a); // Read + if (ea>=0x3a && ea<=0x3b) MemHandler(2,size,a,earead_check_addrerr); // Fetch + else MemHandler(0,size,a,earead_check_addrerr); // Read + + // defaults to 1, as most things begins with a read + earead_check_addrerr=1; if (sign_extend) { @@ -462,7 +467,11 @@ int EaWrite(int a,int v,int ea,int size,int mask,int top,int sign_extend_ea) if (shift) ot(" mov r1,r%d,asr #%d\n",v,shift); else if (v!=1) ot(" mov r1,r%d\n",v); - MemHandler(1,size,a); // Call write handler + MemHandler(1,size,a,eawrite_check_addrerr); // Call write handler + + // not check by default, because most cases are rmw and + // address was already checked before reading + eawrite_check_addrerr = 0; ot("\n"); return 0; }